Рубрики
Без рубрики

Python, управляемый событиями на AWS

С момента получения сертификата практикующего облака в начале сентября я действительно хотел углубиться в проект t … Tagged with AWS, Python.

С момента получения сертификата практикующего облака в начале сентября я действительно хотел углубиться в проект, чтобы укрепить мое понимание облачных продуктов AWS. Именно тогда я нашел эту проблему в Интернете Форрест Бризл

Задача тематической темы Python, и его создатель-Forrest Braiseal. Задача состоит в том, чтобы автоматизировать конвейер обработки ETL для данных COVID-19 с использованием сервисов Python и Cloud. Forrest создал идеальный шаблон, чтобы я мог построить реальные навыки Python и AWS, которые хорошо переводят, чтобы помочь мне укрепить сертификацию Practiciter Cloud, чтобы я мог получить хороший фундамент с инструментами AWS, прежде чем я попробую экзамен Architect Architect Architect. Это все в надежде построить мою силу портфеля и помочь получить интервью/работы.

  • 1. ETL-JOB
  • 2. Извлечение
  • 3. Трансформация
  • 4. Код-cleanup
  • 5. НАГРУЗКА
  • 6. УВЕДОМЛЕНИЕ
  • 7. ОБРАБОТКА ОШИБОК
  • 8. Тесты
  • 9. ПРИБОРНАЯ ДОСКА
  • 10. СООБЩЕНИЕ БЛОГА

Я запланировал ETL-JOB ежедневно через управление событиями CloudWatch. Это было просто путем добавления в свойства для вашей функции лямбды в Шаблон.yaml

Events:
        dataDownload:
          Type: Schedule
          Properties:
            Schedule: 'rate(1 day)'
            Description: daily schedule
            Enabled: True

Использование пандов до этой задачи было очень просты для меня. Извлечение из онлайн -CSV было легко выполнено с помощью функции Pd.Read:

nytimes_df = pd.read_csv(nytimes_link)
john_hopkins_df = pd.read_csv(john_hopkins_link)

Опять же, используя панды в прошлом, чистка, соединение и фильтрация были функционированы, я подвергался воздействию в прошлом.

john_hopkins_df = john_hopkins_df[john_hopkins_df["Country/Region"]=='US']  
john_hopkins_df.columns = [x.lower() for x in john_hopkins_df.columns]

#Converting to datetime object     
nytimes_df['date'] = pd.to_datetime(nytimes_df['date'], infer_datetime_format=True)     
john_hopkins_df['date'] = pd.to_datetime(john_hopkins_df['date'], infer_datetime_format=True)

#changing index to date
nytimes_df = nytimes_df.set_index(['date'])     
john_hopkins_df = john_hopkins_df.set_index(['date'])

#dropping all columns on john hopkins except recovered 
john_hopkins_df = john_hopkins_df[['recovered']]

#Joining dataframes
df = nytimes_df.join(john_hopkins_df)

Я взял приведенный выше код и создал из него новый файл под названием datadownload.py Анкет Я создал init.py Файл, чтобы сделать DataDownload в функцию, которую я могу позвонить в свой основной app.py файл.

Первоначально я использовал DynamoDB для загрузки моих преобразованных данных. Но в дальнейшем, когда я хотел использовать QuickSight для приготовления к черту, я увидел несколько ошибок из-за несовместимости. Я быстро переключился на RDS-Postgresql. Именно здесь я очень узнал, насколько много благословения облачной информации. Мне просто пришлось переключить несколько линий, и я закончил.

  PostgreSQL:
    Type: AWS::RDS::DBInstance
    Properties: 
      DBName : CovidDB
      Engine: postgres
      AllocatedStorage: 50
      DBInstanceClass: db.t2.micro

Для загрузки данных я использовал SQLalchemy для создания SQL-двигателя для Pandas и Psycopg2 для загрузки в Postgres.

engine = create_engine(F"postgresql://{db_param['user']}:{db_param['password']}@{db_param['hostname']}:{db_param['port']}/{db_param['dbname']}")

Этот шаг также стал простым из -за облачной информации. Cloudformation действительно делает вещи простыми. Все, что мне нужно было сделать, это добавить несколько строк в шаблон.

      EventInvokeConfig:
        DestinationConfig:
          OnSuccess:
            Type: SNS
            TopicArn: !Ref CovidDataUpdateSuccess
          OnFailure:
            Type: SNS
            TopicArn: !Ref CovidDataUpdateFailure

Для обработки ошибок я создал кучу Try/кроме правил. За исключением того, что у меня был каждый из шагов, возвращал код ошибки. Наконец во время лямбда -обработчика я добавил

  if error != None:
        return {
        "statusCode": 301,
        "body": json.dumps({
            "message": error,
        }),
    }

Я создал несколько модульных файлов для проверки обработки ошибок. Я проверил ошибки при создании DataFrame, а также загрузке. Я также проверил, чтобы увидеть, добавляются ли данные вместо воссоздания таблиц снова.

Я преобразовал свою инфраструктуру в код с помощью файла CloudFormation YAML. Я перечислил все в Шаблон.yaml файл.

Все мои файлы проекта на моем GitHub-Rad Huda

Я подключил свою базу данных к QuickSight.

Я столкнулся с несколькими проблемами во время этого проекта. Но 2 из них застряли из -за того, как долго я потратил на попытку решить эти проблемы. Проблема 1: DynamoDB и QuickSight Integration были проблемой. Решение 1: Чтобы решить это, я перешел на PostgreSQL, что было намного проще.

Проблема 2: Я использовал SAM CLI через терминал, но я хотел интегрировать его с VSCODE. Моя ошибка не была тем, чем я мог даже поиск в Google. По какой -то причине, независимо от того, что я делал, VSCode не сможет найти Сэма Кли. Поэтому мне пришлось вручную делать большую часть вещей Sam Cli через терминал. В конце концов я понял проблему. Поскольку я использовал VSCODE через SSH в своем рабочем столе, Sam Cli будет работать только с самого настольного компьютера. Это может быть ошибка VSCODE.

Я фармацевт, пытающийся изучить облачные инструменты, чтобы стать архитектором решения для здравоохранения. С помощью операции Warpspeed изменила лицо здравоохранения сегодня, я вижу, как завтра завтра в мире превращается в гораздо более облачный мир для здравоохранения. Там так много здравоохранения может развиться, как только он начнет интегрироваться в облако.

Я очень благодарен Форресту за то, что инициировал такую удивительную идею. Этот проект был очень полезным.

Оригинал: “https://dev.to/radhuda/event-driven-python-on-aws-1e41”