Передать несколько параметров в DBParameterGroup в YAML CloudFormation - PullRequest
0 голосов
/ 06 сентября 2018

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

Parameters:
  UseCustomParameterGroup:
    Description: Toggle to 'Yes' to create a new parameter group.
    Type: String
    AllowedValues: ['Yes', 'No']
    Default: 'No'
  CustomParameters:
    Description: Add custom parameters to your custom parameter group. Creating a custom parameter group without parameters creates a mirror of the default group.
    Type: String
Conditions:
  UseCustomParameterGroup: !Equals [!Ref 'UseCustomParameterGroup', 'Yes']
Resources:
  CustomParameterGroup:
    Type: AWS::RDS::DBParameterGroup
    Condition: 'UseCustomParameterGroup'
    Properties:
      Family: "postgres10"
      Parameters: !Ref "CustomParameters"

Если я вызову этот шаблон из другого шаблона, то произойдет сбой с ошибкой Value of property Parameters must be an object

Parameters:
  USECUSTOMPARAMETERGROUP: 'Yes'
  CUSTOMPARAMETERS: '{
    "shared_preload_libraries": "pg_stat_statements",
    "pg_stat_statements.track": "all"
  }'
Resources:
  Postgres:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: https://..../rds-postgres-instance.yaml
      TimeoutInMinutes: '60'
      Parameters:
        UseCustomParameterGroup: !Ref USECUSTOMPARAMETERGROUP
        CustomParameters: !Ref CUSTOMPARAMETERS

Документация для AWS::RDS::DBParameterGroup гласит следующее для параметра Parameters:

Тип: объект JSON, состоящий из пар ключ-значение строки, как показано в следующем примере

«Параметры»: {«Ключ1»: «Значение1», «Ключ2»: «Значение2», «Ключ3»: «Значение3»}

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

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

1 Ответ

0 голосов
/ 07 сентября 2018

Облачная информация не позволяет вам преобразовывать строковые параметры в объекты JSON (или YAML в этом отношении), ваши параметры предназначены для использования в качестве значений для ваших ключей определения.

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

...