Создайте свои ведра

Недавно я столкнулся со сценарием, когда хотел внести изменения в кучу входящих файлов S3. Лучший способ сделать это — использовать триггеры событий, которые запускают функцию AWS Lambda каждый раз, когда новый файл загружается в S3. Хотя процесс создания корзин S3, уведомлений о событиях и функций Lambda довольно прост при использовании консоли, он может стать немного сложным при использовании Terraform.

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

Ковши S3:

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

лямбда

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

terraform
│   buckets.tf
│   lambda.tf 
│   notifications.tf
│   permissions.tf
│   ...
└───src
│   │   conversion_lambda_python_file.py
│   │   
│   │

Имя файла, которое вы здесь даете своему файлу Python, позже будет использоваться в качестве значения обработчика для установки Lambda Terraform. Ваша лямбда-функция должна иметь функцию с именем lambda_handler. Это может выглядеть примерно так:.

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

Модуль archive_file создает архив файла Python, который затем можно использовать в нашей функции Lambda. Вы также можете передавать переменные среды в свою лямбда-функцию.

Следует отметить, что по умолчанию Lambda имеет тайм-аут в три секунды и память всего 128 МБ. В зависимости от того, сколько файлов S3 вы хотите обработать, вы можете изменить эти параметры на их максимальные значения:

Размер памяти = 10240

Время ожидания = 900

Уведомление о событии S3

Теперь нам нужно создать уведомление о событии, которое будет запускать функцию Lambda всякий раз, когда новый файл загружается в S3. Вы можете изменить параметр событий, например, если вы также хотите запускать свою лямбда-функцию при удалении или восстановлении файла.

Если вы хотите учитывать только определенную папку в корзине S3, вы можете добавить имя (имена) папки в качестве префикса фильтра. Точно так же, если вы хотите учитывать только определенные типы файлов, которые могут вызвать триггер, вы можете добавить расширение файла в качестве параметра суффикса фильтра.

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

Политики разрешений

Какую бы роль вы ни использовали для настройки Terraform, также потребуются другие политики разрешений, такие как доступ к S3 или журналы Cloudwatch для отладки.

Если вы хотите предоставить вашей роли права на определенные действия только для определенного сегмента, а не для всех, вы также можете указать соответствующие ресурсы в разделе «Ресурс».

и это в основном об этом!

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