Условия облачных вычислений AWS

#amazon-cloudformation

Вопрос:

У меня есть два условия в моем шаблоне CloudFormation, которые используются для выбора ресурса для развертывания в зависимости от среды. Однако при ссылке на ресурс позже в шаблоне CloudFormation выдает ошибку «Неразрешенные зависимости ресурсов». Есть идеи, что не так?

Шаблон сокращен для удобства чтения. Он прекрасно работает без каких-либо условий.

 Parameters:
  EnvironmentName:
    Type: String

Conditions:
  IsProduction: !Equals [!Ref EnvironmentName, production]
  IsNotProduction: !Not [!Equals [!Ref EnvironmentName, production]]

Resources:
  Lambda:
    Type: AWS::Serverless::Function
    Condition: IsNotProduction

  Lambda:
    Type: AWS::Serverless::Function
    Condition: IsProduction

  LogGroup:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: !Sub /aws/lambda/${Lambda}
 

Ответ №1:

Поэтому, поскольку шаблон сокращен, не так просто определить, что вызывает эту ошибку.

Однако одна вещь, которая вызывает проблемы, заключается в том, что обе ваши Лямбды называются "Lambda" . Это не сработает, вам нужно называть их по-другому в разделе «Ресурсы».

Комментарии:

1. Ссылка на группу «лямбда в журнале» является единственной в шаблоне, которая, как я предполагаю, вызывает ошибку. Я также предположил, что у меня может быть 2 ресурса с одинаковым логическим идентификатором, потому что он создаст только один из них, но я сомневаюсь, что не могу. Хороший улов.

2. По своему опыту я обнаружил, что часто проще использовать !If оператор для свойств, которые на самом деле отличаются, поэтому вы можете использовать один логический идентификатор. Он сохраняет другие части шаблона более чистыми, такие как ссылки, которые являются одинаковыми и которые не зависят от условия.

3. Моя цель состояла в том, чтобы отключить постепенные развертывания для промежуточного развертывания и включить их для производства, но атрибут AutoPublishAlias не работает с условиями.