С момента получения сертификата практикующего облака в начале сентября я действительно хотел углубиться в проект, чтобы укрепить мое понимание облачных продуктов 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”