1. ホーム
  2. amazon-web-services

[解決済み] クラウド形成リソース作成における複数条件

2022-02-10 04:12:06

質問事項

プラットフォーム条件を使って、AWSでスピンアップされる環境の種類を制御しています。共有リソースはたくさんあるが、いくつかの条件によってプリベイクされたAMIを持つ特定のEC2インスタンスが必要だ。

"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"
},

そして conditions .

"Conditions" : {
  "LinuxPlatform" : {"Fn::Equals" : [{"Ref" : "Platform"}, "linux"]},
  "WindowsPlatform" : {"Fn::Equals" : [{"Ref" : "Platform"}, "windows"]},
  "BothPlatform" : {"Fn::Equals" : [{"Ref" : "Platform"}, "both"]}
},

リソースで、linuxかwindowsのどちらかを使ってWindowsかLinuxのEc2作成をトリガーするか、両方を使って宣言されたすべてのec2リソースをデプロイしたいのですが、どうすればいいですか?

を使って以下のように試してみました。 fn:or をいくつか使っています。

"Fn::Or": [{"Condition": "LinuxPlatform"}, {"Condition": "BothPlatform" }],

そして...

"Condition" : {
   "Fn::Or" : [
      {"Condition" : "LinuxPlatform"},
      {"Condition" : "BothPlatform"}
   ]
}

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.

リソース作成を制御するために、複数の条件を評価することは可能でしょうか?もし可能でなければ、何か代替案はありますか?

解決方法は?

を追加してみてください。

"MyCondition": {"Fn::Or": [{"Condition": "LinuxPlatform"}, {"Condition": "BothPlatform" }]}

の下にある Conditions というように

    "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" }]}
    },