使用 GitLab CI 使用 AWS CDK (python) 执行 CI/CD 的最佳方法是什么?
What is the best way to do CI/CD with AWS CDK (python) using GitLab CI?
我正在使用 AWS CDK(带 Python)用于 运行 在 Fargate 上的容器化应用程序。我想在 GitLab CI 进程中 运行 cdk deploy
并将 git 标记作为环境变量传递,以替换 Fargate 中的容器 运行ning。我目前正在使用 CloudFormation (aws cloudformation update-stack ...
) 做类似的事情。还有其他人以这种方式使用 AWS CDK 做 CI/CD 吗?有更好的方法吗?
此外,我应该为这项工作的基本图像使用什么?我在想我可以从一个 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 可以在 cdk deploy
期间构建 docker 个图像,但它需要访问 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
如果您有 lambda 或 ECS 资产,您肯定必须在 CI/CD 管道内使用 CDK 部署,否则,您可以 运行 CDK 合成器并将生成的 Cloudformation 传递给 AWS Code Deploy。这意味着您的很多 CI/CD 将花费在部署上,这可能会耗尽您的免费套餐构建时间,或者只是意味着您需要支付更多费用(AWS Code Deploy 是免费的)
我在 CircleCi 中用 Golang 做了类似的事情。我使用 Go 基础映像并安装 nodejs 和 cdk。我使用这个基础镜像来构建我所有的 go 二进制文件、vuejs 前端并编译 cdk typescript 并部署它。
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 yarn
希望对您有所帮助。
我正在使用 AWS CDK(带 Python)用于 运行 在 Fargate 上的容器化应用程序。我想在 GitLab CI 进程中 运行 cdk deploy
并将 git 标记作为环境变量传递,以替换 Fargate 中的容器 运行ning。我目前正在使用 CloudFormation (aws cloudformation update-stack ...
) 做类似的事情。还有其他人以这种方式使用 AWS CDK 做 CI/CD 吗?有更好的方法吗?
此外,我应该为这项工作的基本图像使用什么?我在想我可以从一个 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 可以在 cdk deploy
期间构建 docker 个图像,但它需要访问 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
如果您有 lambda 或 ECS 资产,您肯定必须在 CI/CD 管道内使用 CDK 部署,否则,您可以 运行 CDK 合成器并将生成的 Cloudformation 传递给 AWS Code Deploy。这意味着您的很多 CI/CD 将花费在部署上,这可能会耗尽您的免费套餐构建时间,或者只是意味着您需要支付更多费用(AWS Code Deploy 是免费的)
我在 CircleCi 中用 Golang 做了类似的事情。我使用 Go 基础映像并安装 nodejs 和 cdk。我使用这个基础镜像来构建我所有的 go 二进制文件、vuejs 前端并编译 cdk typescript 并部署它。
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 yarn
希望对您有所帮助。