Amazon web services 什么';CreationPolicy和DependsOn属性在CloudFormation中的区别是什么?

Amazon web services 什么';CreationPolicy和DependsOn属性在CloudFormation中的区别是什么?,amazon-web-services,amazon-cloudformation,Amazon Web Services,Amazon Cloudformation,有人能用一个简单易懂的例子解释一下CloudFormation中CreationPolicy和DependsOn属性之间的区别吗?几乎没有。关键是: 仅适用于三个资源(AutoScalingGroup、Instance和WaitCondition),而可用于任何资源 CreationPolicy的主要目的是等待实例发出的“信号”。使用CFN创建实例时,可以将引导脚本添加到用户数据中。例如,安装一些软件包,设置一些配置文件。CFN不检查引导脚本是否成功执行。这是有问题的,因为您的引导脚本可能会失

有人能用一个简单易懂的例子解释一下CloudFormation中CreationPolicy和DependsOn属性之间的区别吗?

几乎没有。关键是:

  • 仅适用于三个资源(AutoScalingGroup、Instance和WaitCondition),而可用于任何资源

  • CreationPolicy
    的主要目的是等待实例发出的“信号”。使用CFN创建实例时,可以将引导脚本添加到用户数据中。例如,安装一些软件包,设置一些配置文件。CFN不检查引导脚本是否成功执行。这是有问题的,因为您的引导脚本可能会失败,而您要等到太晚才知道这一点。要解决此问题,可以将
    CreationPolicy
    添加到实例中,以便它等待来自实例的消息。这样,引导脚本就可以向CFN发出信号,表明脚本执行成功

  • DependsOn
    的主要目的是相对排序CFN中的资源创建。就其性质而言,CFN试图并行地创建资源。这可能会导致问题,例如,如果您的实例需要事先创建其他资源(例如RDS数据库)。在这种情况下,您可以告诉CFN只有在成功创建RDS数据库后才能创建实例


    • 几乎没有。关键是:

      • 仅适用于三个资源(AutoScalingGroup、Instance和WaitCondition),而可用于任何资源

      • CreationPolicy
        的主要目的是等待实例发出的“信号”。使用CFN创建实例时,可以将引导脚本添加到用户数据中。例如,安装一些软件包,设置一些配置文件。CFN不检查引导脚本是否成功执行。这是有问题的,因为您的引导脚本可能会失败,而您要等到太晚才知道这一点。要解决此问题,可以将
        CreationPolicy
        添加到实例中,以便它等待来自实例的消息。这样,引导脚本就可以向CFN发出信号,表明脚本执行成功

      • DependsOn
        的主要目的是相对排序CFN中的资源创建。就其性质而言,CFN试图并行地创建资源。这可能会导致问题,例如,如果您的实例需要事先创建其他资源(例如RDS数据库)。在这种情况下,您可以告诉CFN只有在成功创建RDS数据库后才能创建实例

      创建策略:

      创建策略属性用于在您的CFN收到一定数量的信号或超过超时时间之前,您希望资源阻止其状态达到“创建完成”状态。通常在使用userdata在EC2实例上安装某些东西时使用它

      要向资源发送信号,可以使用cfn信号助手脚本或信号资源API。AWS CloudFormation将有效信号发布到堆栈事件,以便跟踪发送的信号数量

      目前,唯一支持创建策略的AWS CloudFormation资源是

      AWS::AutoScaling::AutoScalingGroup
      AWS::EC2::Instance
      AWS::CloudFormation::WaitCondition.
      
      例如,如果在EC2实例上安装和配置软件应用程序,则可能希望这些应用程序在继续之前运行。在这种情况下,您可以向实例添加CreationPolicy属性,然后在安装和配置应用程序后向实例发送成功信号

      下面的示例在从cfn信号接收到3个信号之前不会创建资源自动缩放

      "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属性,可以指定特定资源的创建遵循另一个资源的创建。将DependsOn属性添加到资源时,仅在创建DependsOn属性中指定的资源后才创建该资源

      这可用于:

    • 当您要为要按特定顺序创建或删除的资源声明依赖项时
    • 覆盖默认并行性 创建策略:

      创建策略属性用于在您的CFN收到一定数量的信号或超过超时时间之前,您希望资源阻止其状态达到“创建完成”状态。通常在使用userdata在EC2实例上安装某些东西时使用它

      要向资源发送信号,可以使用cfn信号助手脚本或信号资源API。AWS CloudFormation将有效信号发布到堆栈事件,以便跟踪发送的信号数量

      目前,唯一支持创建策略的AWS CloudFormation资源是

      AWS::AutoScaling::AutoScalingGroup
      AWS::EC2::Instance
      AWS::CloudFormation::WaitCondition.
      
      例如,如果在EC2实例上安装和配置软件应用程序,则可能希望这些应用程序在继续之前运行。在这种情况下,您可以向实例添加CreationPolicy属性,然后在安装和配置应用程序后向实例发送成功信号

      下面的示例在从cfn信号接收到3个信号之前不会创建资源自动缩放

      "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属性,可以指定特定资源的创建遵循另一个资源的创建。将DependsOn属性添加到资源时,仅在创建DependsOn属性中指定的资源后才创建该资源

      这可用于:

    • 当您要为要按特定顺序创建或删除的资源声明依赖项时
    • 覆盖默认并行性