0
1

AWS LambdaとAPI Gatewayを使用したGETリクエスト対応のサーバーレスアーキテクチャ構築

Posted at

はじめに

AWS LambdaとAPI Gatewayを組み合わせることで、インフラ管理を必要とせず、スケーラブルなWebアプリケーションやAPIを構築することができます。

このアプローチはサーバーレスアーキテクチャとして知られており、イベント駆動型の設計により、コスト効率が高く、管理の負担も軽減されます。

この記事では、Lambda関数とAPI Gatewayを使用して、GETリクエストを処理するシンプルなAPIを構築する手順を紹介します。

前提条件

この記事の内容を実施するには、以下の要件が揃っている必要があります。

AWSアカウント:
AWSアカウントを持っていることが前提です。

AWS CLIの設定:
ローカル環境からAWSにアクセスし操作できるよう、AWS CLIをセットアップし、認証情報を構成しておいてください。

LambdaとAPI Gatewayの基本理解:
両サービスの基本的な機能や操作方法についての理解が前提となります。公式ドキュメントや入門書を参考に、事前に学んでおくとスムーズです。

達成したいこと

API Gatewayを通じてHTTPリクエストがLambda関数にルーティングされる仕組みを構築します。

image.png
引用画像:https://towardsdatascience.com/aws-lambda-amazon-api-gateway-not-as-daunting-as-they-sound-part-1-d77b92f53626

APIの動作確認
構築したAPIが正しく動作し、GETリクエストに対して正しいレスポンスを返すか確認します。

実装手順

AWS LambdaとAPI Gatewayを用いたGETリクエストのサーバーレスアーキテクチャを構築する手順は、以下の3つのステップで進めます。

ステップ 1: Lambda関数の作成
ステップ 2: API Gatewayの設定
ステップ 3: APIのテスト

前提として、検証環境がすでに構築されていることを想定しています。

ステップ 1: Lambda関数の作成

まずは、Lambda関数を作成します。ここでは、GETリクエストに対して固定のメッセージを返すシンプルな処理を実装します。

以下の図は、Lambda関数とAPI Gatewayが統合された完成図です。

image.png

Lambda関数の作成

AWSマネジメントコンソールにログインし、Lambdaサービスに移動します。「関数の作成」をクリックし、関数名に「SimpleGetFunction」と入力し、ランタイムにはPython 3.xを選択します。

image.png

Lambda関数のコードを編集

以下のコードをLambda関数に追加します。このコードは、GETリクエストを受けた際に、固定のメッセージ 'Hello from AWS Lambda!' を返すだけの非常にシンプルな関数です。

import json

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from AWS Lambda!')
    }

関数を保存してテスト

関数を保存し、テストイベントを実施して動作を確認します(GETリクエストはテストイベントなしでも動作します)。

image.png

以下の通り、テスト結果も問題なく動作していることを確認できます。

Test Event Name
log

Response
{
  "statusCode": 200,
  "body": "\"Hello from AWS Lambda!\""
}

Function Logs
START RequestId: xxx-xxx-xxx Version: $LATEST
END RequestId: xxx-xxx-xxx
REPORT RequestId: xxx-xxx-xxx	Duration: 1.48 ms	Billed Duration: 2 ms	Memory Size: 128 MB	Max Memory Used: 32 MB

Request ID
xxx-xxx-xxx

ステップ 2: API Gatewayの設定

API Gatewayの作成

AWSマネジメントコンソールで「API Gateway」に移動し、「APIの作成」をクリックします。次に「HTTP API」を選択し、APIの名前に「SimpleGetAPI」と入力します。

image.png

Lambda統合の設定

APIの統合タブに移動し、「統合の追加」をクリックします。統合タイプとして「Lambda関数」を選択し、先ほど作成した「SimpleGetFunction」を指定します。

image.png

ルートとエンドポイントの設定

APIのルートに「GET /」を設定し、エンドポイントを作成します。

image.png

この例ではリソースパスを「/SimpleGetFunction」として設定していますが、必要に応じて自身の環境に合わせて変更してください。

image.png

また、オプション設定として「dev」ステージも作成しています。このステージは任意の名前で構成可能です。

APIのデプロイ

「デプロイ」ボタンをクリックし、APIをデプロイします。デプロイ後、公開URLが生成されます。

image.png

デプロイ後に表示される「SimpleGetAPI」のステージURLをメモしておきましょう。

image.png

ステップ 3: APIのテスト

APIエンドポイントの確認

デプロイ後、AWSコンソールで公開されたエンドポイントURLを確認します。例えば、次のようなURLが生成されます。

https://your-api-id.execute-api.ap-northeast-1.amazonaws.com/dev

私の環境では以下のURLが生成されました。

https://lbk2qzzla8.execute-api.ap-northeast-1.amazonaws.com/dev

ブラウザやcurlでリクエストを送信

ブラウザやcurlコマンドを使用して、GETリクエストを送信します。以下にcurlコマンドの例を示します。

curl https://your-api-id.execute-api.ap-northeast-1.amazonaws.com/

私の環境では、以下のコマンドを実行して想定通りの結果を得られていることが確認できました。

C:\Users\user>curl https://lbk2qzzla8.execute-api.ap-northeast-1.amazonaws.com/dev/SimpleGetFunction
"Hello from AWS Lambda!"
C:\Users\user>

生成されたURLに加えて、API作成時に指定したリソースパス「/SimpleGetFunction」を付け忘れないようにしましょう。

レスポンスの確認

正常に動作していれば、以下のようなレスポンスが返ってきます。

"Hello from AWS Lambda!"

まとめ

今回、AWS LambdaとAPI Gatewayを使用して、GETリクエストを処理するシンプルなサーバーレスアーキテクチャを構築しました。この方法により、サーバーを直接管理することなく、スケーラブルで低コストなAPIを作成することが可能です。

Lambdaは必要に応じて実行されるため、サーバーを常時稼働させる必要がなく、運用コスト削減に貢献します。

関連記事

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1