问题描述
我正在尝试使用 IAMInstanceprofile 的可选值创建 EC2 实例。 当 createiam 为 False 时,我希望 ec2stack 在没有 iam 的情况下创建,当它为 True 时,它应该等待 iamstack 并使用它的值。
"Parameters": {
"createiam" : {
"Type" : "String","Default" : "False"
}
},"Conditions" : {
"Create_iam" : {"Fn::Equals" : [{"Ref" : "createiam"},"True"]}
},"Resources" : {
"iamstack" : {
"Type" : "AWS::CloudFormation::Stack","Condition": "Create_iam"
},"ec2stack": {
"Type" : "AWS::CloudFormation::Stack","DependsOn" : "iamstack"
}
}
在为 crateiam 使用选项 False 运行堆栈时,出现错误,提示未找到 iamstack 资源。有没有办法为 Dependson 值添加条件?
解决方法
有没有办法为 Dependson 值添加条件? -> 是的,有。
在此示例 (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html) 中,它起作用了。
AWSTemplateFormatVersion: 2010-09-09
Parameters:
EnvType:
Description: Environment type.
Default: test
Type: String
AllowedValues:
- prod
- test
ConstraintDescription: must specify prod or test.
Conditions:
CreateProdResources: !Equals
- !Ref EnvType
- prod
Resources:
EC2Instance:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: ami-05b891753d41ff88f #ami-0ff8a91507f77f867
MountPoint:
Type: 'AWS::EC2::VolumeAttachment'
Condition: CreateProdResources
Properties:
InstanceId: !Ref EC2Instance
VolumeId: !Ref NewVolume
Device: /dev/sdh
NewVolume:
Type: 'AWS::EC2::Volume'
Condition: CreateProdResources
Properties:
Size: 11
AvailabilityZone: !GetAtt
- EC2Instance
- AvailabilityZone
Bucket:
Type: 'AWS::S3::Bucket'
Condition: CreateProdResources
DependsOn: MountPoint
就您而言,您需要分享您的完整代码。
,我可以使用 WaitConditionHandle 来实现这一点。
在此处找到参考资料。
现在的代码流程:
"Parameters": {
"createiam" : {
"Type" : "String","Default" : "False"
}
},"Conditions" : {
"Create_iam" : {"Fn::Equals" : [{"Ref" : "createiam"},"True"]}
},"Resources" : {
"IAMWaithandle": {
"Condition": "Create_iam","DependsOn": "iamstack","Type": "AWS::CloudFormation::WaitConditionHandle"
},"WaitHandle": {
"Type": "AWS::CloudFormation::WaitConditionHandle"
},"IAMWaitcondiftion": {
"Type": "AWS::CloudFormation::WaitCondition","Properties": {
"Handle": {
"Fn::If": [
"Create_iam",{
"Ref": "IAMWaithandle"
},{
"Ref": "WaitHandle"
}
]
},"Timeout": "1","Count": 0
}
},"iamstack" : {
"Type" : "AWS::CloudFormation::Stack","Condition": "Create_iam"
},"ec2stack": {
"Type" : "AWS::CloudFormation::Stack","DependsOn" : "IAMWaitcondiftion"
}
}