#はじめに#
CloudFormation テンプレートを作成する際に、一から作成するのではなく、
- 日本の APN プレミアティアパートナー のやってみた系。
- AWS公式のCloudFormationユーザーガイド
- GitHubなどでパブリックで公開されているもの。
- AWS CloudFormation デザイナー
などを利用し、独自にカスタマイズし作成するかと思います。
ただし、このような問題に
- 作ってみたはいいけど、必要なリソースや必須のパラメータが足りなく、いざデプロイしようとしたら、動かない。
- そもそもあまり理解していない、触ったことないサービスなのに、いきないテンプレートで作成するのには、レベルが高い。
などといったことがあると思います。
#開発#
##エディタ##
個人的に利用しているエディタは、Visual Studio Code です。
以降は、VS Code を利用する前提で書いていきます。
なお、事前準備としてデフォルトのままだと!Sub, !RefなどのCloudFormation固有のスキーマがYAMLの構文エラーとなるため、settings.json
に次の記事の設定をしておくと構文エラーとならずに済みます。
##cfn-lint##
cfn-lint は入力した値の整合性をチェックし、不要なパラメータがある、必須のパラメータの定義がされていない場合に warning や error で検出してくれます。
導入手順は⬇︎の記事に書かれていたので、割愛します。
次の例では、存在しないセクションがあると、エラーを出してくれています。
開発時に適宜確認できた方が効率が上がると思います。
##自動補完##
CloudFormation template schema を利用することで、自動補完してくれます。
入力のミスも防いでくれますし、必須のパラメータもわかるのでとても便利かと思います。
このような拡張機能を利用していかないと一から作成するには時間がかかりますし、そもそも無理です。
拡張機能からインストールすることが可能であり、反映にはVS Codeを再起動する必要があります。
利用方法は簡単。例えば、vpc
と打ち、vpc を選択すると、
vpc のパラメータを表示してくれます。
#テスト#
##cfn-nag##
テンプレートのセキュリティ的な問題を開発プロセスの初期段階で気づくことができるサードパーティのOSSツールです。
インストール手順は⬆︎のGitHubに公開されている通りです。
例えばMACの場合は、brewで必要なものをインストールする。
brew install ruby brew-gem
brew gem install cfn-nag
cfn_nag_scan
で実行した結果、⬇︎の通り VPC Flow log が添付されている必要があるという Warnings が表示されました。
$ cfn_nag_scan --input-path vpc.yaml
------------------------------------------------------------
vpc.yaml
------------------------------------------------------------------------------------------------------------------------
| WARN W60
|
| Resources: ["myVPC"]
| Line Numbers: [9]
|
| VPC should have a flow log attached
Failures count: 0
Warnings count: 1
##CloudFormation Guard##
独自にルールを定義し、ポリシーへの適合性をチェックするツールです。
試されて見たい方は、classmethodさんが試して見たシリーズを書かれている様なので、そちらから。
以下2つのルールを定義しているようです。
- EBSボリュームで暗号化がされていること
- ボリュームサイズが100GB以下であること
##TaskCat##
複数リージョンに同じテンプレートでデプロイする際に簡単にテストできるツールです。
1つのテンプレートやスタックをテストしたのではわからない問題を検知することができます。
こちらも試されて見たい方は、classmethodさんが試して見たシリーズを書かれている様なので、そちらから。
#その他#
##former2##
既存のリソースをテンプレート化してくれる大変優秀なツールです。
※AWS公式のツールではありませんが、blackbeltの資料ややreinvent などの登壇でも紹介されています。
テンプレートを一から作成するのはハードルが高い!
動作確認のためにコンソールから作成して、動作確認が取れたら一からテンプレートを作成するのには手間がかかる。
といったケースに向いていると思います。
former2のサイトにアクセスする。
1.Introduction
Setup >> Introduction より、利用するブラウザの拡張をインストールする。(私は今回、Chrome を利用しました。)
2.Credentials
ReadOnlyAccess
を付与したIAMユーザを準備して認証情報を取得しておき、credentials を設定します。
下記2つを設定しておけば、動作はします。
- Access Key
- Secret Access Key
今回設定はしていませんが、一時的なセキュリティ認証情報を埋め込むといったことも可能なようです。
- Session Token
- Assumed Role ARN
3.Parameters
今回は特別設定していません。
要するにCloudFormation の Parameters
セクションです。
4.Settings
今回はデフォルトの状態から、Enable Related Resources
を on の状態にしました。
テンプレート化したいリソースを選択すると、先程Enable Related Resources
を on にしたことより、関連するリソースも拾ってくれるので、「Add Selected」 で追加し、「Generate」をクリックします。
もう見ての通りですが、これでテンプレート化してくれるだけです。
また、組み込み関数や擬似パラメータにしたほうがいい箇所やいい感じに出力してくれる点が便利です。
"arn:aws:ec2:ap-northeast-1:123456789012:vpc/${MyVPC}"
⬇︎
"arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${MyVPC}"