如何为不喜欢NPM的人制作Docker构建图像
#aws #python #docker #cdk

这将以错误的方式擦很多人,但是这是我第一次遇到AWS CDK的最初思考过程:

哦,哇,它有python的味道!我实际上可以将所有AWS基础架构写入Python和Ditch Terraform中?它转移到云形式,以便我可以使用云形式漂移检测,而不必担心状态文件?这是不可思议的!

ð -实际上都是用打字稿编写的?我必须安装一堆NPM依赖项才能运行CDK? python向typeScript转移到cloudformation?这似乎很混乱。

ðâem>也许我可以通过将NPM和CDK CLI安装到Docker映像中,将所有这些混乱扫荡在地毯下,然后我不必将NPM和所有依赖项在本地安装!然后,每当我需要使用CDK更新AWS资源时,我就可以实例化构建容器!

这就是我所做的,而且效果很好。这是需要安装Python CDK的所有要求:

  1. Python,显然。您可以从已经安装了Python的Docker图像开始,或者自己安装。我要做后者的完整性。
  2. PIP,为了安装您需要的Python软件包。
  3. tar and xz,解压缩您将下载的节点安装软件包。
  4. npm
  5. AWS-CDK NPM软件包
  6. CDK的Python库:AWS-CDK-LIB和构造
  7. AWS CLI

因此,如果我们将所有这些东西放在码头中,我们会得到:

FROM public.ecr.aws/amazonlinux/amazonlinux:2

RUN yum -y install python39
RUN curl -O https://bootstrap.pypa.io/get-pip.py
RUN python3 get-pip.py
WORKDIR /deploy
RUN yum -y install tar
RUN yum -y install xz
RUN curl https://nodejs.org/dist/v16.14.2/node-v16.14.2-linux-x64.tar.xz | tar -xJf -
ENV PATH="/deploy/node-v16.14.2-linux-x64/bin:${PATH}"
RUN npm install -g aws-cdk
RUN yes | pip --no-cache install aws-cdk-lib constructs
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
RUN yum -y install unzip
RUN unzip awscliv2.zip
RUN ./aws/install

COPY . /deploy/
ENV LANG=C.UTF-8
WORKDIR /deploy
CMD [ "/bin/bash" ]

就是这样!现在,您可以将所有这些垃圾保存在Docker图像中,而不是在本地开发环境中。您不必再考虑NPM,您可以和平地编写Python代码。

您会注意到,Dockerfile还具有一个副本,可以将本地部署文件夹中的所有代码移至Docker映像中。这就是您本地开发所有CDK代码的地方,遵循此处的指南:https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html。您的app.py,cdk.json等文件将在那里。因此,要通过CDK部署,您首先构建图像:

docker build -t cdk_deploy .

然后您暂时实例化Docker容器并运行CDK部署:

docker run -v $HOME/.aws/:/root/.aws/ --rm cdk_deploy cdk deploy --require-approval never

您可以看到我在那里安装了我的本地.aws dir,这样我就不必在那里进行硬编码。

最后,我应该指出,我通常将整个Docker命令包裹在某种DevOps管道中。我不是动物。这种模式的用途足够多,可以与许多不同类型的包装器一起使用。

就是这样,请注意,直到下次!