はじめに
この記事では「この前リリースされた機能って実際に動かすとどんな感じなんだろう」とか「もしかしたら内容次第では使えるかも??」などAWSサービスの中でも特定の機能にフォーカスして検証していく記事です。
主な内容としては実践したときのメモを中心に書きます。(忘れやすいことなど)
誤りなどがあれば書き直していく予定です。
今回はCloudFormation IDE Experienceを検証してみます。
今のはCDKじゃねぇ、CloudFormationだ
AWS CDKやTerraformなどのIaCツールが普及してきていますが、やはりCloudFormationを直接使いたいというニーズも根強くあります。
例えば以下のようなケースです。
- 既存のCloudFormationテンプレートを活用したい
- IaCツールを導入するほどではないのでCloudFormationでインフラを管理したい
- IaCツールの学習コストを避けたい
あるいはIaC個々の辛みを避けるために、CloudFormationを選択する場合もあります。
Terraformの状態管理の煩雑さや、CDKのバージョンアップに伴う互換性問題などが挙げられます。
と言ってもCloudFormationにも落とし穴があります。
例えば以下のような問題です。
- テンプレートの記述ミスや構文エラーの検出が難しい
- リソース間の依存関係の把握が困難
- 大規模なテンプレートの管理が複雑
- json/yamlの記述が煩雑でミスが発生しやすい
筆者はyamlで書くことが多く、基本的には自動生成されたものを修正して使うことが多いのですが、やはりミスが発生しやすいです。
言語サーバー(LSP)やリンターがあったら便利だなと思っていたところに、今回のCloudFormation IDE Experienceの発表がありました。
CloudFormation IDE Experience とは
簡単に説明すると、CloudFormationテンプレートの作成と管理を支援するためのIDE(統合開発環境)向けの機能セットです。これにより、開発者はCloudFormationテンプレートをより効率的に作成、編集、デバッグできるようになります。
公式ブログには以下のように説明されています。
IDE内でエンドツーエンドの開発ループを構築することで、コードとしてのインフラストラクチャの構築方法を刷新します。一般的なYAMLやJSONエディタとは異なり、これはインフラストラクチャ開発者向けに特別に構築されたCloudFormationファーストのソリューションです。
※一部抜粋して翻訳
引用:Announcing CloudFormation IDE Experience: End-to-End Development in Your IDE
なお、この機能を利用するには、拡張機能としてAWS ToolkitをIDEにインストールする必要があります。
セットアップ
まずはAWS ToolkitをVSCodeの拡張機能としてインストールします。
AWS Toolkit - VSCode Marketplace
ハンズオン
早速試してみます。今回はいくつかのシナリオを試してみます。
- パブリックサブネットを持つVPCのCloudFormationテンプレート作成
- サブネットを重複させてみる
- 既存のリソースからテンプレートを生成してみる
パブリックサブネットを持つVPCのCloudFormationテンプレート作成
以下のようなCloudFormationテンプレートをtemplate.ymlとして作成します。
Resources:
AppVpc:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: dev
PublicSubnet:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref AppVpc
CidrBlock: 10.0.1.0/24
MapPublicIpOnLaunch: true
すると以下のように、Resourcesで破線が表示されます。
これはAppVpcのサブネットがパブリックとして設定されていることを警告しており、AWSのセキュリティの柱となるルールに基づき、セキュリティとコンプライアンスをチェックしています。
また、VpcIdの!Refを使用した際、利用できるリソースの候補が表示されます。(template.ymlを修正して実際にやってみましょう)
サブネットを重複させてみる
次に、同じCIDRブロックを持つサブネットを追加してみます。PublicSubnetAとPublicSubnetBを作成し、同じCIDRブロックを指定します。
Resources:
AppVpc:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: dev
PublicSubnetA:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref AppVpc
CidrBlock: 10.0.1.0/24
MapPublicIpOnLaunch: true
PublicSubnetB:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref AppVpc
CidrBlock: 10.0.1.0/24
MapPublicIpOnLaunch: true
すると以下のように、CIDRブロックの重複に関する警告が表示されます。MapPublicIpOnLaunchの警告も引き続き表示されています。
既存のリソースからテンプレートを生成してみる
AWS Toolkitを使用して、既存のリソースからCloudFormationテンプレートを生成することもできます。
まずはtemplate3.ymlというファイルを作成して開いたままにします。
次にAWS Toolkitを開き、CloudFormationセクションに移動して+をクリックします。
リソースタイプを入力するように求められるので、AWS::S3::Bucketと入力します。
チェックボックスにチェックを入れて、OKをクリックします。
すると、ResourcesセクションのS3バケットにアクセスする項目が生成されるので展開します。
筆者の環境ではS3バケットが複数あるため、S3バケット一覧が表示されます。表示内容は環境のよって異なります。
ここで+をクリックすると、選択したS3バケットのCloudFormationテンプレートがtemplate3.ymlに生成されます。
これにより、既存のインフラストラクチャをコードとして管理することが容易になります。
まとめ
CloudFormationはAWSを勉強し始めた頃に触る最初のIaCで最初はなかなかとっつきにくいところがあると思います。
CloudFormationのドキュメントを読めるようになるとある程度ですが、勘と経験でエラーはなんとかなることもあります。
それでもどうにもならないときというとどの設定を忘れているのかを特定できないこともあるかと思います。※昔はそういうのでめちゃくちゃ悩んでました。
CloudFormation IDE Experienceを使うことでCloudFormationの構文をあまり知らなくても実装することができます。
とはいっても、最近ではコーディングエージェントを使うことである程度ちゃんとしたCloudFormationがかけてしまうので、この機能の良さについてはなんとも言えないのが現状です。
しかし、今回の拡張機能を使うことでベストプラクティスに沿ったコードを書くことや検知がリアルタイムでできるのでそれはとても役に立つだろうなと思いました。
使えるタイミングがあったら積極的に使いたいと思いました。






