www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Как я бесплатно установил Email Reminder для моей подруги с AWS Lambda

Дата публикации Oct 3, 2019

Создайте собственное напоминание по электронной почте с помощью AWS Lambda & Gmail за 5 простых шагов с помощью Python!

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

Моя девушка практикует вегетарианскую диету каждый первый (初一) и пятнадцатый день (十五) лунного месяца в китайском лунном календаре. Нелегко следить за лунным календарем, если вы не всегда это знаете.

Итак, я подумал о развертывании автоматического напоминания, которое посылает ей напоминание в 12 часов утра каждый первый и пятнадцатый день лунного календаря, а также накануне.

AWS Lambda [Источник]

Так как у нас есть 1 000 000 бесплатных запросов AWS Lambda от AWS каждый месяц, это бесплатно, почему бы и нет! Вы можете прочитать больше оБесплатный уровеньВот.

В этой статье я расскажу о том, как собрать все вместе с AWS Lambda, AWS CloudWatch Events и Gmail в 5 шагов.

обзор

Сначала мы начнем с настройки вашей учетной записи Gmail, чтобы иметь возможность программно отправлять электронные письма с помощью Python.

Сегодня мы сосредоточимся на создании лямбда-функции AWS для напоминания по электронной почте и свяжем ее с лямбда-триггером, в данном случае CloudWatch Events. Далее мы определим правило события CloudWatch с помощьюхронзапланировать ежедневное выполнение напоминания по электронной почте.

Наконец, мы закончим с внедрением напоминания по электронной почте. Я поделюсь полной реализацией, а также. С этого момента вы сможете создавать собственные напоминания!

Шаг 1:Готовим ваши учетные данные

Перво-наперво, в зависимости от настроек безопасности, если у вас не включена двухфакторная аутентификация (2FA) для вашей учетной записи Google (что настоятельно рекомендуется), вы можете обратиться кразрешить менее защищенным приложениям доступ к вашей учетной записи, Если вы защитили свой аккаунт с помощью 2FA (хорошо!), Вам необходимосоздать пароль приложениядля этого урока.

Нам понадобится это на следующем шаге!


Шаг 2: Давайте попробуем отправить электронное письмо!

Мы будем использовать популярныйsmtplibБиблиотека Python как наш почтовый клиент для отправки писем, сам пакет должен быть встроен в ваш интерпретатор Python. Вам не нужно будет устанавливать его отдельно.

Вы можете скопировать следующий пример кода, изменитьgmail_user,gmail_app_password, а такжеsent_toпеременные перед выполнением скрипта.

Примечание: дляgmail_app_password, это пароль приложения, который вы сгенерировали на шаге 1, если у вас включен 2FA. Иначе, это будет ваш пароль Gmail.

import smtplibgmail_user = YOUR_GMAIL_ACCOUNT_HERE
gmail_app_password = YOUR_GMAIL_PASSWORD_OR_APP_PASSWORDsent_from = gmail_user
sent_to = ['[email protected]', '[email protected]']
sent_subject = 'Test'
sent_body = 'This is a test'
email_text = """\
From: %s
To: %s
Subject: %s%s
""" % (sent_from, ", ".join(sent_to), sent_subject, sent_body)try:
server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.ehlo()
server.login(gmail_user, gmail_app_password)
server.sendmail(sent_from, sent_to, email_text.encode("utf-8"))
server.close()
print(email_text)
print('Email sent!')
except Exception as exception:
print("Error: %s!\n\n" % exception)

Выполните скрипт, и вы получите электронное письмо в свой почтовый ящик. Если у вас есть проблемы с ним, вы можете обратиться к этомупосле, Позже на шаге 5 мы сделаем некоторые изменения, чтобы предотвратить сохранение пароля нашего приложения в виде обычного текста в коде.


Шаг 3. Создание лямбда-функции в AWS

После того как отправитель электронной почты заработал, пришло время настроить его на Amazon Web Services. Мы начнем с создания лямбда-функции в AWS Lambda.

