Как создать переменное количество ресурсов экземпляра EC2 в шаблоне Cloudformation?

Много раз вновь прибывшие к Lisp хотят "избавиться от всей круглой скобки". Это длится в течение нескольких недель. Никакой проект создать серьезный синтаксис программирования общей цели сверху обычного синтаксического анализатора S-выражения никогда не добирается нигде, потому что программисты неизменно волнуют предпочтение, что Вы в настоящее время чувствуете как "ад круглой скобки". Требуется немного привыкающее к, но не очень! Как только Вы действительно привыкаете к нему, и можно действительно ценить пластичность синтаксиса по умолчанию, возвращаясь к языкам, где существует только один способ выразить какую-то конкретную конструкцию программирования, действительно скрипуче.

Однако Lisp является превосходной подложкой для создания Предметно-ориентированных языков. Столь же хороший как, если не лучше, чем, XML.

Удачи!

27
задан ekillaby 23 May 2013 в 18:34
поделиться

2 ответа

Короткий ответ: ты не можешь. Вы не можете получить точно такой же результат (N идентичных экземпляров EC2, не связанных группой автоматического масштабирования).

Запуск нескольких экземпляров из консоли не похож на создание группы автоматического масштабирования с N экземплярами в качестве требуемой емкости. Это просто полезный ярлык, вместо того, чтобы N раз проходить один и тот же процесс создания EC2. Это называется «резервирование» (никакого отношения к зарезервированному экземпляру). Группы автоматического масштабирования - это разные звери (даже если у вас N идентичных экземпляров EC2).

Вы можете либо:

  • дублировать (юк) ресурс EC2 в шаблоне
  • использовать вложенный шаблон, который будет сам создавать EC2, и вызывать его N раз из вашего основного стека, передавая его каждый раз с одними и теми же параметрами

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

  • используют внешний интерфейс для шаблонов CloudFormation, таких как тропосфера, который позволяет вам писать описание EC2 внутри функции и вызывать функцию N раз (мой выбор сейчас). В конце концов, у вас есть шаблон CloudFormation, который выполняет эту работу, но вы написали код создания EC2 только один раз. Это не реальный параметр CloudFormation, но в конце дня вы получите свой динамический номер EC2.
5
ответ дан 28 November 2019 в 05:15
поделиться

Используйте функцию Ref.

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html

Определяемые пользователем переменные определяются в "Parameters" Раздел файла конфигурации. В разделе "Resources" файла конфигурации вы можете заполнить значения, используя ссылки на эти параметры.

{
    "AWSTemplateFormatVersion": "2010-09-09",
    ...
    "Parameters": {
        "MinNumInstances": {
            "Type": "Number",
            "Description": "Minimum number of instances to run.",
            "Default": "1",
            "ConstraintDescription": "Must be an integer less than MaxNumInstances."
        },
        "MaxNumInstances": {
            "Type": "Number",
            "Description": "Maximum number of instances to run.",
            "Default": "5",
            "ConstraintDescription": "Must be an integer greater than MinNumInstances."
        },
        "DesiredNumInstances": {
            "Type": "Number",
            "Description": "Number of instances that need to be running before creation is marked as complete in CloudFormation management console.",
            "Default": "1",
            "ConstraintDescription": "Must be an integer in the range specified by MinNumInstances..MaxNumInstances."
        }
    },
    "Resources": {
        "MyAutoScalingGroup": {
            "Type": "AWS::AutoScaling::AutoScalingGroup",
            "Properties": {
                ...
                "MinSize": { "Ref": "MinNumInstances" },
                "MaxSize": { "Ref": "MaxNumInstances" },
                "DesiredCapacity": { "Ref": "DesiredNumInstances" },
                ...
            },
        },
        ...
    },
    ...
}

В приведенном выше примере { "Ref": ... } используется для заполнения значений в шаблоне. В этом случае мы предоставляем целые числа в качестве значений для "MinSize" и "MaxSize".

2
ответ дан 28 November 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: