Estoy usando AWS CDK (con Python) para una aplicación en contenedores que se ejecuta en Fargate. Me gustaría ejecutar cdk deploy en un proceso GitLab CI y pasar la etiqueta git como una variable de entorno que reemplaza el contenedor que se ejecuta en Fargate. Actualmente estoy haciendo algo similar con CloudFormation ( aws cloudformation update-stack ... ). ¿Alguien más está haciendo CI/CD con AWS CDK de esta manera? Hay una mejor manera de hacerlo?
Además, ¿qué debo usar para mi imagen base para este trabajo? Estaba pensando que puedo comenzar con un contenedor de python e instalar el nodo o viceversa. O tal vez hay un contenedor preconstruido en algún lugar que aún no he podido encontrar.
Aquí está el inicio que parece estar funcionando bien:
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 neverEditar 2020-05-04:
CDK puede crear imágenes acoplables durante cdk deploy , pero necesita acceso a la ventana acoplable. Si no necesita la ventana acoplable, la definición de trabajo de CI anterior debería estar bien. Aquí está el trabajo de CI actual que estoy usando:
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 Se necesita el cdk bootstrap porque estoy usando activos en mi código de 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"], ) Aquí hay más información sobre el arranque de cdk bootstrap : https://github.com/aws/aws-cdk/blob/master/design/cdk-bootstrap.md
definitivamente tiene que usar la implementación de CDK dentro de la canalización de CI/CD si tiene activos lambda o ECS; de lo contrario, podría ejecutar el sintetizador de CDK y pasar la formación de la nube resultante a AWS Code Deploy. Eso significa que una gran parte de su CI/CD se gastará en la implementación, lo que podría agotar sus minutos de compilación de nivel gratuito o simplemente significa que pagará más (AWS Code Deploy es gratuito)
Hago algo similar con Golang en CircleCi. Uso la imagen base de Go e instalo nodejs y cdk. Utilizo esta imagen base para compilar todos mis binarios de go, la interfaz de vuejs y compilar cdk typescript y desplegarlo.
FROM golang:1.13 RUN go get -u -d github.com/magefile/mage WORKDIR $GOPATH/src/github.com/magefile/mage RUN go run bootstrap.go RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - RUN apt-get install -y nodejs RUN npm i -g aws-cdk@1.36.x RUN npm i -g typescript RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list RUN apt update && apt install yarnEspero que eso ayude.