InteliJ IDEAのCloudFormationプラグインを使ってみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

サーバーレス開発部の阿部です。

私たちの開発ではCloudFormationをよく使います。非常に便利ではあるのですが、リソースごとに必須プロパティを覚えたり、Typoに悩まされたり、参照がよくわからなくなったり、ある程度の規模以上になるととにかくまともにデプロイできるものを作るまでの辛さというのも同時に感じます。私も書くたびにAWSの公式リファレンスを参照して迷いながら書いています。

そんな中、前職同僚からIntelliJ IDEAのAWS CloudFormationプラグインの存在を教えてもらったので早速使ってみることにしました。

インストール

プラグインブラウザで"CloudFormation"を探してみましょう。私が使っているCommunity Editionでもインストール可能です。PyCharmなど他のIntelliJ IDE群ではどうなっているかはご確認ください。

プラグインのインストール

プラグインの説明を少し読んでみましょう。jsonとyamlの両ファイルフォーマットに対応していて以下の機能があるようです。

  • Template validation
    • Overall file structure
    • References to resources, conditions, parameters, mappings
    • Resource types and properties
  • File structure (aka Go to member) (Ctrl-F12 on Windows): fast jump to any entity in the file
  • Completion in Ref clause
  • Completion of resources types and properties
  • Live template for Ref clause: type "ref" and press Tab
  • Ctrl-Click on any reference to jump to its definition
  • Quick Documentation for resource types and properties
  • Format file

テンプレートのバリデーションやコード補完、コードジャンプをしてくれるようです。IntelliJ IDEAのコード補完やコードジャンプの機能は強力なので、これに乗っかっていければ非常に便利に書けそうです。

CloudFormationテンプレートのチェック

以下のファイルの作成を通じてプラグインの使用感を確認してみましょう。


AWSTemplateFormatVersion: '2010-09-09'
  Resources:
    FirstVPC:
      Type: AWS::EC2::VPC
      Properties:
        CidrBlock: 10.0.0.0/16
    SubnetTrustAZ1:
      Type: AWS::EC2::Subnet
      Properties:
        CidrBlock: 10.0.0.0/24
        VpcId: !Ref FirstVPC

まず、CloudFormationのファイルなのかどうかのチェックですが、"AWSTemplateFormatVersion"があるかどうかで判断しているようです。"AWSTemplateFormatVersion"を書くとバリデーションがかかるようになります。

ちなみに、"AWSTemplateFormatVersion"の値を適当に変えてみると以下のようになります。

リソースのチェック

次にリソースを追加してみましょう。"FirstVPC"という名前のリソースを追加してみます。

リソースには"Type"属性が必要なようです。VPCを追加したいと思います。

リソースタイプにコード補完が効きます。IntelliJ IDEAの強力なコード補完に乗っかれるので、非常に探しやすいです。例えば上画像の状態からVPとタイプすると、VPC関連のリソースが主に絞り込まれます。

Ref句の補完

サブネットを追加してVPCへの参照を追加してみましょう。

"!Ref"の対象リソースのコード補完ですでに記載済みリソースが対象になっています。なお、ファイル内のリソースへの参照であれば、「Command + Click(Mac)」でコードジャンプも可能です。

SAMテンプレートを書いてみる

では、SAM(Serverless Application Model)テンプレートはどうでしょうか?以下のようなファイルを書いてみたいと思います。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  FunctionName:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs6.10
      CodeUri: s3://bucketname/codepckage.zip

リソースタイプでも対応しているようです。バリデーションも以下のようにチェックされます。

まとめ

全ての機能を網羅したわけではありませんが、IntelliJ IDEAのCloudFormationプラグインをご紹介しました。

IDEのコード補完やバリデーションチェック、コードジャンプの機能を使いながら書けるというのは非常に楽だな、と感じます。特に属性名が長いものや、使い慣れていないリソースタイプについてはTypoしやすかったりすることがあるので、バリデーションチェックやコード補完でのサポートがあるのは非常に嬉しいことです。

サードパーティ製のプラグインである以上、新しいバージョンやリソース、属性への追随にタイムラグがあったり、バリデーションチェックがAWSの仕様と異なる部分というのが出てくる可能性があります。そのため、依存しきることはできませんが、それでも参考するには十分な支援のあるプラグインだと思いました。