【问题标题】:AWS Cloudformation interprets conditionnal function as a resource propertyAWS Cloudformation 将条件函数解释为资源属性
【发布时间】:2018-04-27 02:14:24
【问题描述】:

我对 cloudformation 模板有一个奇怪的行为。这是我的模板,我在其中创建一个存储桶并希望根据条件通知配置:

AWSTemplateFormatVersion: '2010-09-09'
Description: "Setup Artifacts Bucket"
Parameters:
  BucketName:
    Description: Name of the pipeline setup arctifact bucket
    Type: String 
    Default: "s3-pipeline-setup"
  NotificationCondition:
    Description: Conditionally add Notification configuration to the artifact bucket
    Type: String
    Default: false
Conditions:
  AddNotificationConfiguration: !Equals [ !Ref NotificationCondition, true ]

Resources:
  ArtifactBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Ref BucketName
      Fn::If:
        - AddNotificationConfiguration
        -
          NotificationConfiguration:
            LambdaConfigurations:
              -
                Function: "arn:aws:lambda:eu-west-1:341292222222227:function:lambda-ops-trigger-pipeline-setup"
                Event: "s3:ObjectCreated:*"
                Filter:
                  S3Key:
                    Rules:
                      -
                        Name: prefix
                        Value: "appstackcodes/"
                      -
                        Name: suffix
                        Value: "txt"
        - !Ref AWS::NoValue

当我尝试部署时失败并出现以下错误:

00:28:10 UTC+0200 CREATE_FAILED AWS::S3::Bucket ArtifactBucket 遇到 不支持的属性 Fn::If

我真的不明白这件事..有人可以尝试让我知道那里的错误吗?

谢谢

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案1】:

    很遗憾,您无法在 cloudformation 中做您想做的事情。

    Fn::If 基本上只能用作三元表达式。例如

    key: Fn::If: [condition_name, value_if_true, value_if_false]
    

    它不能像在编程语言中那样用作逻辑流。有办法解决它。您实际上似乎已经发现了AWS::NoValue,因此只需将NotificationConfiguration 分配移到if 之外。

    Resources:
      ArtifactBucket:
        Type: AWS::S3::Bucket
        Properties:
          BucketName: !Ref BucketName
          NotificationConfiguration:
            Fn::If:
              - AddNotificationConfiguration
              - LambdaConfigurations:
                  -
                    Function: "arn:aws:lambda:eu-west-1:341294322147:function:lambda-itops-trigger-pipeline-setup"
                    Event: "s3:ObjectCreated:*"
                    Filter:
                      S3Key:
                        Rules:
                          -
                            Name: prefix
                            Value: "appstackcodes/"
                          -
                            Name: suffix
                            Value: "txt"
              - !Ref AWS::NoValue
    

    实际上,您总是在为NotificationConfiguration 分配一些东西,但有时这就是AWS::NoValue 的魔力。这在大多数情况下都有效,尽管有时这还不够,需要更多的创造力!

    【讨论】:

      猜你喜欢
      • 2021-05-01
      • 2019-05-07
      • 2018-01-12
      • 1970-01-01
      • 2019-11-30
      • 2021-06-03
      • 2021-05-29
      • 2017-08-11
      • 1970-01-01
      相关资源
      最近更新 更多