gpt4 book ai didi

amazon-web-services - 如何在CloudFormation中使用CodeBuild的输出工件?

转载 作者:行者123 更新时间:2023-12-04 03:25:41 25 4
gpt4 key购买 nike

因此,我尝试设置一个相当简单的堆栈,其中包含订阅 SNS 主题的单个 Lambda 函数。我想使用包含三个阶段的 CodePipeline:源 (GitHub) -> 构建 (CodeBuild) -> 部署 (CloudFormation)。

我设法拼凑了一个可以工作的模板和构建规范文件,但我不知道如何引用 CodeBuild 在 CloudFormation 模板中生成的输出工件;现在我只有占位符内联代码。

基本上,我应该在 Lambda 函数的 Code: 属性中放入什么才能获取 CodeBuild 文件(这是我在 CodePipeline 中的输出工件)?

模板.yml:

AWSTemplateFormatVersion: 2010-09-09
Resources:
SNSTopic:
Type: 'AWS::SNS::Topic'
Properties:
Subscription:
- Endpoint: !GetAtt
- LambdaFunction
- Arn
Protocol: lambda
LambdaFunction:
Type: 'AWS::Lambda::Function'
Properties:
Runtime: python3.6
Handler: main.lamda_handler
Timeout: '10'
Role: !GetAtt
- LambdaExecutionRole
- Arn
Code:
ZipFile: >
def lambda_handler(event, context):
print(event)
return 'Hello, world!'
LambdaExecutionRole:
Type: 'AWS::IAM::Role'
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- 'sts:AssumeRole'
ManagedPolicyArns:
- 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'
LambdaInvokePermission:
Type: 'AWS::Lambda::Permission'
Properties:
FunctionName: !GetAtt
- LambdaFunction
- Arn
Action: 'lambda:InvokeFunction'
Principal: sns.amazonaws.com
SourceArn: !Ref SNSTopic

buildspec.yml:

version: 0.2
phases:
install:
commands:
- pip install -r requirements.txt -t libs
artifacts:
type: zip
files:
- template.yml
- main.py
- lib/*

最佳答案

感谢 AWS 的支持,终于找到了解决方案。首先,我将此 JSON 放置在 CodePipeline 中 CloudFormation 部署步骤的参数覆盖中:

{
"buildBucketName" : { "Fn::GetArtifactAtt" : ["MyAppBuild", "BucketName"]},
"buildObjectKey" : { "Fn::GetArtifactAtt" : ["MyAppBuild", "ObjectKey"]}
}

然后像这样更改了我的 CF 模板:

AWSTemplateFormatVersion: 2010-09-09
Parameters:
buildBucketName:
Type: String
buildObjectKey:
Type: String

Resources:
...
LambdaFunction:
...
Code:
S3Bucket: !Ref buildBucketName
S3Key: !Ref buildObjectKey

这会将 CodeBuild 作为参数输出的输出工件存储桶名称和对象键传递给 CF,以便它可以动态获取 S3 中的输出工件位置,而无需硬编码任何内容,从而使模板更加可移植。

关于amazon-web-services - 如何在CloudFormation中使用CodeBuild的输出工件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44894675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com