如何设置从 CodeCommit 到 Lambda 函数的自动部署?
How to setup automated deployment from CodeCommit to a Lambda Function?
我正在尝试将 CodeCommit 存储库的内容“部署”到 Lambda 函数(而非应用程序)。
在这种特殊情况下,它是一个简单的 copy/paste 从源到目的地。
我正在努力寻找不涉及设置另一个 Lambda 函数的解决方案。据我了解,有一个使用 CodeBuild 和 CloudFormation 的解决方案。
有人对此有解决方案吗?或者,您能指出任何好的文档吗?
P.S:
我发现 this question 似乎回答了我的问题,但相关答案中的链接已过时。
您可以使用 CodeBuild
作业构建 Code Commit Pipeline,其中 CodeCommit
存储库具有如下所示的 SAM
模板,并且您 运行
sam build && sam deploy
来自 codebuild
工作。
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: A sample SAM template for deploying Lambda functions.
Resources:
# Details about the myDateTimeFunction Lambda function
myDateTimeFunction:
Type: AWS::Serverless::Function
Properties:
Handler: myDateTimeFunction.handler
Runtime: nodejs12.x
# Creates an alias named "live" for the function, and automatically publishes when you update the function.
AutoPublishAlias: live
DeploymentPreference:
# Specifies the deployment configuration
Type: Linear10PercentEvery2Minutes
此文档页面描述了相同的 CodeCommit Rolling deployments for Lambda functions
这是对我有用的解决方案。
我设置了一个以 CodeCommit 作为源和构建阶段(无部署阶段)的管道。
构建阶段读取 buildspec.yml 文件,该文件本身读取名为 template.yml 的 SAM 模板。 SAM 堆栈是通过 CloudFormation 创建的。
我创建了一个 s3 存储桶来保存构建工件。
这是示例 buildspec.yml 文件:
version: 0.2
phases:
install:
commands:
- echo Nothing to do in the install phase...
pre_build:
commands:
- echo Nothing to do in the pre_build phase...
build:
commands:
- aws cloudformation package --template-file template.yml
--s3-bucket <bucketname>
--output-template-file newtemplate.yml
- aws cloudformation deploy --stack-name <stackname>
--capabilities CAPABILITY_IAM
--template-file newtemplate.yml
--role-arn arn:aws:iam::<account number>:role/CloudFormationServiceRole
post_build:
commands:
- echo Build completed
这是示例 template.yml 文件:
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: CloudFormation Stack for the lambda function
Resources:
# Details about the Lambda function
<StackName>:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs12.x
CodeUri: src/
# Creates an alias named "live" for the function, and automatically publishes when you update the function.
AutoPublishAlias: live
DeploymentPreference:
# Specifies the deployment configuration
Type: AllAtOnce
文件结构为:
.
├── src/
│ ├── node_modules/
│ └── index.js
├── builspec.yml
└── template.yml
确保为 CloudFormation 和 CodeBuild IAM 设置正确的 IAM 策略。
我正在尝试将 CodeCommit 存储库的内容“部署”到 Lambda 函数(而非应用程序)。 在这种特殊情况下,它是一个简单的 copy/paste 从源到目的地。
我正在努力寻找不涉及设置另一个 Lambda 函数的解决方案。据我了解,有一个使用 CodeBuild 和 CloudFormation 的解决方案。
有人对此有解决方案吗?或者,您能指出任何好的文档吗?
P.S:
我发现 this question 似乎回答了我的问题,但相关答案中的链接已过时。
您可以使用 CodeBuild
作业构建 Code Commit Pipeline,其中 CodeCommit
存储库具有如下所示的 SAM
模板,并且您 运行
sam build && sam deploy
来自 codebuild
工作。
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: A sample SAM template for deploying Lambda functions.
Resources:
# Details about the myDateTimeFunction Lambda function
myDateTimeFunction:
Type: AWS::Serverless::Function
Properties:
Handler: myDateTimeFunction.handler
Runtime: nodejs12.x
# Creates an alias named "live" for the function, and automatically publishes when you update the function.
AutoPublishAlias: live
DeploymentPreference:
# Specifies the deployment configuration
Type: Linear10PercentEvery2Minutes
此文档页面描述了相同的 CodeCommit Rolling deployments for Lambda functions
这是对我有用的解决方案。
我设置了一个以 CodeCommit 作为源和构建阶段(无部署阶段)的管道。
构建阶段读取 buildspec.yml 文件,该文件本身读取名为 template.yml 的 SAM 模板。 SAM 堆栈是通过 CloudFormation 创建的。
我创建了一个 s3 存储桶来保存构建工件。
这是示例 buildspec.yml 文件:
version: 0.2
phases:
install:
commands:
- echo Nothing to do in the install phase...
pre_build:
commands:
- echo Nothing to do in the pre_build phase...
build:
commands:
- aws cloudformation package --template-file template.yml
--s3-bucket <bucketname>
--output-template-file newtemplate.yml
- aws cloudformation deploy --stack-name <stackname>
--capabilities CAPABILITY_IAM
--template-file newtemplate.yml
--role-arn arn:aws:iam::<account number>:role/CloudFormationServiceRole
post_build:
commands:
- echo Build completed
这是示例 template.yml 文件:
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: CloudFormation Stack for the lambda function
Resources:
# Details about the Lambda function
<StackName>:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs12.x
CodeUri: src/
# Creates an alias named "live" for the function, and automatically publishes when you update the function.
AutoPublishAlias: live
DeploymentPreference:
# Specifies the deployment configuration
Type: AllAtOnce
文件结构为:
.
├── src/
│ ├── node_modules/
│ └── index.js
├── builspec.yml
└── template.yml
确保为 CloudFormation 和 CodeBuild IAM 设置正确的 IAM 策略。