はじめに
AWSハンズオン for Beginnersシリーズとして提供されている「Serverless #1 サーバーレスアーキテクチャで翻訳 Web APIを構築する」を実施した際のメモです。
AWSが提供する代表的なサーバーレスサービスであるAWS Lambdaを主に使用して簡単な翻訳APIを作成してみます。
API GatewayからLambdaを呼び出し、翻訳サービスであるAmazon Translateへ翻訳を依頼します。
依頼結果の翻訳文をNo SQLサービスであるAmazon DynamoDBに格納し、翻訳文をレスポンスとして返却します。
アジェンダ
- サーバーレスアーキテクチャの概要
- AWS Lambda の概要
- AWS Lambda ハンズオン① - AWS Lambda を単体で利用する
- AWS Lambda ハンズオン② - AWS Lambda から他の AWS サービスを呼び出す
- Amazon API Gateway の概要
- Amazon API Gateway ハンズオン① - Amazon API Gateway を単体で利用する
- Amazon API Gateway ハンズオン② - Amazon API Gateway と AWS Lambda を連携する
- Amazon DynamoDB の概要
- Amazon DynamoDB ハンズオン① - Amazon DynamoDB テーブルを作成する
- Amazon DynamoDB ハンズオン② - AWS Lambda から Amazon DynamoDB に Item を Put する
- まとめ & 落ち穂拾い & 今後のラーニングパスについて
メモ
なぜサーバーレスを使うか?
開発者はお客さまに価値を届けることが本来の目的です。しかし、その目的を果たすために開発者は様々な作業をしなければなりません。
例えば、サーバの発注、サーバにミドルウェアのインストール、耐障害性を考慮したアーキテクチャの設計などです。
このようなことは開発者は本来やりたくないことです。開発者はコーディングやテストに集中したいのです。
サーバーレスサービスを使用することで、これらを意識することがなくなります。そして、本来やるべき開発に集中することができます。
AWS Lambdaとは?
サーバーのプロビジョニング、管理なしでコードを実行することができるサービスです。
コードの実行やスケーリングに必要なことはLambda側でやってくれるので、コードを書くことに集中できます。
その他雑記
- 現在指定できるメモリ最大量は10GBです。
- Lambdaの呼び出し元によって起動が非同期または同期になります。
- Lambdaのライフサイクルは以下です。
- コンテナ生成=>デプロイ=>ランタイム初期化・起動=>メソッド実行
- ウォームスタートの場合、コンテナを使い回し、最後の部分(メソッド実行)のみ実行します。そのため、実行は速くなります。(このときグローバル変数は使いまわされるため注意)
- Lambdaのタイムアウト時間の最大は15分です。申請などで伸ばすことはできません。実装しようとしている処理が15分を超える可能性がある場合、LambdaではなくECSやEC2の使用を検討しましょう。
- ただ、タイムアウトを許容し、タイムアウト後のリカバリができるような設計ができるのであれば、その限りではないと思っています。
API Gatewayとは?
サーバーのプロビジョニング、管理することなくAPIの作成管理ができるマネージドサービスです。
Lambdaと同様に、これを使うことで開発者が本来力を入れたいことに集中することができます。
作成の流れ
- リソースとメソッドタイプの定義
- メソッドリクエストの設定
- 統合タイプの設定
- リクエストレスポンスの変換の定義
- デプロイ
その他雑記
- Lambda プロキシ統合を使用することで、APIのリクエストパラメタを規定のJsonにマッピングし、Lambdaに渡すことができます。
- これによりマッピングテンプレートでパラメタをどのように渡すか考えなくて良くなります。
- なお、Lambdaが返却する形式も決まっており、以下の形で返却しなければなりません。
- Lambdaのテスト設定にAPI Gateway Proxy統合のEventテンプレートが提供されています。一度見てみると良いでしょう。
DynamoDBとは?
フルマネージドなKey-Value型のNo SQLデータベースサービスです。
その他雑記
- プライマリキーは項目を一意に識別する項目です。
- ソートキーがある場合、プライマリキーとの組み合わせで項目が一意になります。
- プライマリキー、ソートキー以外は自由に列を定義できます。不揃いでも問題ありません。
- マネジメントコンソールから項目の追加する時、プライマリキーの入力欄は事前にありますが、それ以外の項目は自由に追加できる形になっています。
ハンズオンの感想
AWSのサーバーレスサービスを使用をLambdaで組み合わせ翻訳APIを簡単に作成することができました。
Lambdaについては仕事で開発しているので抵抗はありませんでしたが、
API Gateway、DynamoDBはちょっとしか触れておらず、詳細まで把握していませんでした。
今回のハンズオンで基礎的なところを再学習できたのでよかったです。