Мне нужно сохранить некоторые файлы для моего шаблона CF (схема GraphQL, источник Lambda и т. Д.) В ведре S3, которое также (надеюсь) будет определено в том же шаблоне, поскольку это, по-видимому, единственный способ помимо непосредственного удаления содержимого в шаблон, чтобы сделать это. Я также пытаюсь заранее подумать о CI / CD, и было бы неплохо, чтобы эти файлы были зарегистрированы, а инструмент CI / CD перемещал их соответствующим образом.
Есть ли способ скопировать файлы на S3 из шаблона? Как большинство людей делают это с CI / CD?
Боюсь, что невозможно загрузить в корзину, созданную на основе того же шаблона. Однако, если сегмент уже существует, скажем, для всего аккаунта deployment
ведро или один из cf-templates-...
ведра, у вас есть несколько вариантов.
Загрузите вспомогательные файлы, используя Ansible playbook и в той же книге создания / обновления стека CloudFormation. Это очень популярный метод для конвейеров CI / CD. В вашем сборнике Ansible у вас будет что-то вроде этого:
tasks:
- name: "Upload files to s3://{{deployment_bucket}}/lambda/"
s3_sync:
bucket: "{{deployment_bucket}}"
file_root: lambda/
prefix: lambda/
permission: private
- name: "Create CloudFormation Stack"
cloudformation:
stack_name: "some-stack-name"
state: present
template: template.yml
template_parameters:
DeploymentS3Path: "s3://{{deployment_bucket}}/lambda/"
Позволять aws cloudformation package
заархивируйте и загрузите файлы на S3, а затем aws cloudformation deploy
создать и выполнить набор изменений CloudFormation. Опять же, довольно популярный метод, хорошо работающий с CI / CD.
Затем в шаблоне CloudFormation вы можете ссылаться на локальные файлы следующим образом:
MyLambda:
Type: AWS::Lambda::Function
Properties:
Code: lambda/
И когда aws cloudformation package
запущен, он выведет измененный шаблон с расширенным путем кода:
MyLambda:
Properties:
Code:
S3Bucket: cf-templates-1a2b3c4d5e6f-ap-southeast-2
S3Key: e24e45d4f5f2ab3c5d437659fa2246a7
Ты тогда aws cloudformation deploy
этот расширенный шаблон. Или воспользуйтесь другим способом развертывания - шаблон готов к использованию.
Красота этого package
/ deploy
Метод заключается в том, что он обрабатывает загрузку локальных файлов в S3 за вас.
В разных проектах мы используем оба метода в разных конвейерах CI / CD, и оба отлично работают.
Надеюсь, это поможет :)
Некоторые инструменты AWS, такие как λ #, могут создавать повторно развертываемые шаблоны CloudFormation с активами. Взгляните на этот пример: https://github.com/LambdaSharp/StaticWebsite-Sample
Другая альтернатива - использовать cfpack инструмент. Он позволяет вам определять, какие артефакты необходимо загрузить в корзину S3. Взгляните на Артефакты раздел для получения более подробной информации, в нем объясняется, как работать со схемой и преобразователями Graphql.
В дополнение к этому cfpack позволяет вам разделить большой шаблон CloudFormation на файлы меньшего размера. Это особенно полезно, когда у вас есть огромный шаблон CloudFormation. Итак, попробуйте.