在 Gitlab runner 中使用 SAM 构建和部署 AWS Lambda 类型的图像
Build and deploy AWS Lambda of type image using SAM in Gitlab runner
我正在尝试使用 Gitlab 运行程序中的 SAM cli 工具为 AWS Lambda 设置 CI/CD。
我的 Lambda 函数是作为容器映像提供的 Go 应用程序。
我按照这篇文章正确设置了它:
https://aws.amazon.com/blogs/apn/using-gitlab-ci-cd-pipeline-to-deploy-aws-sam-applications/
不幸的是,使用的 .gitlab-ci.yml
似乎仅适用于 PackageType
Zip
的功能,即通过将应用程序代码上传到 S3 存储桶:
image: python:3.8
stages:
- deploy
production:
stage: deploy
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- sam build
- sam package --output-template-file packaged.yaml --s3-bucket #S3Bucket#
- sam deploy --template-file packaged.yaml --stack-name gitlab-example --s3-bucket #S3Bucket# --capabilities CAPABILITY_IAM --region us-east-1
environment: production
我将脚本调整为这些行:
script:
- sam build
- sam deploy
sam build
在此阶段失败:
Building codeuri: /builds/user/app runtime: None metadata: {'DockerTag': 'go1.x-v1', 'DockerContext': '/builds/user/app/hello-world', 'Dockerfile': 'Dockerfile'} architecture: x86_64 functions: ['HelloWorldFunction']
Building image for HelloWorldFunction function
Build Failed
Error: Building image for HelloWorldFunction requires Docker. is Docker running?
Gitlab 的 This guide 建议使用 image: docker
并启用 dind
,所以我尝试了这个配置:
image: docker
services:
- docker:dind
stages:
- deploy
production:
stage: deploy
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- sam build
- sam deploy
environment: production
这又失败了,因为基础 docker
图像没有发布 Python。我如何结合这两种方法使 Docker 和 SAM 同时可用?
您可以:
- 使用
docker
图像并在您的工作中安装 python 或
- 使用
python
图像并在您的工作中安装 docker 或
- 构建您自己的包含所有依赖项(docker、python、awscli 等)的映像,并将其用作您的作业
image:
。
正在 docker 映像中安装 python:
production:
image: docker
stage: deploy
before_script:
- apk add --update python3 py3-pip
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- sam build
- sam deploy
environment: production
正在 Python 映像中安装 docker:
production:
image: python:3.9-slim
stage: deploy
before_script:
- apt update && apt install -y --no-install-recommends docker.io
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- sam build
- sam deploy
environment: production
或构建您自己的图像:
FROM python:3.9-slim
RUN apt update && apt install -y --no-install-recommends docker.io
docker build -t myregistry.example.com/myrepo/myimage:latest
docker push myregistry.example.com/myrepo/myimage:latest
production:
image: myregistry.example.com/myrepo/myimage:latest
# ...
我正在尝试使用 Gitlab 运行程序中的 SAM cli 工具为 AWS Lambda 设置 CI/CD。
我的 Lambda 函数是作为容器映像提供的 Go 应用程序。
我按照这篇文章正确设置了它: https://aws.amazon.com/blogs/apn/using-gitlab-ci-cd-pipeline-to-deploy-aws-sam-applications/
不幸的是,使用的 .gitlab-ci.yml
似乎仅适用于 PackageType
Zip
的功能,即通过将应用程序代码上传到 S3 存储桶:
image: python:3.8
stages:
- deploy
production:
stage: deploy
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- sam build
- sam package --output-template-file packaged.yaml --s3-bucket #S3Bucket#
- sam deploy --template-file packaged.yaml --stack-name gitlab-example --s3-bucket #S3Bucket# --capabilities CAPABILITY_IAM --region us-east-1
environment: production
我将脚本调整为这些行:
script:
- sam build
- sam deploy
sam build
在此阶段失败:
Building codeuri: /builds/user/app runtime: None metadata: {'DockerTag': 'go1.x-v1', 'DockerContext': '/builds/user/app/hello-world', 'Dockerfile': 'Dockerfile'} architecture: x86_64 functions: ['HelloWorldFunction']
Building image for HelloWorldFunction function
Build Failed
Error: Building image for HelloWorldFunction requires Docker. is Docker running?
Gitlab 的 This guide 建议使用 image: docker
并启用 dind
,所以我尝试了这个配置:
image: docker
services:
- docker:dind
stages:
- deploy
production:
stage: deploy
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- sam build
- sam deploy
environment: production
这又失败了,因为基础 docker
图像没有发布 Python。我如何结合这两种方法使 Docker 和 SAM 同时可用?
您可以:
- 使用
docker
图像并在您的工作中安装 python 或 - 使用
python
图像并在您的工作中安装 docker 或 - 构建您自己的包含所有依赖项(docker、python、awscli 等)的映像,并将其用作您的作业
image:
。
正在 docker 映像中安装 python:
production:
image: docker
stage: deploy
before_script:
- apk add --update python3 py3-pip
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- sam build
- sam deploy
environment: production
正在 Python 映像中安装 docker:
production:
image: python:3.9-slim
stage: deploy
before_script:
- apt update && apt install -y --no-install-recommends docker.io
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- sam build
- sam deploy
environment: production
或构建您自己的图像:
FROM python:3.9-slim
RUN apt update && apt install -y --no-install-recommends docker.io
docker build -t myregistry.example.com/myrepo/myimage:latest
docker push myregistry.example.com/myrepo/myimage:latest
production:
image: myregistry.example.com/myrepo/myimage:latest
# ...