Zadanie, które należy zrobić, to CDN powinien zależeć od zasobnika S3, ale możemy również użyć istniejącego wiadra zamiast tworzyć nowy.CloudFormation, Apply Condition on DependsOn
Oto przykładowy kod, że walczę z:
"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" ] ] },
""
]
}]
}
}
Proszę zasugerować mi żadnych więcej szczegółów w razie potrzeby (conajmniej stackoverflow nie chce więcej szczegółów, ale nie podając żadnych :-P)
Czy istnieje dokumentacja gdzieś, że mówi, że GetAtt automatycznie czekać na zakończenie drugiego zasobu przed przejściem do przodu? – doeiqts
@doeiqts Dobre pytanie. Niestety nie widziałem tego udokumentowanego, ale jestem przekonany, że jest to prawdą od jego wykorzystania w przykładach AWS, tego, że widziałem to już wiele razy, oraz od inżynierów AWS, którzy pouczają mnie, że robię to w ten sposób. Dodałem przykład lambda z AWS, w którym opóźniają tworzenie w ten sposób. Ale tak, oficjalna dokumentacja byłaby czystsza. –