Что такое AWS Lambda? AWS Lambda позволяет запускать код без подготовки и управления серверами. Лямбда-функция относится к коду, который должен быть выполнен при запуске.

Создание лямбда-функции

Как только вы создадите свою функцию Lambda, вы увидитеlambda_function.pyинициализируется сlambda_handlerкак показано ниже.

import jsondef lambda_handler(event, context):
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}

lambda_handlerфункция будет вызываться всякий раз, когда запускается лямбда-функция. Действует аналогичноmainфункция в программе Python. Следовательно, вся ваша основная логика программы и вызовы функций должны выполняться здесь.


Шаг 4: Свяжите свою лямбда-функцию с лямбда-триггером

Теперь у вас есть готовая функция Lambda, теперь нам нужно связать ее с правилом события CloudWatch как триггер Lambda.

Для моего случая использования мне нужно, чтобы моя функция Lambda выполнялась каждую полночь, поэтому я буду определятьхронвыражение, которое планирует мою лямбда-функцию для выполнения соответствующим образом

Создание правила события CloudWatch, а затем определениехронвыражение, и связывая его с лямбда-функцией.

Выражение cron - это команда для операционной системы или сервера для задания, которое должно быть выполнено в указанное время.

Стоит отметить, что время сервера основано на GMT. Следовательно, вам может понадобиться сделать простую математику, чтобы отразить ваш часовой пояс. Поскольку я хочу, чтобы моя лямбда-функция выполнялась каждый день в 12.01 (GMT +8), мое выражение будет похоже на cron (01 16 * *? *).

Вот как должен выглядеть формат выражения cron:

хрон (MinutesHoursDay-of-monthMonthDay-of-weekYear)

В качестве ссылки вы можете обратиться к AWSруководствона выражениях cron.

Вы можете поэкспериментировать с выражением cron, и вы сможете увидеть предварительный просмотр даты триггера при создании правила. Не забывайте, установитецельправила, которое вы создали для лямбда-функции, созданной на шаге 3,Test,


Шаг 5: Завершение с помощью функции Lambda!

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

Подсказка: Используйте минимальный импорт, если это возможно, чтобы избежать трудностей с перемещением зависимостей с помощью дополнительных слоев Lambda!

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

Как работает код?

Это начнется сlambda_handlerс последующим вызовомlunar_checkфункция для выполнения преобразования лунного календаря. Если это 1-й (初一) или 15-й (十五) день, а также день до 1-го и 15-го лунного календаря,send_emailФункция будет вызвана для отправки напоминания по электронной почте.

Обратите внимание, что в приведенном выше исходном коде у меня есть несколько другое утверждение дляgmail_app_passwordкоторый ниже:

gmail_app_password = os.environ['MAIL_PASS']

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

Установка переменных среды MAIL_PASS для функции Lambda

После того, как все сделано, сохраните свою функцию, и вы сможете проверить ее! (Если ваша функция зависит от времени, вы должны жестко указать время при тестировании, чтобы убедиться, что она будет отправлять электронные письма в обычном режиме;))

Напоминание хорошо идти!


Вывод

В этой статье я показал шаги по настройке наших учетных записей Gmail, чтобы можно было отправлять электронные письма программно с помощью Python.smtplibСоздание функции Lambda в AWS, настройка правила события AWS CloudWatch с помощью выражения cron, связывающего его с нашей функцией Lambda, для соответствующего запуска, поделился своей реализацией для напоминания моего письма по лунному календарю, а также поделился способами защиты ваших учетных данных с помощью переменных среды. ,

Лунный календарь, который я показал выше, является просто примером того, как AWS Lambda вместе с AWS CloudWatch могут быть настолько полезны при планировании периодических задач, особенно для создания напоминаний.

Вы можете легко разработать свой собственный Email Reminder с вашей собственной реализацией и вариантом использования, вам понадобится толькоsend_emailиз этого примера, а такжеlambda_handlerначать с.

Если у вас есть какие-либо вопросы, напишите мне в комментариях ниже! Буду рад помочь!

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map