2

その LaunchConfiguration を使用するAWS::AutoScaling::LaunchConfigurationとを含む CloudFormation テンプレートを作成しています。AWS::AutoScaling::AutoScalingGroup私のスタックでは、複数の AutoScalingGroups が必要になりますが、それらを別々のセキュリティ グループに入れたいと思っています。

CodeDeploy も使用するので、LaunchConfiguration には、CodeDeploy エージェントをインストールして実行するための Metadata プロパティと UserData プロパティが含まれています ( http://s3.amazonaws.com/aws-codedeploy-us-eastの 262 行目に示されているように)。 -1/templates/latest/CodeDeploy_SampleCF_Template.json )。AutoScalingGroup ではなく LaunchConfiguration でセキュリティ グループを指定する必要があるため、テンプレートには LaunchConfiguration の複数のコピーが必要で、1 行だけ違います。

長い Metadata および UserData セクションがテンプレートに表示される回数を減らす方法はありますか? マッピングを作成しようとしましたが、英数字しか使用できません。

4

2 に答える 2

2

手動で記述する代わりに、テンプレート JSON を作成するコードを記述します。その後、選択した言語で利用可能な抽象化を使用して、さまざまな LaunchConfiguration リソースを作成できます。

マップとベクトルをリテラルとして表現できる言語は、そうでない言語よりもかなり適しています。

たとえば、Clojure リテラル

{"Type" "AWS::AutoScaling::LaunchConfiguration"
 "Properties" {"KeyName" {"Ref" "KeyName"}
               "ImageId" {"Ref" "AMI"}}}

JSON文字列に自動的に変換できます

{"Type":"AWS::AutoScaling::LaunchConfiguration",
 "Properties":{"ImageId":{"Ref":"AMI"},
               "KeyName":{"Ref":"KeyName"}}}

(ただし、実際には、個々のリソースではなく、完全なテンプレートの JSON のみを作成します。)

その後、次のようなことができます

(defn launch-configuration
  [ami]
  {"Type" "AWS::AutoScaling::LaunchConfiguration"
   "Properties" {"KeyName" {"Ref" "KeyName"}
                 "ImageId" ami}})

(map launch-configuration ["ami1" "ami2" "ami3"])

複数の同様のリソースを作成します。

テンプレート JSON の手作りは、非常に小さなテンプレートの場合にのみ便利です。

于 2015-02-26T14:48:56.073 に答える