AWS Lambda — это сервис от Amazon Web Services (AWS), который позволяет запускать ваш код в ответ на события без управления серверами. Это простой и масштабируемый способ создания приложений.

В этом руководстве я покажу вам, как использовать AWS Lambda с тремя другими сервисами:

  • Amazon S3 для хранения файлов, изображений и видео

  • Amazon Simple Notification Service (SNS) для отправки уведомлений

  • Amazon EventBridge для планирования сообщений

Мы пройдем через все шаг за шагом.

К концу, с интеграцией других сервисов, вы создадите приложение Goal Manifestation Quote, которое будет отправлять случайные вдохновляющие сообщения, чтобы поддерживать вашу мотивацию и сосредоточенность на ваших целях.

Предварительные требования

  • Аккаунт AWS: Если у вас его нет, зарегистрируйтесь здесь.

  • Репозиторий GitHub: Это для хранения вашего исходного кода. Если у вас нет аккаунта GitHub, вы можете создать его здесь.

  • Интегрированная среда разработки (IDE), такая как Visual Studio Code или Sublime Text.

  • Базовые знания веб-разработки и любого языка программирования на ваш выбор. Я использовал Python для этого руководства.

  • Zenquote Random API

Что вы узнаете

  • Как создать ведро Amazon S3

  • Как использовать Amazon Simple Notification Service (SNS)

  • Как использовать Amazon Lambda

  • Как использовать Amazon EventBridge

Содержание

  1. Шаг 1: Настройка среды разработки

  2. Шаг 2: Создание службы хранения данных Amazon Simple Storage Service (S3)

  3. Шаг 3: Создание службы уведомлений Amazon Simple Notification Service (SNS)

  4. Шаг 4: Создание политики IAM

  5. Шаг 5: Создание функции Amazon Lambda

  6. Шаг 6: Создайте EventBridge

  7. Шаг 7. Загрузите ваш код

  8. Заключение

Шаг 1: Настройте вашу среду разработки

На этом этапе вы все настроите. Начните с входа в свою учетную запись AWS, затем установите Python, если он отсутствует в вашей IDE.

Шаг 2: Создайте Amazon Simple Storage Service (S3)

Перед тем как начать создание S3 корзины, давайте сначала поймем, что такое Amazon S3:

Amazon S3 (Simple Storage Service) — это сервис от Amazon, который позволяет вам хранить и получать доступ к любому объему или типу данных, таким как фотографии, видео, документы и резервные копии, когда бы вам это ни понадобилось.

Теперь, когда вы знаете основы того, что такое Amazon S3, давайте вернемся к учебнику.

Создайте S3 корзину

Существует несколько способов создать бакет S3, но для этого учебного пособия мы воспользуемся командной строкой Ubuntu (CMD), вашим терминалом или Amazon CloudShell, в зависимости от того, с чем вам удобнее работать.

  • Введите boto3 s3 в строку поиска веб-браузера, чтобы просмотреть список связанной документации.

  • Щелкните на первом результате.

  • Как только документация откроется, скопируйте первую команду, которую увидите.

  • Вставьте ее в свой CMD ИЛИ терминал по своему выбору – но прежде чем это сделать, не забудьте “cd” в правильный каталог.

  • В документации прокрутите вниз и щелкните “create_bucket.

  • Как только это откроется, прокрутите вниз до “Request Syntax.” Скопируйте имя бакета и конфигурацию бакета.

  • Другие переменные, указанные в синтаксисе запроса, являются необязательными.

  • Как только это будет сделано, убедитесь, что вы сохранили.

  • Вернитесь и вызовите сценарий:
#python3 имя вашего файла
  • Запуск сценария автоматически создает бакет S3 в вашем Amazon S3.

  • Теперь вы можете перейти в консоль, чтобы проверить, был ли он создан:

Загрузить файлы

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

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

Нажмите на кнопку “Загрузить”, чтобы загрузить файл. Помните, мы создаем приложение для цитат по достижению целей.

Теперь, когда мы настроили ведро для хранения:

  • Откройте инструмент, такой как Google Диск, MS Word, WPS или любой другой редактор документов.

  • Запишите цели, которые вы хотите достичь.

  • Сохраните файл в формате PDF или DOCX.

  • Возьмите документ и загрузите его в Amazon S3.

Для проверки правильности файла:

  • Перейдите на вкладку Разрешения.

  • Прокрутите вниз до Блокировка общего доступа.

  • Нажмите на Изменить и снимите флажок.

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

  • На той же странице настроек ведра измените политику.

  • Прокрутите вниз, и вы увидите, что политика ведра была сгенерирована автоматически.

  • Продолжайте и скопируйте политику.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ]
}
  • Вернитесь в редактор политики ведра и вставьте политику.

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

