繁体   English   中英

ParameterOverride CodePipeline 中的 Cloudformation ImportValue

[英]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 可以轻松更改ArtifactBucketName参数,但我无法为导入值SqsARN提供有效值。

问题无论如何在ParametersOverride中包含ImportValueSub 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM