Если вы управляете своим развертыванием с помощью простого CloudFormation и интерфейса командной строки aws
, вы можете справиться с этим относительно легко, используя aws cloudformation package
для создания упакованного шаблона для развертывания.
aws cloudformation package
принимает шаблон, в котором определенные свойства могут быть записаны с использованием локальных путей, архивирует содержимое из локальной файловой системы, загружает в указанную корзину S3, а затем выводит новый шаблон с этими свойствами, переписанными так, чтобы они ссылались на местоположение на S3, а не на локальная файловая система. В вашем случае он может переписать Code
свойства для AWS::Lambda::Function
, которые указывают на локальные каталоги, но см. aws cloudformation package help
для полного списка поддерживаемых свойств. Вам нужно заранее настроить корзину S3 для хранения ваших ресурсов, но вы можете повторно использовать одну и ту же корзину в нескольких проектах CloudFormation.
Итак, допустим, у вас есть input.yaml
с чем-то вроде:
MyLambdaFunction:
Type: AWS::Lambda::Function
Properties:
Code: my-function-directory
Вы можете упаковать это с чем-то вроде:
aws cloudformation package \
--template-file input.yaml \
--s3-bucket my-packaging-bucket \
--s3-prefix my-project/ \
--output-template-file output.yaml
Что приведет к output.yaml
с чем-то вроде этого:
MyLambdaFunction:
Properties:
Code:
S3Bucket: my-packaging-bucket
S3Key: my-project/0123456789abcdef0123456789abcdef
Type: AWS::Lambda::Function
Затем вы можете использовать output.yaml
с aws cloudformation deploy
(или любой другой командой aws cloudformation
, принимающей шаблон).
Чтобы по-настоящему выполнить развертывание с помощью одной команды и убедиться, что вы всегда выполняете развертывание последовательно, вы можете объединить эти две команды в сценарий, Makefile
или что-то подобное.
person
Dave Shifflett
schedule
12.12.2020