0
0

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

Last updated at Posted at 2024-10-05

はじめに

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

イベント駆動型のアーキテクチャを採用することで、システムのスケーリング、コストの最適化、運用負担の軽減などのメリットを享受できます。

この記事では、Lambda関数をAPI Gatewayで公開し、シンプルなAPIを構築するための具体的な手順を解説します。

前提条件

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

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

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

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

達成したいこと

API Gatewayを使ってLambda関数を公開:
API Gatewayを通じてHTTPリクエストをLambda関数にルーティングする方法を学びます。

APIの動作確認:
構築したAPIを実際にテストし、リクエストが正常に処理されているか確認します。

スクリーンショット 2024-10-05 23.05.27.png

POSTリクエストの受信と、その内容をLambda関数で処理し、結果を返すプロセスを実装します。

補足事項

Lambdaが選ばれる理由について
Lambdaのサーバーレスアーキテクチャにより、トラフィックの増加に応じた自動スケーリングが可能です。これにより、急なアクセス増にも対応できる堅牢なAPIを構築できます。

Lambdaはリクエストに応じて起動されるため、常時稼働するサーバーを持たない構成が可能です。これにより、稼働時間に応じた従量課金が適用され、効率的なコスト管理が実現します。

実装手順

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

最初に、AWS Lambdaで関数を作成し、APIからのリクエストに応答する処理を実装します。

今回はリクエストのボディから「name」を取得し、挨拶メッセージを返すシンプルな関数を作成します。

1. AWS Lambdaの作成

AWSコンソールにログインし、Lambdaサービスに移動して「関数の作成」をクリックします。関数名に「HelloWorldFunction」と入力し、ランタイムにはPython 3.x(またはNode.jsなど他のランタイム)を選択します。

image.png

「関数の作成」ボタンを押して、関数を作成します。

2. Lambda関数コードの編集

次に、Lambda関数に処理を追加します。以下はPythonを使用した例です。API Gatewayでエンコードの問題が発生した場合は、Lambda関数側でBase64デコードの処理を追加します。

import json
import base64

def lambda_handler(event, context):
    body = event['body']
    
    # Base64デコードの処理
    try:
        body = base64.b64decode(body).decode('utf-8')
    except Exception:
        pass

    response = {
        'statusCode': 200,
        'body': json.dumps(f"Hello, {body}!")
    }
    return response

この関数は、API Gatewayから送信された「name」を受け取り、「Hello, [name]」というメッセージを返します。

image.png

3. 関数を保存してテスト

コードの編集が終わったら「保存」をクリックし、テストイベントを設定して動作を確認します。

テストイベントのJSON例:

{
  "body": "Alice"
}

テストを実行し、「Hello, Alice!」と応答が返ってくることを確認します。

ステップ 2: API Gatewayの設定

次に、API Gatewayを設定し、HTTPリクエストでLambda関数を呼び出せるようにします。

1. API Gatewayの作成

AWSコンソールで「API Gateway」に移動し、「APIの作成」をクリックします。次に「HTTP API」を選択し、APIの名前に「HelloWorldAPI」と入力して作成を進めます。

image.png

名前を「HelloWorldAPI」と入力し、デフォルト設定のままで「作成」をクリックします。

image.png

2. Lambda統合の設定

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

image.png

3. APIエンドポイントの設定

APIのルートに「POST /」を設定し、「エンドポイントの作成」を行います。デフォルトの「POST」メソッドを使用して保存します。

image.png

4. APIデプロイ

APIをデプロイするには、「デプロイ」ボタンをクリックし、公開URLが生成されます。このURLが、API Gatewayを通じてLambda関数を呼び出すエンドポイントです。

image.png

ステップ 3: APIのテスト

公開されたAPIエンドポイントにPOSTリクエストを送って、Lambda関数が正しく応答するか確認します。

image.png

1. APIエンドポイントの確認

AWSコンソールでAPI GatewayのエンドポイントURLを確認します。例えば次のようなURLが生成されます。

image.png

$defaultステージ:https://upnujwfjw8.execute-api.ap-northeast-1.amazonaws.com
devステージ:https://upnujwfjw8.execute-api.ap-northeast-1.amazonaws.com/dev

2. Postmanやcurlを使ってリクエストを送信

APIをテストするために、Postmanやcurlを使用します。以下はcurlのコマンド例です。

curl -X POST https://clxi8gxtp1.execute-api.ap-northeast-1.amazonaws.com/devv/HelloWorldFunctionn -d "BOB"

curlコマンドでアクセスする際のURLについては、API作成時に設定したリソースパスが必要になります。忘れないように注意してください!

3. レスポンスの確認

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

{
  "Hello, Bob!"
}

実際のプロンプト画面

image.png

この手順を通じて、API GatewayとLambdaを組み合わせた簡単なサーバーレスAPIの構築が完了しました!

まとめ

今回のハンズオンでは、AWS LambdaとAPI Gatewayを使ってシンプルなサーバーレスアーキテクチャを構築しました。このように、サーバーを管理することなくスケーラブルなAPIを実装できることがAWSの強みです。

Lambdaのスケーリング設定やセキュリティグループ、IAMロールなどを適切に設定することで、より実用的なアーキテクチャを作成できます。

参考文献

0
0
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
0