Вернитесь на вкладку Объекты и кликните на предоставленную ниже ссылку на объект:

С этим URL ваша загрузка теперь видна.

Шаг 3: Создание службы уведомлений Amazon Simple Notification Service (SNS)

SNS – это полностью управляемая служба передачи сообщений, предоставляемая AWS. Она обеспечивает связь между приложениями или непосредственно с пользователями путем отправки уведомлений.

Для создания SNS выполните следующие шаги:

1. Войдите в консоль управления AWS

Затем перейдите в Amazon SNS. Перейдите на панель управления SNS и выберите Темы в левом меню.

Для создания темы:

  • Кликните Создать тему.

  • Выберите Тип темы: Стандартный (по умолчанию) или FIFO (для упорядоченных сообщений).

  • Введите имя для вашей темы. (например, MyFirstSNSTopic).

  • Настройте дополнительные параметры, такие как шифрование, политики повторной доставки или теги.

  • Нажмите Создать тему.

2. Добавьте подписки:

После создания темы нажмите на неё, чтобы открыть страницу с подробностями. Выберите вкладку Подписки.

Нажмите Создать подписку и выберите:

  • Протокол может быть Email, SMS, HTTP/S, Lambda или SQS.

  • Конечные точки, такие как адрес электронной почты, номер телефона или URL.

Нажмите Создать подписку.

3. Подтвердите подписку:

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

Теперь, когда мы это сделали, давайте создадим функцию Amazon Lambda, которая будет запускать SNS, чтобы сообщение было отправлено на вашу почту.

Шаг 4: Создание политики IAM

Эта политика создана для авторизации Amazon Lambda на запуск события и обеспечения автоматического запуска CloudWatch для мониторинга событий приложения.

Чтобы создать политику, выполните следующие шаги:

1. Войдите в консоль управления AWS.

В левом меню выберите Политики. Затем:

  • Нажмите Создать политику.

  • Выберите вкладку Визуальный, затем выберите службу SNS.

  • Затем нажмите вкладку Выбрать для создания пользовательской политики.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sns:Publish",
            "Resource": "arn:aws:sns:REGION:ACCOUNT_ID:goal_topic"
        }
    ]
}

Затем замените следующие заполнители своей информацией:

  • region: Ваш регион AWS (например, us-east-1).

  • account-id: Ваш идентификатор учетной записи AWS.

  • topic-name: Ваше имя темы SNS.

2. Просмотр и создание политики:

Вы можете сделать это, следуя этим шагам:

  • Нажмите кнопку “Просмотр”.

  • Дайте своей политике Имя (например, LambdaSNSPolicy) и, по желанию, Описание.

  • Нажмите Создать политику.

3. Присоедините политику к Роли выполнения Lambda

Теперь вам нужно присоединить политику к вашей Роли выполнения Lambda. Для этого выполните следующие шаги:

  • Перейдите в раздел Роли в консоли IAM.

  • Найдите и выберите роль выполнения.

  • Затем найдите созданную вами политику и выберите ее.

  • Нажмите Присоединить политику.

Обе политики будут автоматически присоединены.

Шаг 5: Создайте функцию Amazon Lambda

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

Следуйте этим шагам для создания функции Amazon Lambda:

1. Войдите в консоль управления AWS:

Перейдите в AWS Lambda.

2. Создайте функцию:

Нажмите на Создать функцию и выберите опцию Создать функцию с нуля.

Заполните детали:

  • Имя функции: Введите уникальное имя (например, SNSLambdaFunction).

  • Версия: Выберите версию (например, Python, Node.js, Java и т. д.).

  • Роль: Выберите или создайте роль. Если у вас уже есть роль, выберите Использовать существующую роль. В противном случае выберите Создать новую роль с базовыми разрешениями Lambda.

  • Нажмите кнопку Создать функцию.

3. Вставьте код:

На странице функции Lambda перейдите на вкладку Конфигурация:

Помните, что мы пытаемся извлечь котировку. Я добавлю ARN темы, которую мы создали здесь, и включу свои API-ключи. Но для этого учебного пособия я буду использовать API напрямую для извлечения данных.

4. Напишите код Лямбда:

Перейдите на вкладку Code в вашей функции Лямбда. Затем напишите или вставьте код из вашей IDE для обработки входящих сообщений SNS.

Пример:

Вот код:

import os
import json
import urllib.request
import boto3

def fetch_random_quote():
    """
    Fetches a random quote from the ZenQuotes API.
    """
    api_url = "https://zenquotes.io/api/random"
    try:
        with urllib.request.urlopen(api_url) as response:
            data = json.loads(response.read().decode())
            if data and isinstance(data, list):
                # Форматирование цитаты и автора
                quote = data[0].get("q", "No quote available")
                author = data[0].get("a", "Unknown author")
                return f'"{quote}" - {author}'
            else:
                return "No quote available."
    except Exception as e:
        print(f"Error fetching random quote: {e}")
        return "Failed to fetch quote."

