J'utilise une condition de plate-forme pour contrôler le type d'environnement généré sur AWS. Il y a beaucoup de ressources partagées, mais j'ai besoin de certaines instances EC2 avec des AMI précuites en fonction de certaines conditions.
"Parameters": {
"Platform": {
"Description": "Select platform type - linux or windows",
"Default": "linux",
"Type": "String",
"AllowedValues": [ "linux", "windows", "both" ],
"ConstraintDescription": "Must enter either linux, windows, or both"
},
Ensuite, j'ai défini le conditions
.
"Conditions" : {
"LinuxPlatform" : {"Fn::Equals" : [{"Ref" : "Platform"}, "linux"]},
"WindowsPlatform" : {"Fn::Equals" : [{"Ref" : "Platform"}, "windows"]},
"BothPlatform" : {"Fn::Equals" : [{"Ref" : "Platform"}, "both"]}
},
Dans une ressource, j'aimerais utiliser Linux ou Windows pour déclencher une création Windows ou Linux Ec2, ou utiliser les deux pour déployer chaque ressource ec2 déclarée.
J'ai essayé ce qui suit en utilisant fn:or
de plusieurs façons.
"Fn::Or": [{"Condition": "LinuxPlatform"}, {"Condition": "BothPlatform" }],
et...
"Condition" : {
"Fn::Or" : [
{"Condition" : "LinuxPlatform"},
{"Condition" : "BothPlatform"}
]
}
Je reçois toujours l'erreur suivante lorsque j'essaie de déployer et de valider à l'aide du aws cli.
aws cloudformation validate-template --template-body file://./cloudformation/deploy.json
A client error (ValidationError) occurred when calling the ValidateTemplate operation: Template format error: Every Condition member must be a string.
Est-il possible d'évaluer plusieurs conditions pour contrôler la création de ressources? Sinon, existe-t-il des alternatives que je pourrais essayer?
Essayez d'ajouter
"MyCondition": {"Fn::Or": [{"Condition": "LinuxPlatform"}, {"Condition": "BothPlatform" }]}
au bas de votre Conditions
comme ça:
"Conditions" : {
"LinuxPlatform" : {"Fn::Equals" : [{"Ref" : "Platform"}, "linux"]},
"WindowsPlatform" : {"Fn::Equals" : [{"Ref" : "Platform"}, "windows"]},
"BothPlatform" : {"Fn::Equals" : [{"Ref" : "Platform"}, "both"]},
"MyCondition": {"Fn::Or": [{"Condition": "LinuxPlatform"}, {"Condition": "BothPlatform" }]}
},
Je cherchais la même chose avec différents scénarios au format YAML. Voici le format YAML pour la référence.
CreateResources: !Or [!Equals [!Ref "Environment", prod], !Equals [!Ref "Environment", dev], !Equals [!Ref "Environment", preprod], !Equals [!Ref "Environment", test]]