1. はじめに
株式会社TechoesインフラチームのOです。
今回は、AWS CloudFormationのテンプレート作成をVSCodeで行う際に、拡張機能のCloudFormation
でテンプレートやリソースの骨組みを作成したり、CloudFormation Linter
, Cfn-Nag Linter
で静的解析を行ったりするための環境構築をまとめました。
2. 実行環境
- macOS Sequoia 15.0.1
- Homebrew 4.4.5
3. 環境構築
1. CloudFormation : テンプレートの骨組みを作成する機能
- VSCode拡張機能からインストール
-
CloudFormationの独自関数はエラーとして認識されるためカスタムタグを設定
(YAMLスキーマを登録しておくと指定したフォルダ構成時に自動で適用される)
"yaml.schemas": { "https://d33vqc0rt9ld30.cloudfront.net/latest/gzip/CloudFormationResourceSpecification.json": [
"templates/*.yaml",
]
},
"yaml.customTags": [
"!And",
"!If",
"!Not",
"!Equals",
"!Or",
"!FindInMap sequence",
"!Base64",
"!Cidr",
"!Ref",
"!Sub",
"!GetAtt",
"!GetAZs",
"!ImportValue",
"!Select",
"!Select sequence",
"!Split",
"!Join sequence"
]
2. CloudFormation Linter : 静的解析
- VSCode拡張機能からインストール
※ 拡張機能だけでは利用できないので下記手順を踏む
- cfn-lintをターミナルからインストール
- cfn-lintのパスを保存
brew install cfn-lint
which cfn-lint
3. Cfn-Nag Linter : セキュリティチェック
- VSCode拡張機能からインストール
※ 拡張機能だけでは利用できないので下記手順を踏む
- Cfn-Nagをターミナルからインストール
- Cfn-Nagのパスを保存
1. brew install ruby brew-gem
2. brew gem install cfn-nag
3. which cfn_nag
4. 使い方
-
yaml.schemasでパス
(templates/*.yaml)
を通しているのでtemplates
フォルダと任意のyamlファイルを作成 → cfn-lintがファイルに適用される -
vpc
でリソースの作成 -
ターミナルを開き
cfn-lint ファイル名.yaml
を実行 -
security-group
を作成して、必要な項目を追加 -
ターミナルを開き
cfn_nag ファイル名.yaml
を実行 -
metadata
に出力されたidを書くと警告されたルールを許可(非表示)できる
(例 : VPCフローログをアタッチしたくない)
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 0.0.0.0/0
EnableDnsSupport: true
Tags:
- Key: name
Value: value
Metadata:
cfn_nag:
rules_to_suppress:
- id: W60
5. おすすめの設定と拡張機能
-
Editor: Format On Save (設定)
保存するとCfn-lint
,Cfn-Nag
が実行→エラーや警告を出力
-
indent-rainbow
: インデントを深さごとに色付け
LambdaやIAMロールなどを作成する時にインデントが深くなりがちなので、色があることによりズレを防止できる。
-
Code Spell Checker
: スペルミスを強調表示
スペルミスを修正するだけでなく、修正候補も提示してくれるので便利
独自の変数名などはuser setting
に追加するとエラーとして表示されない
6. まとめ
環境構築の難易度も低く、CloudFormationでテンプレートや作りたいリソースの骨組みを簡単に作成したり、Linter, Nag Linterでテンプレートに問題がないか確認できるため、以前に比べて作業効率が大幅に上がりました。また、おすすめの拡張機能と併用することでミスも減りました。