gpt4 book ai didi

amazon-web-services - ParameterOverride CodePipeline 中的 Cloudformation ImportValue

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

问题:我有一个 cloudformation 模板,应该检索在 CodeCommit 中找到的代码并将其推送到 Lambda。 CodeCommit 中的代码还包含一个带有一些参数的 SAM 模板。 SAM 模板具有以下设置

AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Description: SAM Template for Deploy Python code to Lambda

Parameters:
ArtifactsBucket:
Description: The artifact bucket to get the lambda code
Type: String
Name:
Description: Name of the lambda function
Type: String
SqsARN:
Description: AWS SQS Arn to act as a trigger for the lambda function
Type: String
...

并且 CodePipeline Cloudformation 模板具有以下内容来覆盖 SAM 模板中存在的 3 个参数。

...
- Name: Deploy
Actions:
- Name: Deploy
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: CloudFormation
Version: 1
Configuration:
ActionMode: CREATE_UPDATE
Capabilities: 'CAPABILITY_IAM,CAPABILITY_AUTO_EXPAND,CAPABILITY_NAMED_IAM'
ChangeSetName: !Join
- '-'
- - lambda
- !Ref CodeCommitRepoName
ParameterOverrides: !Sub |
{
"ArtifactsBucket": "${ArtifactsBucket}",
"Name": "${CodeCommitRepoName}",
"SqsARN": {"Fn::ImportValue": "My-queue:us-east-1:Queue:Arn"}
}
...

ArtifactBucketName 参数可以通过 !Sub 函数轻松更改,但我无法获得 的有效值code>SqsARN 这是导入的值。

问题是否可以将 ImportValueParametersOverride 中的 Sub 函数结合使用?

尝试我也尝试过切换

{"Fn::ImportValue": "My-queue:us-east-1:Queue:Arn"}

!ImportValue": "My-queue:us-east-1:Queue:Arn"

这也不起作用。删除 !Sub 函数并使用 !Ref 函数会产生与 ImportValue 相同的输出/问题。

最佳答案

要记住的关键一点是,在 YAML 中使用 JSON

来自documentation

You can't use the short form of !ImportValue when it contains a !Sub.It is valid for AWS CloudFormation, but not validfor YAML:

假设环境作为参数,这是 Sub >> ImportValue >> Sub 的工作示例

        Value: !Sub
- '{
"sqsUrl": "${sqsUrl}",
}'
- {
sqsUrl: { 'Fn::ImportValue': { 'Fn::Sub': 'QueUrl-${Environment}' } }
}

将其应用于上面的示例可能如下所示(使用 ssm 进行测试)

Parameters:
Environment:
Type: String
Default: DV
ArtifactsBucket:
Type: String
Default: TestBucket
CodeCommitRepoName:
Type: String
Default: Test

Resources:
SmsLambdaParameter:
Type: 'AWS::SSM::Parameter'
Properties:
Name: !Sub
- '/${EnvFullUpper}/My-Param/Test'
- { EnvFullUpper: !Ref Environment }
Type: 'String'
Value: !Sub
- '{
"ArtifactsBucket": "${ArtifactsBucket}",
"Name": "${CodeCommitRepoName}",
"SqsARN": "${SqsArn}"
}'
- { SqsARN: { 'Fn::ImportValue': { 'Fn::Sub': 'QueueArn-${Environment}' } } }

关于amazon-web-services - ParameterOverride CodePipeline 中的 Cloudformation ImportValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65712947/

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