web-dev-qa-db-ja.com

AWS Cloudformation jsonテンプレートの「パラメーター」で「Fn :: Join」を使用できますか

Cloudformation jsonテンプレートのパラメーターで、いくつかのPolicy/Loadbalancersタグ名のショートカットを使用したいと思います。

"SomeScalingGroupName": {
            "Type": "String",
            "Default": {"Fn::Join": ["", ["Process-", {"Ref": "Env"}, "-Some-Worker-Name"]]}
        },

そして私はエラーになります:

テンプレート検証エラー:テンプレート形式エラー:すべてのデフォルトメンバーは文字列でなければなりません。

パラメータで関数結合を使用する適切な方法かどうか私の質問ですか?それとも他に方法がありますか?それとも、それを使用するためのより良い提案がありますか?

ありがとう!

14
muzafarow

テンプレートのパラメーターセクション内で組み込み関数を使用することはできません。

組み込み関数は、テンプレートの特定の部分でのみ使用できます。現在、リソースプロパティ、メタデータ属性、および更新ポリシー属性で組み込み関数を使用できます。

http://docs.aws.Amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html

リソースのプロパティ内でこの関数を使用する必要があります。例えば:

"Parameters" : {
  "Env" : {
    "Type" : "String",
    "Default" : "test"
  },
  "WorkerName" : {
    "Type" : "String",
    "Default" : "my-worker"
  }
}

"Resources" : {
  "LoadBalancer" : {
    "Type" : "AWS::ElasticLoadBalancing::LoadBalancer",
    ...
    "Properties" : {
      "Tags" : [ 
        { "Key" : "Name", "Value": { "Fn::Join" : [ "-", [ "process", { "Ref" : "Env" }, { "Ref" : "SomeWorkerName" }]]}},
      ]
    }
  }
}

これにより、「名前」タグがロードバランサーに適用され、値は「process-test-my-worker」になります。リソースのプロパティ内の他の場所でも同じ関数を使用できます。

17
Jason