AWS Cloudformation интерпретирует условную функцию как свойство ресурса - PullRequest
0 голосов
/ 27 апреля 2018

У меня странное поведение с шаблоном облачной информации. Это мой шаблон, где я создаю корзину и хочу настроить уведомление в зависимости от условия:

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 Обнаружен артефактBucket неподдерживаемое свойство Fn :: If

Я не очень понимаю, в чем дело .. Может кто-нибудь попытается сообщить мне об ошибке, пожалуйста?

Спасибо

1 Ответ

0 голосов
/ 27 апреля 2018

К сожалению, вы не можете делать то, что вы хотели в облачной информации.

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. Это работает в большинстве случаев, хотя бывают случаи, когда этого просто недостаточно, и требуется больше творчества!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...