0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CloudFormationをVSCodeで開発する

0
Last updated at Posted at 2025-12-03

はじめに

AWSリソースを作成できるIaCサービスとしては、terraformやAWS CloudFormation、AWS CDKなど様々なものがありますが、今まで経験したプロジェクトではCloudFormationを利用していることが多かったです。
AWS公式が提供しているサービスであることやYAMLファイルでテンプレートを作成するため、学習コストが低く、パッケージのバージョン管理も不要であることからよく採用されていました。
新人の頃はメモ帳やサクラエディタで作成していたのですが、最近はVSCodeで開発しているため、より効率的な設定を入れていけたらな…と思い記事にしました。

cfn-lint

調査を進めていると、cfn-lintと呼ばれるツールがよく使われているようでした。
少し古いですが、AWSのブログでも紹介されています。
cfn-lint を使った AWS CloudFormation テンプレートの Git pre-commit バリデーション | Amazon Web Services ブログ

cfn-lintはPythonで作成されており、テンプレートの検証を行ってくれるようです。
また、組み込み関数の解析まで行ってくれるとの記載もありました。

使ってみる

まずはとにかく使ってみて使用感を確認してみましょう。
下図は、cfn-lintを有効にしていない状態での表示です。
image.png
組み込み関数でエラーとなっており、論理ID(MyVPC_01)が特にエラーにならずに通っています。論理IDにアンダーバーは未対応のため、これではスタック作成時にエラーとなってしまいます。
※組み込み関数のエラーはyaml lintにより検出されています。(ややこしいので無効化しておくべきでした…解決方法は後述)

cfn-lintをインストールして実行してみます。
先ほどの通り、cfn-lintはPythonで作成されており、pipでインストールが可能です。

pip install cfn-lint

インストールが完了したら、cfn-lintを先ほどのテンプレートに対して実行してみます。
cfn-lint <テンプレート名>でテンプレートに対する検証を行えます。

$ cfn-lint vpc.yml 
E3001 'MyVPC_01' does not match any of the regexes: '^[a-zA-Z0-9]+$'
cfn/vpc.yml:23:3

期待通りに論理ID(MyVPC_01)の箇所のみエラーになっていますね…!
これでスタック作成時に気づいていたようなエラーも、事前に把握することができます。

VSCodeで自動的に検証を行う

今のままでは毎回コマンドでテンプレートの検証を行わなければなりません。
それでは検証の漏れが発生する可能性があります。(あと、毎回コマンドで検証を行うのはちょっと面倒です。)
そこで、VSCodeに設定を行い自動的にテンプレートの検証を行うようにします。

1. 拡張機能のインストール

まずは下図の拡張機能をインストールします。
拡張機能IDは kddejong.vscode-cfn-lint です。
image.png

2. 拡張機能の設定を変更
Cfn Lint: Path にインストールしたcfn-lintのpathを設定します。
image.png

また、YAMLの拡張機能を入れている場合は、以下のようなエラーが発生します。
Unresolved tag: !Ref
その際は、settings.jsonに以下の記述を追加ください。

{
    "yaml.customTags": [
        "!Base64 scalar",
        "!Cidr scalar",
        "!And sequence",
        "!Equals sequence",
        "!If sequence",
        "!Not sequence",
        "!Or sequence",
        "!Condition scalar",
        "!FindInMap sequence",
        "!GetAtt scalar",
        "!GetAtt sequence",
        "!GetAZs scalar",
        "!ImportValue scalar",
        "!Join sequence",
        "!Select sequence",
        "!Split sequence",
        "!Sub scalar",
        "!Transform mapping",
        "!Ref scalar",
    ]
}

上記の設定が完了すると、VSCode上でcfn-lintを動作させることができます。
これで、毎回コマンドを実行してテンプレートの検証を行う手間が省けました!
image.png

最後に

今回はcfn-lintを使用したCloudFormationのテンプレート開発についてまとめました。
次は、ベストプラクティスにも記載があるcfn-guardにも触れてみたいなと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?