俺のアウトプット

調べたこと、試したことを書きます

CloudFormationテンプレートをVisual Studio Codeで保存した時に自動検証する

テンプレートの検証

AWS-CLIのaws cloudformation validate-templateコマンドを使うと、テンプレート内容を検証できます。

ローカル上のテンプレートファイルを検証する場合は、--template-bodyオプションを使い、

aws cloudformation validate-template --template-body ファイルパス

テンプレートのファイルパスを指定して実行します。

試しに、形式バージョンの日付を間違えたYAMLファイルで検証してみます。(正しくは"2010-09-09")

error.template.yaml

AWSTemplateFormatVersion: "2018-09-09"
Resources:
  MyVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16

実行するとエラーが表示されます。

$ aws cloudformation validate-template --template-body file://error.template.yaml

An error occurred (ValidationError) when calling the ValidateTemplate operation: Template format error: 2018-09-09 is not a supported value forAWSTemplateFormatVersion.

Visual Studio Code

テンプレートを作成する時、皆さんはどんなエディタやIDEを使っていますか?
私は、見るだけならエディタで開くことが多いですが、書く場合は Visual Studio Code を利用することが多いです。

Visual Studio Codeには便利なプラグインがいくつも公開されており、テンプレート作成に役立つプラグインもあります。 今回はテンプレートファイルを保存した時に、自動で検証する方法をご紹介します。

Run on Save

Run on Saveプラグインを使用すると、ファイルを保存した時に特定のコマンドを実行できます。
プラグインをインストールしたら、Visual Studio Codeの設定(User Settings)でemeraldwalk.runonsave構成を追加します。

"emeraldwalk.runonsave": {
    "commands": [
        {
            "match": "\\.template.(json|yaml)$",
            "cmd": "aws cloudformation validate-template --template-body file://${file}"
        }
    ]
}

補足

  • commandsで複数の条件を設定可能です。今回は1つだけ設定しています。
  • matchでファイル名への正規表現を指定します。ファイル名が*.template.拡張子、拡張子がjsonまたはyamlを含むものを対象とします。
  • cmdで実行するコマンドを設定します。${file}で保存対象のファイルパスを取得できます。

Visual Studio Codeの出力ウィンドウを開き、リストボックスからRun On Saveを選択、テンプレートファイルを保存してみてください。 出力ウィンドウに結果が表示されます。

f:id:kitsugi:20180805115154p:plain

注意点として、コマンドが実行されるのは既存ファイルを保存した時です。新規にファイルを作成した時は実行されません。

まとめ

テンプレートを書きながら気軽に検証したい場合、IDEやエディタの機能をうまく活用すると便利です。 Visual Studio Codeはテンプレート用の入力補助プラグインがいくつかあるので、おススメのIDEです。

参考