プライム・ストラテジー「KUSANAGI」開発チームの謝です。
今回はAmazon API GatewayとAWS Lambdaを連携して、簡単なAPIを作成方法を紹介したいと思います。
用語とサービスの説明
APIとは
API(Application Programming Interface)は、異なるソフトウェア・システム間で通信を可能にする仕様やプロトコルのことです。
APIは現代のソフトウェア開発において不可欠な要素となっており、シンプルかつ効果的にシステム間のコミュニケーションを設定し、豊かな機能を提供するために活用されています。
Lambdaとは
AWS Lambdaはサーバレスコンピューティングサービスで、サーバのプロビジョニングや管理を気にすることなくコードの実行が可能です。Lambdaの基本は「関数」という単位で、それぞれが独立したタスクを実行します。この「関数」は特定のAWSイベント(API Gatewayからリクエスト)に応答して自動的に実行されるように設定できます。
Lambdaはスケーラブルで、リクエストが増えても自動的に同時実行数を増やして対応します。また、実行時間とリソース使用量に基づく料金体系を採用しており、不使用時のコストを心配する必要がありません。
API Gatewayとは
Amazon API Gatewayは、開発者がHTTPとWebSocket APIsを簡単に作成、公開、保守、モニタリング、およびセキュアにするためのサービスです。このAPI Gatewayを通じて、Lambda関数へのエンドポイントを提供し、外部からのリクエストを処理します。
AWS LambdaとAPI Gatewayの連携は、サーバレスアーキテクチャでよく利用されるパターンの一つです。AWS Lambdaでビジネスロジックを実行し、API Gatewayで外部からのリクエストを受け付け、Lambdaにルーティングすることで、強力かつ柔軟なWEB APIを実現できます。この組み合わせにより、インフラストラクチャの管理を少なくしつつ、迅速にアプリケーションの開発とデプロイができます。
コンソールでLambda関数の作成
- 「Lambda」 コンソールに移動します。
- 「関数の作成」をクリックし、「一から作成」を選択します。
- 「関数名」を入力します(例:
MyFunction
) - 「ランタイム」で、「Node.js 20.x」を選択します。他も色々な言語をサポートしていますが今回の紹介はNodejsを利用します。
- 「アーキテクチャ」 は 「x86_64」 のままにし、「関数を作成」をクリックします。
これでデフォルトでは Hello from Lambda! を返す関数を作成されました。
続きはAmazon API Gatewayを連携テストため、コードを変更します。
コンソールでコード変更
- Lambdaの関数名をクリックし、関数の編集画面を開く
- 「コード」タブをクリック、下記のコードをコードエディタのindex.mjsに入力してください。
この関数では、受け取ったイベントデータをログに出力し、その後、HTTPメソッドに応じて応答の内容を決定しています。GETメソッドの場合は簡単なメッセージを、POSTメソッドの場合はリクエストボディからnameプロパティを取得して応答メッセージを生成しています。それ以外のHTTPメソッドの場合は”Not support request!”というメッセージを出力します。
export const handler = async (event) => {
console.log("event: \n" + JSON.stringify(event, null, 2));
let method = event.requestContext.http.method ? event.requestContext.http.method : '';
let body = '';
if ( "GET" === method ) {
body = 'Hello from Lambda using Node.js 20.x!';
} else if ( "POST" === method ) {
var data = JSON.parse(event.body);
body = 'Hello ' + data.name + '!';
} else {
body = 'Not support request method!';
}
const response = {
statusCode: 200,
body: body,
};
return response;
};
- 「Deploy」をクリックし、関数のコードをデプロイします。
- デプロイ完了したら、「関数 MyFunction が正常に更新されました。」というメッセージが表示されます。
Amazon API GatewayでHTTP APIを構成
- 「API Gateway」コンソールに移動します。
- 「APIの作成」をクリックし、「HTTP API」の「構築」をクリックします。
- 「統合を追加」クリック、「Lambda」を選択、「Lambda 関数」に先程作成された関数(arn:aws:lambda:*****:*****:function:MyFunction)を選択してください。
- 「API 名」を入力します。(例:MyLambdaAPI)
- 「次へ」をクリックします。
- 「メソッド」は「ANY」のまま、「リソースパス」は「/myapi/v1」を変更し、「統合ターゲット」もそのまま、「次へ」をクリックします。
- 「ステージ名」もそのままで「次へ」をクリックします。
- 「作成」をクリックします。
- API Gateway無事に作成されたら、APIの編集画面に遷移されます。
APIのテスト
APIのURLは「詳細」ページの「URL を呼び出す」項目で確認できます。
APIのテストは以下のcurlコマンドを使ってテストすることができます。
- リクエストメソッドがGetのテスト
curl https://<api-id>.execute-api.ap-northeast-1.amazonaws.com/myapi/v1
API応答として「Hello from Lambda using Node.js 20.x!」というメッセージが出力されます。
- リクエストメソッドがPostのテスト
curl -X "POST" -H "Content-Type: application/json" -d "{\"name\": \"孫悟空\"}" https://<api-id>.execute-api.ap-northeast-1.amazonaws.com/myapi/v1
API応答として「Hello 孫悟空!」というメッセージが出力されます。
- リクエストメソッドがPUTのテスト
curl -X "PUT" https://<api-id>.execute-api.ap-northeast-1.amazonaws.com/myapi/v1
API応答として「Not support request method!」というメッセージが出力されます。
以上で、Amazon API GatewayとAWS Lambdaを使用してWEB APIを作成する流れが完了です。実際の使用では、API Gatewayのさまざまなセキュリティ設定やリクエストの検証、Lambdaのモニタリング、ロギング機能などにも運用環境に適した設定を行ってください。
最後に
Amazon API Gatewayの堅牢な管理ツールとAWS Lambdaのスケーラビリティを組み合わせることにより、サーバーについて考えることなく、実際に使用したコンピューティング時間に対してのみ料金を支払うことで、効率的にAPIを開発することができます。これにより、開発プロセスが合理化されるだけでなく、最小限の管理オーバーヘッドで需要の変化に柔軟に対応することができます。
Web APIを構築する開発者や企業にとって、Amazon API GatewayとAWS Lambdaの組み合わせは、コストや複雑さを減らしながら目標を達成するための方法を提供し、常に進化し続けるデジタル環境中で競争力と敏捷性を維持するのに役立つと思います。