Cloudformation "CreationPolicy" 属性无效
Cloudformation "CreationPolicy" attribute not working
我在 AWS 网站上找到了一份关于如何在第二个实例开始出现之前完全启动和配置一个实例的精彩文档。它位于 https://aws.amazon.com/blogs/devops/tag/cloudformation/page/2/
文档使用 CreationPolicy 属性和 cfn-signal 通知 AWS Cloudformation Instance1 已经启动。我试过代码。它运行。但问题是 Instance2 先出现,而不是等待 Instance1 出现。这是代码,我附上了实例出现时的屏幕截图。
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "EC2 Head Node Instance ",
"Resources": {
"EC2Instance1": {
"Type": "AWS::EC2::Instance",
"CreationPolicy" : {
"ResourceSignal" : {
"Timeout": "PT10M",
"Count" : "1"
}
},
"Properties": {
"ImageId": "ami-3723c04f",
"UserData":{
"Fn::Base64":{
"Fn::Join": ["", [
"<script>\n",
"cfn-signal.exe -e 0 ",
" --stack ", {"Ref" : "AWS::StackName"},
" --resource EC2Instance1",
" --region ", {"Ref" : "AWS::Region"}, "\n" ,
"</script>\n"
]
]
}
},
"Tags" : [
{"Key" : "Name", "Value" : "QRM Head Node"}
]
}
},
"EC2Instance2": {
"Type": "AWS::EC2::Instance",
"Properties": {
"ImageId": "ami-3723c04f",
"Tags" : [{"Key" : "Dependency", "Value" : "EC2Instance1"}
]
}
}
}
}
您必须指定 DependsOn 属性。
"EC2Instance2": {
"DependsOn": "EC2Instance1",
"Type": "AWS::EC2::Instance",
"Properties": {
"ImageId": "ami-3723c04f",
"Tags" : [{"Key" : "Dependency", "Value" : "EC2Instance1"}
]
}
}
以上代码段应该可以解决您的问题。
Edit-1 : cfn-signal + DependsOn
创建一个 cfn-signal 以在 Ec2Instance1 上完成安装后发送信号。请参考cfn-signal documentation.
现在,创建一个 AWS::CloudFormation::WaitCondition
并在 Ec2Instance2 中引用它。这是有关如何在模板中集成 WaitConditions 的文档 cfn-wait-condition.
我在 AWS 网站上找到了一份关于如何在第二个实例开始出现之前完全启动和配置一个实例的精彩文档。它位于 https://aws.amazon.com/blogs/devops/tag/cloudformation/page/2/
文档使用 CreationPolicy 属性和 cfn-signal 通知 AWS Cloudformation Instance1 已经启动。我试过代码。它运行。但问题是 Instance2 先出现,而不是等待 Instance1 出现。这是代码,我附上了实例出现时的屏幕截图。
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "EC2 Head Node Instance ",
"Resources": {
"EC2Instance1": {
"Type": "AWS::EC2::Instance",
"CreationPolicy" : {
"ResourceSignal" : {
"Timeout": "PT10M",
"Count" : "1"
}
},
"Properties": {
"ImageId": "ami-3723c04f",
"UserData":{
"Fn::Base64":{
"Fn::Join": ["", [
"<script>\n",
"cfn-signal.exe -e 0 ",
" --stack ", {"Ref" : "AWS::StackName"},
" --resource EC2Instance1",
" --region ", {"Ref" : "AWS::Region"}, "\n" ,
"</script>\n"
]
]
}
},
"Tags" : [
{"Key" : "Name", "Value" : "QRM Head Node"}
]
}
},
"EC2Instance2": {
"Type": "AWS::EC2::Instance",
"Properties": {
"ImageId": "ami-3723c04f",
"Tags" : [{"Key" : "Dependency", "Value" : "EC2Instance1"}
]
}
}
}
您必须指定 DependsOn 属性。
"EC2Instance2": {
"DependsOn": "EC2Instance1",
"Type": "AWS::EC2::Instance",
"Properties": {
"ImageId": "ami-3723c04f",
"Tags" : [{"Key" : "Dependency", "Value" : "EC2Instance1"}
]
}
}
以上代码段应该可以解决您的问题。
Edit-1 : cfn-signal + DependsOn
创建一个 cfn-signal 以在 Ec2Instance1 上完成安装后发送信号。请参考cfn-signal documentation.
现在,创建一个 AWS::CloudFormation::WaitCondition
并在 Ec2Instance2 中引用它。这是有关如何在模板中集成 WaitConditions 的文档 cfn-wait-condition.