Я использую AWS CDK (с Python) для контейнерного приложения, которое работает на Fargate. Я хотел бы запустить cdk deploy
в CI-процессе GitLab и передать тег git в качестве переменной среды, которая заменяет контейнер, запущенный в Fargate. В настоящее время я делаю нечто подобное с CloudFormation (aws cloudformation update-stack ...
). Кто-нибудь еще делает CI / CD с AWS CDK таким образом? Есть ли лучший способ сделать это?
Кроме того, что я должен использовать для своего базового изображения для этой работы? Я думал, что могу либо начать с контейнера python и установить узел, либо наоборот. Или, может быть, где-то есть готовый контейнер, который я пока не смог найти.
Вот запуск, который, кажется, работает хорошо:
CDK:
image: python:3.8
stage: deploy
before_script:
- apt-get -qq update && apt-get -y install nodejs npm
- node -v
- npm i -g aws-cdk
- cd awscdk
- pip3 install -r requirements.txt
script:
- cdk diff
- cdk deploy --require-approval never
Редактировать 2020-05-04:
CDK может создавать docker изображений во время cdk deploy
, но ему нужен доступ к docker. Если вам не нужен docker, вышеприведенное определение задания CI должно подойти. Вот текущее задание CI, которое я использую:
cdk deploy:
image: docker:19.03.1
services:
- docker:19.03.5-dind
stage: deploy
only:
- master
before_script:
- apk add --no-cache python3
- python3 -V
- pip3 -V
- apk add nodejs-current npm
- node -v
- npm i -g aws-cdk
- cd awscdk
- pip3 install -r requirements.txt
script:
- cdk bootstrap aws://$AWS_ACCOUNT_ID/$AWS_DEFAULT_REGION
- cdk deploy --require-approval never
cdk bootstrap
необходимо, потому что я использую ресурсы в своем коде cdk:
self.backend_task.add_container(
"DjangoBackend",
image=ecs.AssetImage(
"../backend",
file="scripts/prod/Dockerfile",
target="production",
),
logging=ecs.LogDrivers.aws_logs(stream_prefix="Backend"),
environment=environment_variables,
command=["/start_prod.sh"],
)
Вот дополнительная информация о cdk bootstrap
: https://github.com/aws/aws-cdk/blob/master/design/cdk-bootstrap.md