aws-lambda - 如何在 codebuild buildspec 和 codedeploy 中使用多个 sam 模板进行 lambda 函数部署
问题描述
我想在我的 codebuild buildspec 和 codedeploy 中使用多个 SAM 模板文件来部署我的 lambda 函数。
我在构建规范中定义了多个 SAM 模板,该模板构建时没有任何错误。但是,CodeDeploy 仅部署其中一个 SAM 模板。
如何设置 codebuild 和 codedeploy 以使用多个 sam 模板 lambda 函数部署?
下面是我设置的 Codebuild 规范文件
version: 0.1
env:
parameter-store:
S3_BUCKET: "my_s3_bucket"
phases:
install:
commands:
- aws cloudformation package --template-file samTemplate.yaml --s3-bucket $S3_BUCKET --output-template-file outputSamTemplate.yaml
- aws cloudformation package --template-file samTemplatetwo.yaml --s3-bucket $S3_BUCKET --output-template-file outputSamTemplate.yaml
artifacts:
type: zip
files:
- samTemplate.yaml
- samTemplatetwo.yaml
- outputSamTemplate.yaml
下面是我为部署 lambda 函数的 codedeploy 的配置。它创建了云形成堆栈。
以下是我正在使用的 sam 模板。模板 1
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: Lambda Functions Deployment
Parameters:
Environments:
Type: String
Default: UAT
Description: Parameters deployment Environments
Mappings:
StagesMap:
UAT:
CONFIGBUCKET: staging-bucket-name
CONFIGKEY: source-data-key-path
URL: UAT
RoleEnv: arn:aws:iam::
NonProd:
CONFIGBUCKET: non-prod-bucket-name
CONFIGKEY: source-data-key-path
RoleEnv: arn:aws:iam::
Resources:
CDDemoLambda:
Type: 'AWS::Serverless::Function'
Properties:
Handler: lambda_function.lambda_handler
Runtime: python3.6
CodeUri: ./LambdaCode
FunctionName: CDDemoLambda
Description: 'Lambda function for CD Demo'
MemorySize: 128
Timeout: 30
Role: !FindInMap
- StagesMap
- Ref: Environments
- RoleEnv
Environment:
Variables:
CONFIG_BUCKET: !FindInMap
- StagesMap
- Ref: Environments
- CONFIGBUCKET
CONFIG_KEY: !FindInMap
- StagesMap
- Ref: Environments
- CONFIGKEY
LambdaCopy:
Type: 'AWS::Serverless::Function'
Properties:
Handler: lambda_function.lambda_handler
Runtime: python3.6
CodeUri: ./LambdaCopy-CICD
FunctionName: LambdaCopy-CICD
Description: 'Lambda function to copy from one folder to another'
MemorySize: 128
Timeout: 30
Role: !FindInMap
- StagesMap
- Ref: Environments
- RoleEnv
Environment:
Variables:
CONFIG_BUCKET: !FindInMap
- StagesMap
- Ref: Environments
- CONFIGBUCKET
CONFIG_KEY: !FindInMap
- StagesMap
- Ref: Environments
- CONFIGKEY
模板 2
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: Lambda Functions Deployment
Parameters:
Environments:
Type: String
Default: UAT
Description: Parameters deployment Environments
Mappings:
StagesMap:
UAT:
CONFIGBUCKET: staging-bucket-name
CONFIGKEY: source-data-key-path
URL: UAT
RoleEnv: arn:aws:iam::
NonProd:
CONFIGBUCKET: non-prod-bucket-name
CONFIGKEY: source-data-key-path
RoleEnv: arn:aws:iam::
Resources:
Demo:
Type: 'AWS::Serverless::Function'
Properties:
Handler: lambda_function.lambda_handler
Runtime: python3.6
CodeUri: ./LambdaCode2
FunctionName: Demo
Description: 'Lambda func'
MemorySize: 128
Timeout: 30
Role: !FindInMap
- StagesMap
- Ref: Environments
- RoleEnv
Environment:
Variables:
CONFIG_BUCKET: !FindInMap
- StagesMap
- Ref: Environments
- CONFIGBUCKET
CONFIG_KEY: !FindInMap
- StagesMap
- Ref: Environments
- CONFIGKEY
解决方案
一种解决方案是查看嵌套堆栈。这样,您可以创建第三个 SAM 模板,该模板将您的两个模板作为嵌套堆栈。然后,您只需部署父模板,您的两个模板都将部署为单独的堆栈。
更多信息请点击此处。
推荐阅读
- telegram - 如何使用 Telegram Bot 在消息中发送 url 链接或显示按钮以打开 URL 链接
- javascript - 如何为graphql创建对象数组
- mysql - 使用条件代码点火器选择数据
- php - 使用 codeigiter 3 和 sql 从 db 中选择 balalce
- javascript - 使用 React useState 钩子函数调用设置中止状态
- c# - 在 MVC 应用程序中调用 Web API(无 GET/POST/DELETE/UPDATE)
- javascript - 复选框切换忽略第一次单击,第二次单击后切换工作正常
- c++ - Node a 和 Node* s 有何不同?
- embedded - 由于内部闪存的内存限制,是否建议使用 SPI 闪存而不是内部闪存来运行代码?
- android - Android Progaurd 规则包名称正则表达式