Nhiệm vụ tôi cần làm là CDN phải phụ thuộc vào nhóm S3, nhưng chúng tôi cũng có thể sử dụng nhóm hiện có thay vì tạo nhóm mới.CloudFormation, áp dụng Điều kiện trên DependsOn
Dưới đây là đoạn code mẫu mà tôi đang chiến đấu với:
"Parameters" : {
"UseExistingBucket" : {
"Description" : "Yes/No",
"Default" : "yes",
"Type" : "String",
"AllowedValues" : [ "yes", "no" ]
}
},
"Conditions" : {
"CreateS3Resources" : {"Fn::Equals" : [{"Ref" : "UseExistingBucket"}, "no"]}
},
"Resources" : {
"StaticBucket" : {
"Type" : "AWS::S3::Bucket",
"Condition" : "CreateS3Resources",
"Properties" : {
"BucketName" : { "Fn::Join": [ "-", [ "app", { "Ref": "EnvType" }, "static" ] ] }
},
"DeletionPolicy": "Retain"
},
"MyStaticDistribution": {
"Type": "AWS::CloudFront::Distribution",
"Properties": {
"DistributionConfig": {
"Origins": [
{
"DomainName": {
"Fn::If" : [
"CreateS3Resources",
{ "Fn::Join": [ "-", [ "app", { "Ref": "EnvType" }, "static" ] ] },
{"Fn::GetAtt": [ "StaticBucket", "DomainName" ] }
]
},
"Id": "S3Origin",
}
]
}
},
"DependsOn": [{
"Fn::If" : [
"CreateS3Resources",
{ "Fn::Join": [ "-", [ "app", { "Ref": "EnvType" }, "static" ] ] },
""
]
}]
}
}
Xin gợi ý cho tôi nhiều hơn bất kỳ chi tiết nếu cần thiết (ít nhất stackoverflow không muốn biết thêm chi tiết, nhưng không chỉ định bất kỳ :-P)
Có tài liệu ở đâu đó rằng nói rằng GetAtt sẽ tự động chờ đợi cho các nguồn lực khác được hoàn thành trước khi di chuyển về phía trước? – doeiqts
@doeiqts Câu hỏi hay. Thật không may là tôi đã không nhìn thấy nó tài liệu nhưng tôi tin tưởng điều này là đúng từ việc sử dụng nó trong ví dụ AWS, thực tế là tôi đã nhìn thấy nó làm việc nhiều lần, và từ các kỹ sư AWS hướng dẫn tôi làm theo cách này. Tôi đã thêm một ví dụ lambda từ AWS, trong đó họ trì hoãn việc tạo ra theo cách này. Nhưng có một số tài liệu chính thức sẽ được sạch hơn. –