web-dev-qa-db-ja.com

クラウド形成リソースの作成における複数の条件

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.

リソースの作成を制御するために複数の条件を評価することは可能ですか?そうでない場合、私が試すことができる選択肢はありますか?

13
Joe Gardiner

追加してみてください

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

YAML形式の異なるシナリオで同じものを探していました。以下は参照用のYAML形式です。

CreateResources: !Or [!Equals [!Ref "Environment", prod], !Equals [!Ref "Environment", dev], !Equals [!Ref "Environment", preprod], !Equals [!Ref "Environment", test]]
2
mahendra rathod