def lambda_handler(event, context):
    """
    AWS Lambda handler function to fetch a random quote and publish it to an SNS topic.
    """
    # Получение ARN темы SNS из переменных среды
    sns_topic_arn = os.getenv("SNS_TOPIC_ARN")
    sns_client = boto3.client("sns")

    # Получение случайной цитаты
    quote = fetch_random_quote()
    print(f"Fetched Quote: {quote}")

    # Публикация цитаты в SNS
    try:
        sns_client.publish(
            TopicArn=sns_topic_arn,
            Message=quote,
            Subject="Daily Random Quote to help you stay motivated and inspired to achieve your goals",
        )
        print("Quote published to SNS successfully.")
    except Exception as e:
        print(f"Error publishing to SNS: {e}")
        return {"statusCode": 500, "body": "Error publishing to SNS"}

    return {"statusCode": 200, "body": "Quote sent to SNS"}

5. Сохраните:

Нажмите кнопку развертывания для сохранения.

6. Протестируйте вашу функцию Лямбда:

Перейдите на вкладку Test и создайте новое тестовое событие.

Затем сохраните и запустите тест. Если успешно, будет отправлено сообщение:

Это означает, что сообщение было создано для вас.

Наконец, проверьте свою электронную почту или SMS, в зависимости от точки назначения, которую вы использовали для этого руководства. В моем случае, я использовал электронную почту.

Шаг 6: Создайте EventBridge

Amazon EventBridge – это сервис, который помогает вам соединять приложения и службы AWS, такие как Amazon SNS и Amazon Lambda.

Чтобы создать правило Amazon EventBridge, выполните следующие шаги:

1. Перейдите в EventBridge:

В строке поиска введите EventBridge и выберите его из списка служб.

2. Создайте правило:

В консоли EventBridge нажмите Rules на левой панели. Затем нажмите кнопку Create rule.

3. Настройка деталей правила:

  • Название: Введите уникальное название для вашего правила.

  • Описание (необязательно): Добавьте описание, чтобы объяснить, что делает это правило.

4. Выбор шины событий:

Выберите Default event bus (или другую шину событий, если вы создали её).

5. Определение шаблона события или расписания:

Для шаблона события:

  • Выберите AWS Service в качестве источника событий.

  • Выберите конкретный тип события (например, загрузку файла S3 или изменение состояния экземпляра EC2).

Для расписания:

  • Выберите опцию Schedule, чтобы запускать правило с фиксированным интервалом (например, каждые 5 минут).

  • Нажмите “Продолжить”. Это перенесет вас на страницу с конкретными деталями, где:

  • Прокрутите вниз и нажмите на планировщик cron. Планировщик cron указывает время отправки сообщения.

  • Выберите “Выкл” для гибкого временного окна.

  • Проверьте детали правила, чтобы убедиться, что все верно.

  • Нажмите кнопку “Далее”, чтобы перейти на страницу Цель.

    На изображении выше показано время отправки сообщений.

    • На странице Цель выберите AWS Lambda, чтобы вызвать вашу функцию.

  • Прокрутите вниз, чтобы вызвать и выбрать созданную вами функцию.

  • Нажмите кнопку “Далее”, чтобы продолжить. Это перенесет вас на страницу настроек. В разделе разрешений выберите “Использовать существующее правило.”

  • Наконец, перейдите к обзору и созданию расписания:

  • На следующей странице отображаются все детали:

Использование EventBrige создает планировщик для пользователей.

Шаг 7: Загрузите свой код

Наконец, загрузите свой код на GitHub и включите правильную документацию, чтобы помочь объяснить, как работает код.

Ознакомьтесь с этой документацией, если не знаете, как это сделать: Загрузка проекта на GitHub.

Заключение

Если вы следовали всем этим шагам, вы создали приложение для цитат о достижении целей с использованием AWS Lambda, Amazon S3, Amazon SNS и Amazon EventBridge. Это приложение извлекает мотивационные цитаты и отправляет их подписчикам по расписанию.

Вы можете найти ссылку на репозиторий здесь.

Не стесняйтесь делиться своими успехами или задавать вопросы, если у вас возникли проблемы.

Если вы нашли эту статью полезной, поделитесь ею с другими.

Следите за моими проектами, подписавшись на меня в Twitter, LinkedIn и GitHub

Спасибо за чтение 💖.

Отказ от ответственности:
Ресурсы, показанные в этой статье, включая ведро S3 и его ARN, были удалены и больше не существуют. Подробности, видимые на скриншотах, используются исключительно в демонстрационных целях.