在 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 同时可用?

您可以:

  1. 使用 docker 图像并在您的工作中安装 python 或
  2. 使用 python 图像并在您的工作中安装 docker 或
  3. 构建您自己的包含所有依赖项(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
  # ...