【AWS】Application Composer を試してみた

# AWS Application Composer を試してみた

## Application Composer とは
AWSが2023年3月に一般提供を開始したサービスです。LambdaやDynamoDBを利用したサーバレスアーキテクチャを、GUIを用いて視覚的・感覚的に構築できます。百聞は一見に如かずということで、さっそく触れてみます。

https://aws.amazon.com/jp/about-aws/whats-new/2023/03/aws-application-composer-generally-available/

## デモ構成
AWSマネジメントコンソールからApplication Composerへアクセスし、「デモを開く」を選択します。
![スクリーンショット 2023-03-29 143025.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/1594fdd5-0c08-bb36-2047-7a8d3e06f579.png)

![スクリーンショット 2023-03-29 143045.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/cdb544e2-7e39-a464-3887-bfc60625981f.png)

ローカル上に構成ファイルを作成するようなので、「AppComposer」フォルダを作成し選択しました。するとこのようにGUIが展開されました。

![スクリーンショット 2023-03-29 143129.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/08956dda-b9ff-5ff8-377c-2138202542bd.png)

APIからLambdaを通じてDynamoDBにCRUDをたたく、テンプレ構成ですね。どんなアプリなのか一目でわかります。
Templateを開くと、図に対応したCloudFormationテンプレートが記述されています。

![スクリーンショット 2023-03-29 154114.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/d631e4fc-eb3e-c6c4-da62-802874754649.png)

そしてローカル上にも同様のtemplate.yamlと、srcファイルが構成されています。

![スクリーンショット 2023-03-29 154310.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/f091fce2-9fc0-b3e9-a1d3-bead30e16531.png)

実際にこちらのテンプレートをデプロイして動かしてみます。
ありがたいことに、README.md の中に手順がすべてガイドされています。（英語ですが）

![スクリーンショット 2023-03-29 154907.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/c6c44462-c243-6eaf-5a76-ac15b0d3e85e.png)

こちらの指示に従い、パワーシェルでビルド、デプロイを実行します。（デプロイの画面撮り忘れ......)

![スクリーンショット 2023-03-28 143010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/a9805e7e-282f-b4ab-2c5c-5a0c067da345.png)
![スクリーンショット 2023-03-28 143547.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/0bb97f0f-a0b0-2c39-a929-57357f5168ad.png)

デプロイされたアプリケーションをAWS上で確認します。

![スクリーンショット 2023-03-29 160016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/a563c76c-671b-203e-1c71-b305fe3f3389.png)

![スクリーンショット 2023-03-28 145925.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/959dbecc-486a-d7b3-f5cb-b3a565af2c92.png)

しっかり構築されていますね。ガイドに従った動作確認もばっちりです。

![スクリーンショット 2023-03-28 153444.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/fcb485ab-9030-77ab-4765-a2a9d0ea2d8c.png)
![スクリーンショット 2023-03-28 153517.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/c556744b-cc24-1bf8-04b4-f7ba3f3e4c12.png)

## デモ構成を編集してみる

次に今まで触っていたデモ構成を編集してみます。
もう一度Application Composerにアクセスし、今度は「プロジェクトの作成」を選択します。

![スクリーンショット 2023-03-28 155052.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/64f00dfa-290e-4c35-71a4-c1a1fe107081.png)

既存のプロジェクトを読み込むほうを選択、ローカル上のAppComposerフォルダを読み込みます。

今回は試しに、一定間隔でLambdaを叩いてDynamoDBバックアップをS3に作成するような構成をつくってみます。

![スクリーンショット 2023-03-29 143243.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/803cb072-f687-e338-6a52-dd644786a7c8.png)

こんな感じになるでしょうか？
やったことは、ページ左側からアイコンをドラッグしてキャンバス上に配置し、名前と一部パラメータをいじって線を引いただけです。
この際、連携できないサービス間で線を引くと怒られます。
また、配置した時点でtemplateは更新され、それがローカルにも反映されます。

![スクリーンショット 2023-03-29 143339.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/cf49af7d-cdf2-0eb8-d91a-815f1d9fd2d4.png)

今までなかったS3バケットとそのポリシーがテンプレート上に記述されていますね。これが勝手に追加されるのはありがたい。

こちらを新たにデプロイすると、しっかりアプリが更新されています。追加された関数がこちらです。

![スクリーンショット 2023-03-29 135838.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/ddd982bc-0f9b-8193-e33c-0736a8d95340.png)

トリガーとしてEventBridgeを想定していましたが、Lambda上では反映されていないようです。

![スクリーンショット 2023-03-29 161838.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/08accf8a-c236-352d-5ebb-5ea5bfe4f829.png)

EventBridge自体はちゃんと作成されているようです。設定が不足しているのかも？

また、当然ながらこれだけではLambdaの中身はほとんど空っぽです。

![スクリーンショット 2023-03-29 135858.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730345/ecd24696-b390-d256-3df8-7b14affc80d7.png)

ローカルのsrcフォルダ内を編集して、ちゃんとアプリケーションの中身を構成する必要があります。

このように、コードレスになんでもできるわけではありませんが、大まかな骨組みを視覚的に構成するのには大変役立つサービスだと思われます。