[英]How can I ref a variable in ImportValue in cloudformation?
[英]Cloudformation ImportValue within ParameterOverride CodePipeline
问题:我有一个 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"}
}
...
!Sub
function 可以轻松更改ArtifactBucket
和Name
参数,但我无法为导入值SqsARN
提供有效值。
问题无论如何在ParametersOverride
中包含ImportValue
和Sub
function ?
尝试我也尝试从
{"Fn::ImportValue": "My-queue:us-east-1:Queue:Arn"}
到
!ImportValue": "My-queue:us-east-1:Queue:Arn"
这也没有用。 删除!Sub
function 并使用!Ref
function 会产生与ImportValue
相同的输出/问题。
要记住的关键是,在 YAML 中使用 JSON
从文档
您不能使用 .ImportValue 的缩写形式,当它包含 Sub 时:它对 AWS CloudFormation 有效,但对 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}' } } }
您可以使用Fn::Sub的数组形式:
!Sub
- String
- Var1Name: Var1Value
Var2Name: Var2Value
这将导致:
ParameterOverrides: !Sub
- |
{
"ArtifactsBucket": "${ArtifactsBucket}",
"Name": "${CodeCommitRepoName}",
"SqsARN": "${SqsARNImport}"
}
- SqsARNImport: !ImportValue <name-of-your-queue-export>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.