如何在不使用 SAM 的情况下使用 AWS code deploy 部署简单的 AWS lambda 函数?
How do i deploy a simple AWS lambda function using AWS code deploy without using SAM?
文档说我应该在调用 codedeploy 时以 .yaml 或 .json 格式指定应用程序修订。但是如何通过code deploy部署实际的功能代码呢?
没有提供包含代码的 zip 文件的选项。仅接受 json 和 yaml 文件。我实际上如何通过 codedeploy update/add lambda 函数代码?下图显示即使通过 aws 控制台,我也只能指定一个 yaml 或 json appspec 文件。
如何在此处实际部署我的函数代码?
![Text]()
您必须在 CodeDeploy (CD) 阶段之前部署它。您可以为此使用 CodeBuild (CB)。因此,在您的 CI/CD 管道中,您的 CD 阶段将在 CB 阶段之后执行。 CB 阶段将部署并创建您的函数的一个版本,然后将其用作 CD 的输入。
如@Marcin 所述,您需要通过代码构建规范 yaml 文件更新实际功能。
有很多方法可以让 CI/CD 用于无服务器 lambda 函数。 (Cloudformation、Terraform、CodeDeploy,仅使用 CodeBuild 并在那里更新代码!)
我个人做的是使用 ECR,Docker 图像来处理 CI/CD 过程,流程如下:
- 创建 ECR 存储库
- 为您的 lambda 函数创建 docker 图像
- 将 docker 图像推送到 ECR
在您的 buildspec.yml
文件中:
- 尝试获取 ECR 的凭据
- 并根据代码管道
中源代码部分的工件构建 lambda docker 图像
- 将新的 docker 图像推送到 ECR
- 使用 docker 图像更新 lambda。
这是一个示例:
version: 0.2
phases:
pre_build:
commands:
- echo "Build on `date`"
- aws ecr get-login-password --region ca-central-1 | docker login --username AWS --password-stdin YOUR_ECR_ADDRESS
- npm run test
build:
commands:
- echo Building the Docker image ... | tee -a log.txt
- docker build -t YOUR_ECR_ADDRESS/your-lambda:latest . 2>&1 | tee -a log.txt
post_build:
commands:
- echo Build completed on `date`
- echo Pushing the Docker image...
- docker push YOUR_ECR_ADDRESS/your-lambda:latest
- aws lambda update-function-code --function-name your-lambda --image-uri YOUR_ECR_ADDRESS/your-lambda:latest > /dev/null
您还可以将 cloudformation 作为最后一个阶段,这样您就可以通过仅更改模板 yml 文件来更改函数规范,即角色、超时、ram 使用等。
文档说我应该在调用 codedeploy 时以 .yaml 或 .json 格式指定应用程序修订。但是如何通过code deploy部署实际的功能代码呢?
没有提供包含代码的 zip 文件的选项。仅接受 json 和 yaml 文件。我实际上如何通过 codedeploy update/add lambda 函数代码?下图显示即使通过 aws 控制台,我也只能指定一个 yaml 或 json appspec 文件。
如何在此处实际部署我的函数代码? ![Text]()
您必须在 CodeDeploy (CD) 阶段之前部署它。您可以为此使用 CodeBuild (CB)。因此,在您的 CI/CD 管道中,您的 CD 阶段将在 CB 阶段之后执行。 CB 阶段将部署并创建您的函数的一个版本,然后将其用作 CD 的输入。
如@Marcin 所述,您需要通过代码构建规范 yaml 文件更新实际功能。
有很多方法可以让 CI/CD 用于无服务器 lambda 函数。 (Cloudformation、Terraform、CodeDeploy,仅使用 CodeBuild 并在那里更新代码!)
我个人做的是使用 ECR,Docker 图像来处理 CI/CD 过程,流程如下:
- 创建 ECR 存储库
- 为您的 lambda 函数创建 docker 图像
- 将 docker 图像推送到 ECR
在您的 buildspec.yml
文件中:
- 尝试获取 ECR 的凭据
- 并根据代码管道 中源代码部分的工件构建 lambda docker 图像
- 将新的 docker 图像推送到 ECR
- 使用 docker 图像更新 lambda。
这是一个示例:
version: 0.2
phases:
pre_build:
commands:
- echo "Build on `date`"
- aws ecr get-login-password --region ca-central-1 | docker login --username AWS --password-stdin YOUR_ECR_ADDRESS
- npm run test
build:
commands:
- echo Building the Docker image ... | tee -a log.txt
- docker build -t YOUR_ECR_ADDRESS/your-lambda:latest . 2>&1 | tee -a log.txt
post_build:
commands:
- echo Build completed on `date`
- echo Pushing the Docker image...
- docker push YOUR_ECR_ADDRESS/your-lambda:latest
- aws lambda update-function-code --function-name your-lambda --image-uri YOUR_ECR_ADDRESS/your-lambda:latest > /dev/null
您还可以将 cloudformation 作为最后一个阶段,这样您就可以通过仅更改模板 yml 文件来更改函数规范,即角色、超时、ram 使用等。