はじめに
フロントエンドの学習にあたり最近AWS Amplifyを利用し始めました。おそらく昨今のフロントエンドエンジニアはAWSの各種サービスの理解も避けては通れないということでまずはAWS Lambdaについて調べてみました。(2021年5月現在)
AWS Lambda
AWS Lambdaはサーバーレスでコードの実行環境を提供し、ソースコードをデプロイするだけでプログラムを実行してくれるサービスになります。プログラムとは別にトリガーをというイベントを用意し、イベントが呼ばれるたびにデプロイしたプログラムが実行されます。
例えば、API Gatewayへリクエストがあったときに送られた内容によって外部のDBサービスとやり取りをして結果を返すREST APIのような動きを行ったり、DynamoDBのテーブルが更新されたときに処理を行ったり、S3バケットに画像がアップロードされた時に画像を変化する処理を行ったりと他のAWSサービスと連携して利用することが主な使い方になります。
AWS Lambdaの動作の特長としては、普段は停止状態で待機、リクエストがあった際に起動して動作を開始します。このため停止状態からの起動が入る場合はレスポンスに若干の時間を要します。これをコールドスタートといいます。また起動後はしばらくの間は起動したまま待機状態となるためすぐに実行することができます。これをウォームスタートといいます。
利用料金についても実行数と実行処理時間に応じて課金されるため停止状態のときは料金がかからないのも大きな特徴です。
また、AWS Lambdaでは、主に下記言語に対応していてフロントエンドとはまた別の言語で記述することができます。
- Node.js
- Python
- Java
- Ruby
- Go
- .Net Core
負荷にあわせてスケーリングも自動的に行なってくれるため負荷の高いサービスにも柔軟に対応することが可能です。ただアカウントひとつの同時実行数が東京リージョンでの初期値が秒間1000となっており、複数のLambda関数を実行している場合はすべてをあわせて1000となるので注意が必要かもしれません。
シンプルな処理を行うためにわざわざサーバー環境を用意することなく手軽に構築できる、リクエスト量に応じてスケーリングを自動的に行なってくれるというところが最大の利点だと思います。
AWS App Runnerとのすみわけ
先日AWS App Runnerという新サービスの提供が発表されました。既存のコンテナもしくはGitHubのソースコードからデプロイすることができ、まだNode.jsとPythonのみのサポートながらドメインの紐付けなど行うことができより柔軟なバックエンドの構築を行うことができそうです。
詳細の理解がまだできていないのですが、Amplifyのバックエンド寄りのイメージとなるのでしょうか??RubyなどもサポートされればRails環境をHerokuのように構築できる??
サービスの進化が速く理解が追いつかないのですが、ひとまず下記ワークショップから試してみようと思います。
関連記事
参考サイト
Lambda
App Runner