awscli(Python版)でCloudFormationテンプレートをValidateする
ども、大瀧です。
きづきあきら+サトウナンキ先生の作品が好きなんですが、バター猫のパラドクス 1巻を買ったのに積み漫画になってて全然読めていないのが悔しい今日この頃です。至急キャッチアップせねば!
今回は子ネタです!!AWS CloudFormation Command Line Interface(Java版)には、テンプレートファイルの文法をチェックをしてくれるcfn-validate-templateコマンドがあります。これをawscli(Python版)でやろうとするとちょっと面倒なので、そのやり方のご紹介です。
awscli(Python版)のCloudFormation Validate Template
はい、awscli(Python版)にも、CloudFormation Validate Templateは実装されています。しかし、ローカルファイルをチェックする--template-fileオプションがないんです。(えー)
helpオプションの結果は、以下です。
$ aws cloudformation validate-template help VALIDATE-TEMPLATE() VALIDATE-TEMPLATE() NAME validate-template - DESCRIPTION Validates a specified template. SYNOPSIS aws cloudformation validate-template [--template-body <value>] [--template-url <value>] REQUIRED PARAMETERS None OPTIONAL PARAMETERS --template-body (string) String containing the template body. (For more information, go to the AWS CloudFormation User Guide .) Conditional: You must pass --template-url or --template-body . If both are passed, only --template-body is used. --template-url (string) Location of file containing the template body. The URL must point to a template (max size: 307,200 bytes) located in an S3 bucket in the same region as the stack. For more information, go to the AWS CloudFormation User Guide . Conditional: You must pass --template-url or --template-body . If both are passed, only --template-body is used. VALIDATE-TEMPLATE() $
--template-urlオプションは、従来のコマンドと同様、テンプレートを配置したS3のURLを指定するものなので、--template-bodyオプションを使います。
--template-bodyオプションの使い方
bodyということなので、引数にJSON文字列を直接突っ込むわけですが、今回はあらかじめ作ったテンプレートファイルを読み込ませたいので、工夫が必要です。
以下のようにxargsコマンドを駆使して、動かすことができました!(チェックの結果、エラーなしの場合はParameter一覧が出力されます)
$ cat XXXX.template | xargs -0 aws cloudformation validate-template --template-body { "ResponseMetadata": { "RequestId": "708c5633-c909-11e2-a893-ff22ce8e0bbf" }, "Description": "sample CloudFormation Template.", "Parameters": [ { "NoEcho": false, "Description": "Parameter 1", "ParameterKey": "parameter1" }, { "NoEcho": false, "Description": "Parameter 2", "ParameterKey": "parameter2" } ], "Capabilities": [] }
ポイントは、xargsコマンドの-0オプションです。xargsコマンドは標準入力を改行、スペース区切りで引数のコマンドに複数のパラメータとして渡してしまうので、今回のようにaws cloudformation validate-templateコマンドに1つのパラメータで渡すようにしています。
Python版awscliを使う機会は徐々に増えてくると思うので、ちょっとした情報として役立てられれば幸いです。