「Application Composerのすすめ」というタイトルで登壇予定だった資料を公開します #reInvent

2023.03.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、もこ@札幌オフィスです。

去年のre:Invent 2022で発表された AWS Application Composer使ってますか!?(挨拶)

この資料はre:Growth 2022 にて登壇の際に利用する予定だったものですが、諸般の事情により参加ができず、作成した資料が涙を見せながらこちらを見つめてきたため、今さらながら供養させていただきます。

資料

Application Composerでできること

AWS Application Composerは、GUIでサーバーレスアプリケーションを組み込むことができます。

サーバーレス環境の場合、CloudFormationやSAMを利用して構成管理をすると、構成が複雑になればなるほどYAMLファイルがごちゃごちゃしてきて大変になりがちですが、AWS Application Composerを利用する事で、GUIでモデリングすることができます。

また、AWS Application Composerを利用して作成したリソースはCloudFormation(SAM)形式で出力され、Lambdaのエントリーポイントを含むディレクトリも作成されるため、すぐに開発することが可能です。GUIモデリングでよくありがちな「最終的にコードを生成するとコードが読めない」といった事も無く、きちんと読めるコードで出力してくれるのも良い点として上げられます。

そしてなによりも、ブラウザの機能を利用して、ローカルのファイルをリアルタイムでSyncしてくれるため、「IDEを開きながらAWS Application Composerでポチポチしつつ生成されたディレクトリコードを書く・・・」であったり、Git管理といった所も容易に可能なのも魅力の1つです。

実際に作ってみる

何はともあれ実際に作ってみましょう。 マネジメントコンソールからAWS Application Composerを開き、Create projectを選択していきます。

「Project location」でローカルのディレクトリを選択すると、次のようなダイアログが表示されます。

これは恐らく File System Access APIを利用して実装されている物と思われます。

権限付与すると、左側にAPI Gateway, Cognito, EventBridge, Lambda, SNS, SQS Queueなど様々なサーバーレスリソースが表示されます。これらをキャンバスにドロップアンドドラッグして、矢印で繋いでいく形です。

今回はサンプルとして「API Gateway -> Lambda -> SQS -> Lambda」といったフローを書いてみました。

Project locationで指定したディレクトリを見ていくと次のように、SAMのファイル(template.yaml)と、Lambdaのディレクトリが作成されて、ハンドラーが書かれていることを確認できると思います。検証時点では、ここまで5分くらいでできました。

実際に作成されたYAMLはこんな感じで、この手のGUIツールは「どうせ人力で読めないコード生成してくるんでしょ」といった期待を裏切るめちゃめちゃ読みやすいコードが出力されます。

既存プロジェクトのインポート

既存のSAMプロジェクトのインポートも可能です。

手元にちょうど「ojichat Serverless API」があったため、今回はこちらをインポートしてみました。

インポートするとこのような感じで、(リソースは少ないシンプルなSAMで恐縮ですが、)既存プロジェクトもインポートして追加で機能開発もできるようになっています。

これまでの課題の解決

これまでのSAMを利用したサーバーレスアプリケーションの開発、リソースが増えれば増えるほどYAMLがカオスになったり、構成図を別個こしらえている場合はメンテが大変といった問題がありましたが、AWS Application Composerを利用する場合は、SAMをそのまま食わせるだけでGUIで可視化する事ができるため、比較的容易に大きい規模でもサーバーレス構成をGUIでメンテできるかと思います。また、構成図のメンテからも解放されるといった点でも良いかと思います。

AWSのサーバーレスアプリケーションの開発知見が少ない場合でも、Application Composerを足がかりにして学習を進めるといった観点でも初学者の方にもおすすめのサービスかと思います。

現時点で対応していない事

現時点ではサーバーレス系サービスのみのサポートで、ECSなどは対応していません。

また、CloudFormation(SAM)にしか対応しておらず、最近はCDKを利用したサーバーレス開発がトレンディなご時世ですが、現時点ではCloudFormation(SAM)のみのサポートとなっています。

ただし、個人的には「サーバーレス」といった観点でレイヤーを切って良いのではと思っています。例えば、コンテナ使う箇所は別個CDKなどで定義した上で、今回のApplication Composerで管理するサーバーレスの箇所はSQSに流すまでを責務として、SQSを利用して疎結合に連携するといった事もできると思います。

ただ、既にCDKやTerraformなどで管理されているリソースもあると思います。個人的には既にCDKやTerraformなどを利用されている場合は、GUIを使いたい等の明示的な理由がない場合は、わざわざCloudFormation(SAM)に乗り換えてApplication Composerを使う必要は無いと思います。

「これからSAMを使ってちょっとしたサーバーレスアプリケーションを作りたい」であったり、「既にSAMを利用したアプリケーションがある」といった場合はApplication Composerを利用して可視化することも可能なので、一度利用してみるのは良いと思いました。

まとめ

AWS Application Composerを利用すれば、GUI上でビルディングブロックを繋ぎ込むだけでSAMを利用したプロジェクトを作成・管理でき、すぐに開発を進めれることができるため、SAMを利用する予定があれば非常にオススメです。

これまでの「サーバーレス構成、複雑になりがち」問題も、GUIで管理できるようになるため、YAMLメンテ職人も歓喜のサービスだと思います。

一方で、現状CDKやTerraformなどを利用されている場合は、明示的な理由が無い限りはあまり利用する機会はないのかなと思いました。

また、現時点ではJavaScriptしかRuntimeを指定できず、TypeScriptでどうやって対応すれば良いのか問題などもあるので、引き続き検証やアップデートを期待するといった事も必要かもしれない!といった所です。

以上、もこでしたー。