Ну, наткнулся на ответ, пока искал что-то еще совсем не связанное с этим.
Ответ в точности совпадает с тем, что предложил @jarmod, мой ответ - простой указатель на существующий пример облачной информации, реализованный AWS.
Цитата из приведенной ниже ссылки, чтобы не помещать здесь просто ссылку,
При использовании этого шаблона только одна корзина должна содержать заранее zip-файл Lambda, и для поддержки недавно запущенных регионов не требуется никаких дополнительных действий. Благодаря своей гибкости это предпочтительный подход для большинства случаев использования. Однако для этого требуется большинство дополнительных ресурсов в шаблоне: встроенная функция Lambda с кодом для копирования zip-архивов, связанная роль управления идентификацией и доступом (IAM), корзина Amazon S3 и настраиваемый ресурс.
Следующий фрагмент кода создает новую корзину Amazon S3 в области стека AWS CloudFormation (LambdaZipsBucket), а затем копирует zip-файлы (CopyZips.Properties.Objects) из исходной корзины (CopyZips.Properties.SourceBucket) в новую корзину.
Resources:
LambdaZipsBucket:
Type: AWS::S3::Bucket
CopyZips:
Type: Custom::CopyZips
Properties:
ServiceToken: !GetAtt 'CopyZipsFunction.Arn'
DestBucket: !Ref 'LambdaZipsBucket'
SourceBucket: !Ref 'QSS3BucketName'
Prefix: !Ref 'QSS3KeyPrefix'
Objects:
- functions/packages/MyFunction/lambda.zip
Обратите внимание, что Objects принимает список путей, поэтому, если у вас есть несколько функций Lambda в вашем шаблоне, все zip-архивы могут быть добавлены в один ресурс CopyZips.
Теперь объявим нашу лямбда-функцию и укажем ей на только что созданную корзину.
При создании функции мы указываем MyFunction.Properties.Code.S3Bucket на LambdaZipsBucket.
MyFunction:
DependsOn: CopyZips
Type: AWS::Lambda::Function
Properties:
Code:
S3Bucket: !Ref 'LambdaZipsBucket'
S3Key: !Sub '${QSS3KeyPrefix}functions/packages/MyFunction/lambda.zip'
...
Обратите внимание на клавишу DependsOn, указывающую на наш настраиваемый ресурс CopyZips. По умолчанию AWS CloudFormation будет пытаться запускать ресурсы, которые не зависят друг от друга, параллельно, поэтому это необходимо, чтобы быть уверенным, что zip-архивы уже были скопированы до создания нашей функции Lambda.
Чтобы реализовать это в вашем собственном шаблоне, вам также понадобится развернутый код CopyZips Lambda и соответствующая роль IAM. Полный пример реализации доступен в AWS Quick Запустить репозиторий примеров.
https://aws.amazon.com/blogs/infrastructure-and-automation/deploying-aws-lambda-functions-using-aws-cloudformation-the-portable-way/
person
Jimson Kannanthara James
schedule
12.05.2020