【AWS】InfrastructureComposerの良さを伝えたい【DevTools】

# はじめに
今年DevTools領域のAWS Commmunity Buildersに選出されました。
そこから、CDKをはじめとするDevToolsの良さを伝えるためにLT会の登壇やブログで情報発信を行っています。

今回の記事ではDevToollsの中でも
AWS Infrastructure Composer(旧：AWS Application Composer)
についてお伝えしていきます

【関連資料】
以前JAWSイベントで登壇した際の資料のリンクを貼っておきます
JAWS-UG東京 ランチタイムLT会 #22
↓資料

https://speakerdeck.com/naonana777/aws-infrastructure-composernoliang-sawochuan-etai

# AWS InfraStructure Conposer とは？
GUI操作でCfnテンプレートを作成/編集/構成の視覚化ができるツールです。
CloudFormationテンプレート内のリソース定義が"カード"と呼ばれる単位で管理され、リソース間の関連付けも可視化されるため、CloudFormationテンプレートがアーキテクチャ図や構成図のような形で視覚化できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/d2c493cc-d3de-4036-b971-c6746771ad13.png)

# AWS InfraStructure Composerの推しポイント
## 既存のCloudFormationテンプレートを構成図のように視覚化できる
### <ないとき>
・CloudFormationテンプレート内の長いIaCコードを読み解くことによって何が定義されているか、リソース間の依存関係がどのようになっているか整理して理解する必要があります。
・CDKなど抽象化されたIaCコードではなく、行数が多くなりがちなCloudFormationテンプレートのIaCコードの各行を目視で読み解いて理解するのは大変な作業です。
### <あるとき>
・CloudFormationテンプレートの内容が構成図の可視化されるため、定義されているリソースの種類や依存関係が一目で理解できます
・表示されたリソースのカードを選択することで、そのリソースのプロパティ定義もリソースごとに確認することが可能です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/0f19c5fc-1f7f-4953-9f00-fe46c9512d38.png)

## 穴埋め形式でリソースのプロパティ定義が可能
### <ないとき>
・リソースの種類ごとにどのようなプロパティ名があり、どのような値を設定すべきかを覚えて、手動で書き込む必要があります。
・リソースの定義すべきプロパティを検索して手動で定義を書き込む作業の往復は大変な作業です。
### <あるとき>
・拡張コンポーネントと呼ばれるリソースの種類の定義のみに限りますが、穴埋め方式でプロパティの定義が可能です
・定義すべきプロパティの種類が提示されているため、プロパティ定義が非常に楽になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/76039aaa-2a6a-41ff-98bc-12b9606ebace.png)


## StepFunctions Workflow Studioがローカル(VSCode上)でも動かせる
### <ないとき>
・StepFunctionsのステートマシンを作成する際に、事前に定義したリソースを組み合わせて複雑なフローを定義する必要があります。
・既存のリソースを参照してエラーやループ、分岐などのフローを手動でコードを書いて定義するのは大変な作業です。

### <あるとき>
・StepFunctions Workflow Studioを使用してGUI操作でステートマシンが定義できるため、定義が非常に楽になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/d5bcfe77-8c64-4eea-b474-7da992239f0a.png)

## そのほかの推しポイント
### リソース間の関連付けが簡単
・リソース間の紐づけをGUI操作で紐を引っ張るような操作のみで行うことができます
・必要なポリシーの追加も自動で行われます
### 変更されたコード差分を表示可能
・GUI操作で自動的にIaCコードが追加されますが、その変更内容はGUI操作している画面上で確認可能です

### リソース(カード)のグループ化が可能
・管理するリソースが多くなったり、複数の機能の分類を含むテンプレートの場合、どのリソースがどの分類で管理されるかが可視化できた方が管理しやすい場合があります。
・グループ化すると構成図上でグループが表示され、リソースの管理が容易になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/5b1b207a-9050-45ff-8cd2-7edd4138ecf0.png)


# AWS InfraStructure Composerの注意点
## 拡張コンポーネントと標準コンポーネントの違い
### <拡張コンポーネント>
・サーバレス系の14種類のリソース
・穴埋め形式でのプロパティ定義など、Infrastructure Composerの機能を最大限に活かすことができます
### <標準コンポーネント>
・CloudFormationが対応している1,374種類(2025年4月時点)のリソース
・穴埋め形式の定義はできませんが、AmazonQによるワンクリックコード提案が利用可能です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/cb9a7062-2ecb-42f4-ace6-d6561394b998.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/bc8ea5fd-ab5b-4523-9f38-c06e6ab13794.png)

## ワンクリックコード提案は雛形や参考程度に
・標準コンポーネントで利用できるワンクリックコード提案は選択中のリソースに関するプロパティ定義の例を提案してくれる機能になっています
・そのため、実際のプロジェクトに必ずしも適しているプロパティ定義ではありません
・あくまで雛形や参考程度に利用して、提案されたっコードに対してプロジェクトに合う形にコードを編集する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/6cd1ac80-6302-410d-b0cf-b527f5ce8c3f.png)


## 自動で作成されるポリシー設定に注意
・リソース間の紐づけはGUI操作で簡単に設定でき、この時ポリシーも自動で設定されます。
・手動コード定義が不要で便利ですが、ポリシー設定は必要以上に多くのアクションを許可している可能性があります。
・下図の例ではLambdaとS3を紐づけた際に自動で設定されるポリシーの例ですが、多くのアクションが許可されていることが確認できます
・必要最低限のポリシー設定が求められる場合はここから不要なポリシーを削除する対応が必要になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/228b413d-fa54-4e03-a227-b11ac5115dcc.png)


# さいごに
今回はInfraStructureComposerについて紹介しました
CloudFormationテンプレートを構成図のように可視化できて、プロパティ定義も参照できるので、たとえばプロジェクトの新メンバーに対して、設計資料を読んでもらう時にCloudFormationテンプレートをInfraStructureComposerで見てもらって実際の構成や定義内容を理解してもらうにも利用できるのではないかと思いました。

これからも様々なツール(主にDevTools)の紹介をして、皆さんにツールへの興味を持ってもらい、開発や運用の効率化に貢献できるように頑張ります

# 他の記事リンク
この記事の英語版はこちら

https://dev.to/aws-builders/aws-i-want-to-tell-you-how-good-infrastructurecomposer-is-devtools-5bj0