share facebook facebook twitter menu hatena pocket slack

2018.08.20 MON

JSON Schema で快適に CloudFormation テンプレートを書く

WRITTEN BY 山口 与力

cloudpack あら便利カレンダー 2018の記事です。

tl;dr

CloudFormation テンプレート用の JSON Schema を作ったので、これを使って CFn テンプレートを書いてみてほしいです。

y13i/cfn-schema: JSON Schema for AWS CloudFormation templates.

CloudFormation って

テンプレートを書いてる時間の大半がリファレンス読みだと感じていて、

  • アレを作るにはどのリソースタイプを使ったらいいのか
  • アレを設定するにはどのプロパティを使ったらいいのか

というのを調べる時間がほとんどだと思うんですね。

で、いざ書いたので実行してみようとするとどこか間違ってて蹴られたり。もうちょっとエディタで書いてる段階で補助がほしい。

JSON Schema って

Understanding JSON Schema — Understanding JSON Schema 1.0 documentation

が一番わかりやすいと思います。要は JSON で表現できるデータに対する、 JSON で表現された型定義です。

型定義があることで、あるデータがその型にちゃんと合っているかを検証すること(Validation)ができます。

複雑な条件に対する記法もかなり充実しているので、 CloudFormation テンプレートのような特定形式のオブジェクトを使った関数表現なども定義することが可能です。

なぜ作った

同様の試みは何件か既存のものを見つけたのですが、 Fn:: 関数への対応がイマイチだったり、メンテされてなかったり、一度 clone して手元でビルドしないといけなくて面倒だったりするので自作しました。

使い方

Visual Studio Code で使うのが一番簡単だと思います。

GitHub Pages に JSON Schema を置いてあるので、 Ctrl/⌘ + , でプロジェクトの設定を開き、

.vscode/settings.json

{
"json.schemas": [
{
"fileMatch": ["*.cfn.json"],
"url": "https://y13i.github.io/cfn-schema/us-west-2.min.json"
}
]
}

という感じで JSON Schema を使う設定をしてあげればおわりです。

この場合は .cfn.json で終わる名前のファイルに対して https://y13i.github.io/cfn-schema/us-west-2.min.json を適用するという設定になります。 us-west-2 の部分はお使いの AWS リージョンに合わせて設定してください。

あとは foobar.cfn.json などのファイルでテンプレートを書き始めることができます。プロパティ名の補完や、プロパティにマウスオーバーしたときのツールチップ表示、正しくない指定に対するエラーなどが確認できると思います。

YAML で使う場合は VSCode 本体でのサポートはまだない(as of 2018-07)ので、 Redhat が作っている拡張を使いましょう。オプションの指定方法が JSON の場合とちょっと違うので注意。

どうやって作った?

Fn:: 関数などを含むベースの JSON Schema は、手動でがんばって書きました。

各リソースの定義は流石に数が多すぎて人類には無理です。しかし、 AWS が独自フォーマットの定義を公開しています。これを拾ってきてパースしてベーススキーマに足すスクリプトを JavaScript で書きました。

元記事はこちら

JSON Schema で快適に CloudFormation テンプレートを書く

山口 与力

最近うどんばかり食べてる蕎麦県民

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。