Значение функции условия CloudFormation на основе параметра - PullRequest
0 голосов
/ 16 июня 2020

У меня есть parameter, в котором я определяю среду.

Parameters:
  Environment:
    Description: Environment. Example: qa, prod
    Type: String

Я создаю кластер RDS и, применительно к среде, я хотел бы установить одно или другое значение для BackupRetentionPeriod

logi c будет: если 'prod', значение должно быть int 35, если не int 7.

BackupRetentionPeriod: !Ref Environment = prod, 35, 7

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

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

Вы можете использовать комбинацию If и Equals в вашей CloudFormation:

Parameters:

  Environment:
    Description: Environment. Example: qa, prod
    Type: String

Conditions:

  IsProd: 
    !Equals [!Ref Environment, 'prod']  

Resources:

    ....
    ....
    BackupRetentionPeriod: !If [IsProd, 35, 7]

Вы также можете сделать это без отдельного раздела Conditions, но я думаю, что шаблон CFN с ним легче читать, поэтому я включил его.

0 голосов
/ 16 июня 2020

Если вам по какой-то причине не нравятся условия, вы можете добиться этого с помощью Mappings . Что-то вроде:

Parameters:
  EnvType:
    Description: >-
      Type of the environment (eu, tu, au, pu). 

      Please use the same environment for all components/stacks of your
      environment.
    Type: String
    Default: eu
    AllowedValues:
      - eu
      - tu
      - au
      - pu
Mappings:
  BackupRetentionPeriod:
    default:
      pu: 35
      eu: 7
      tu: 7
      au: 7

А потом:

BackupRetentionPeriod: !FindInMap 
  - BackupRetentionPeriod
  - default
  - !Ref EnvType
...