В чем разница между атрибутами CreationPolicy и DependsOn в CloudFormation? - PullRequest
0 голосов
/ 07 мая 2020

Может ли кто-нибудь объяснить разницу между атрибутами CreationPolicy и DependsOn в CloudFormation на простом для понимания примере?

Ответы [ 2 ]

3 голосов
/ 07 мая 2020

Их немного. Ключи:

  • CreationPolicy применяется только к трем ресурсам (AutoScalingGroup, Instance и WaitCondition), а DependsOn может использоваться на любом ресурсе .

  • Основная цель CreationPolicy - ждать «сигналов» от экземпляров. Когда вы создаете экземпляр с помощью CFN, вы можете добавить свои сценарии bootstrap в User Data. Например, установить несколько пакетов, настроить некоторые файлы конфигурации. CFN не проверяет успешность выполнения сценария bootstrap. Это проблема c, потому что ваш сценарий bootstrap может дать сбой , и вы не узнаете об этом слишком поздно. Чтобы решить эту проблему, вы можете добавить CreationPolicy к экземпляру, чтобы он ждал cfn-signal от экземпляра. При этом ваш bootstrap скрипт может сигнализировать CFN, что скрипт выполнен успешно.

  • Основная цель DependsOn - относительная упорядочение создания ресурса в CFN. По своей природе CFN пытается создавать ресурсы параллельно. Это может привести к проблемам, если, например, ваш экземпляр требует предварительного создания какого-либо другого ресурса (например, базы данных RDS). В этом случае вы можете указать CFN создать экземпляр только после успешного создания базы данных RDS.

2 голосов
/ 07 мая 2020

ПОЛИТИКА СОЗДАНИЯ:

Атрибут политики создания используется, когда вы хотите, чтобы ресурс не достиг состояния создания завершено до тех пор, пока ваша CFN не получит определенное количество сигналов или не будет превышен период тайм-аута. Обычно он используется, когда вы используете пользовательские данные для установки чего-либо в своем экземпляре EC2.

Чтобы сигнализировать о ресурсе, вы можете использовать вспомогательный скрипт cfn-signal или SignalResource API. AWS CloudFormation публикует действительные сигналы для событий стека, чтобы вы могли отслеживать количество отправленных сигналов.

В настоящее время единственными AWS ресурсами CloudFormation, которые поддерживают политики создания, являются

AWS::AutoScaling::AutoScalingGroup
AWS::EC2::Instance
AWS::CloudFormation::WaitCondition.

Например, если вы устанавливаете и настраиваете программные приложения в экземпляре EC2, вы можете захотеть, чтобы эти приложения работали, прежде чем продолжить. В таких случаях вы можете добавить атрибут CreationPolicy к экземпляру, а затем отправить сигнал успеха экземпляру после установки и настройки приложений.

В приведенном ниже примере не будет создано автоматическое масштабирование ресурса, пока он не получит 3 сигналы от cfn-signal.

"AutoScalingGroup": {
  "Type": "AWS::AutoScaling::AutoScalingGroup",
  "Properties": {
    "AvailabilityZones": { "Fn::GetAZs": "" },
    "LaunchConfigurationName": { "Ref": "LaunchConfig" },
    "DesiredCapacity": "3",
    "MinSize": "1",
    "MaxSize": "4"
  },
  "CreationPolicy": {
    "ResourceSignal": {
      "Count": "3",
      "Timeout": "PT15M"
    }
  }
 }
},
"LaunchConfig": {
  "Type": "AWS::AutoScaling::LaunchConfiguration",
  "Properties": {
    "ImageId": "ami-16d18a7e",
    "InstanceType": "t2.micro",
    "UserData": {
      "Fn::Base64": {
        "Fn::Join" : [ "", [
          "#!/bin/bash -xe\n",
          "yum install -y aws-cfn-bootstrap\n",
          "/opt/aws/bin/cfn-signal -e 0 --stack ", { "Ref": "AWS::StackName" },
          " --resource AutoScalingGroup ",
          " --region ", { "Ref" : "AWS::Region" }, "\n"
        ] ]
      }
    }
  }
}

ЗАВИСИТ ОТ

С помощью атрибута DependsOn вы можете указать, что создание определенного ресурса c следует за другим. Когда вы добавляете атрибут DependsOn к ресурсу, этот ресурс создается только после создания ресурса, указанного в атрибуте DependsOn.

Это можно использовать:

  1. Когда вы хотите для объявления зависимостей для ресурсов, которые будут созданы или удалены в указанном c порядке.
  2. Переопределить параллелизм по умолчанию.
...