Использовать карту в Cloudformation для определения статических конфигураций dev и prod? - PullRequest
0 голосов
/ 25 сентября 2018

Я хочу иметь один шаблон для всех моих развертываний.

Я хочу, чтобы моя конфигурация dev и prod была определена в одном шаблоне.

Когда я вызываю шаблон, я передаю параметр дляdev или prod и cloudformation используют переменные для карты dev или prod - это возможно?

Я вижу, что он поддерживает карты, но я не уверен, как добиться того, чего я хочу с ним: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/mappings-section-structure.html

Есть ли способ, которым я мог бы сделать все свои карты параметров и затем иметь один параметр для dev или prod, и когда я устанавливаю этот один параметр при развертывании облачной информации, используется свойство параметров dev или prod параметров?

Пример:

Parameters:
  env:
    Description: environment
    Type: String
    Default: dev

Mappings: 
  RegionMap: 
    dev: 
      HVM64: "ami-0ff8a91507f77f867"
      HVMG2: "ami-0a584ac55a7631c0c"
    prod: 
      HVM64: "ami-0bdb828fd58c52235"
      HVMG2: "ami-066ee5fd4a9ef77f1"
  DynamoTableName:
    dev: 'devtable'
    prod: 'prodtable'
  SomeOtherVar: ...

Resources: 
  myEC2Instance: 
    Type: "AWS::EC2::Instance"
    Properties: 
      ImageId: !FindInMap
        - RegionMap
        - !Ref env
        - HVM64
      InstanceType: m1.small

Ответы [ 2 ]

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

Если вам или кому-то еще нужен пример или немного другой подход.Я использую отдельные файлы конфигурации для разных сред, загружаю их динамически во время выполнения и заполняю значения параметров.

Если вы используете командную строку, следующий пример должен работать для заполнения параметров во время выполнения.

aws --region ${region} cloudformation create-stack --stack-name ${stack_name} -- template-body file://${CFT_DIR}/${process}-stack.json --parameters ParameterKey=${param1},ParameterValue=${value1} ParameterKey=${param2},ParameterValue=${value2} ParameterKey=${param3},ParameterValue=${value3} 

Все переменные могут быть заполнены на основе файла конфигурации, загруженного во время выполнения.

Если вы используете AWS java sdk, вы можете сделать то же самое с этим примером.

AmazonCloudFormation awsCFTClient = AmazonCloudFormationClientBuilder.defaultClient();

List<Parameter> listOfParameters = new ArrayList<Parameter>();
    listOfParameters.add(getParameter("param1", "value1"));
    listOfParameters.add(getParameter("param2", "value2"));

CreateStackRequest createStackRequest = new CreateStackRequest();
    createStackRequest.setStackName(stackName);
    createStackRequest.setTemplateURL(AWS_S3_URL + cftPath);
    createStackRequest.setParameters(listOfParameters);

awsCFTClient.createStack(createStackRequest);

Просто заполните значения параметров из файлов конфигурации и загрузите конфигурацию в зависимости от среды.

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

Да.Вы можете использовать параметры https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html

Здесь передается параметр с CLI.https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html

Вот как найти значение на карте.https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-findinmap.html

Это то, что вы хотите?

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