CloudFormation необязательное свойство карты — DeadLetterQueue

#amazon-web-services #amazon-cloudformation

#amazon-веб-сервисы #amazon-cloudformation

Вопрос:

Мне нужно, чтобы свойство DeadLetterQueue в AWS :: Serverless:: Function создавалось только в том случае, если Env = ppd или Env = prod

 Conditions:
  IsPpdOrPrdEnv: !Or [!Equals [!Ref "Env", ppd], !Equals [!Ref "Env", prod]]
<...>
Resources:
  <...>
  TestFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      FunctionName: !Sub '${Env}-Test-Function'
      DeadLetterQueue: 
        TargetArn: !If [IsPpdOrPrdEnv, !Ref TestSNSTopic, !Ref "AWS::NoValue"]
        Type: !If [IsPpdOrPrdEnv, SNS, !Ref "AWS::NoValue"]
  <...>
 

Ошибка:

Преобразование AWS :: Бессерверное-2016-10-31 сбой с помощью: сбой внутреннего преобразования.

Я также пробовал:

      DeadLetterQueue: 
        !If
          - IsPpdOrPrdEnv
          - 
            TargetArn: !Ref TestSNSTopic
            Type: SNS
          - !Ref "AWS::NoValue"
 

Ошибка:

Преобразование AWS :: Бессерверное-2016-10-31 ошибка с: Недопустимый документ спецификации бессерверного приложения. Количество найденных ошибок: 1. Ресурс с идентификатором [testFunction] недопустим. для «DeadLetterQueue» требуется указать свойства Type и TargetArn.

Любой совет, пожалуйста?

Ответ №1:

Похоже, это ошибка / ограничение SAM. В github есть открытые проблемы (здесь и здесь), которые описывают, с чем вы столкнулись.

Поскольку обе проблемы открыты, они не решены. Единственным обходным решением является:

В итоге нам пришлось добавить (вручную или по сценарию) этап предварительного развертывания, который просто удаляет всю часть конфигурации [DeadLetterQueue], если [DeadLetterQueue] нежелателен.