AWSが提供しているServerless Application Modelサービスの概要と、これを使って構築したアプリケーションの動作確認時の注意点を紹介したいと思います。
AWS Serverless Application Model(SAM)とは?
AWS Serverless Application Model(以下SAM)とは、サーバレスな構成、すなわち常時稼働する固有のサーバマシンを持たないようなシステムをAWS上に構築するためのサービスです。 固有のマシンを持たないというのは、具体的にはAWS Lambdaなどのサービスを使って、処理が呼び出されたときだけ一時的にCPUやメモリを割り当てられて動作するような仕組みになります。 SAMはAPI GatewayやLambdaなどの内容を設定ファイルに記述してシステム構成を定義し、それをコマンドひとつでAWSに実際のシステムとして組み建てることができます。 これによりシステムの内容をすべてソースコードや設定ファイルに落とし込んで管理することが可能になります。 インフラをコードで定義して管理する構成はInfrastructure as Code(IaC)と呼ばれており、SAMはこれを実現するためのサービスのひとつです。
ちなみに単にAWS上のリソースをコードで管理するなら、AWS CloudFormationというサービスがSANより以前から存在します。 CloudFormationは、EC2のインスタンスなどサーバレスなリソース以外も全て管理できるサービスです。 しかしその分記述する内容が細かく、管理が煩雑になる場合があります。 SAMはCloudFormationをサーバレスなシステム向けに拡張・特化させたもので、CloudFormationより自由度が下がる分、記述が簡潔で済む利点があります。
また、SAMは限定的ですがローカル環境で動作確認を実行できるという機能もあります。 簡単なデバッグなどを行いたいときは、いちいちAWSに反映させずとも済むため便利です。
インストール
SAM CLIをインストールして、各種コマンドを利用できるようにする必要があります。 AWS公式サイトに十分説明があるので、詳細な説明は割愛します。
Windows、Max、Linuxそれぞれインストール可能です。 ただしローカルでの動作確認にはDockerが必須なので、それは別途インストールしておく必要があります。
また、AWSにデプロイするにはAWS認証情報の設定が行われている必要があります。 こちらも公式ドキュメントに手順が記載されているので、そちらを参照ください。
ローカルでの動作確認手順
以下のコマンドを実行することで、必要な初期設定やサンプルファイルを構築することができます。
sam init
こちらも詳細はチュートリアルに記載されています。
チュートリルにも記載されてますが、以下のコマンドでローカル上でアプリケーションを動作させることができます。
sam local start-api
localhost:3000
にアクセスすれば、起動したアプリケーションにアクセスできます。
ローカルで動作確認する場合の注意点(落とし穴?)
チュートリアルでは使われていませんが、SAMはWebSocket用のAPI Gatewayや、DynamoDBなども定義できます。 しかし、これらはAWSにデプロイすると動作しますが、ローカルでは動作しません(2021/03/25 現在)。 そのため、これらを使う前提の処理は、ローカルでそのまま動作確認できません。 動作するのはREST APIのAPI Gatewayや、Lambdaだけのようです。
DynamoDBについては別途ローカルに構築して接続させることである程度対処可能ですが、WebSocketは代わりの方法も無く難しそうです。 ローカルでもWebSocketを動作できるように機能追加する動きがあるようですが、残念ながらまだ未実装のままとなっています。 なのでこれらを使う場合、デバッグはある程度AWS上で行う必要がありそうです。 SAMのメリットを十分に行かせないのは残念ですが・・・まだ新しいサービスなので、今後のアップデートに期待したいと思います。
まとめ
AWS SAMについて概要と注意点を紹介いたしました。非常に有用ではありますが、開発時にトラブルが起きないよう、十分に検証しておく必要がありそうです。 もう少し機能が成熟してくれるとより安定して使えると思いますので、今後期待したいところです。