AWS API Gatewayを使用してLambda関数をプロキシ統合する際に、正しいレスポンス形式を使用しないと500エラーが発生することがあります。
本記事では、Rubyで書かれたLambda関数を使用して、正しいレスポンス形式を返す方法について説明します。
Lambdaプロキシ統合とは
Lambdaプロキシ統合は、API Gatewayが受け取ったリクエストをそのままLambda関数に渡し、Lambda関数からのレスポンスをそのままクライアントに返すシンプルな統合方法です。
この統合方法を使用することで、リクエストやレスポンスのマッピング設定を簡略化できます。
正しいレスポンス形式
Lambdaプロキシ統合を使用する場合、Lambda関数は以下の形式でレスポンスを返す必要があります:
{
"statusCode": 200,
"headers": {
"Content-Type": "application/json"
},
"body": "{\"message\":\"success\"}"
}
bodyフィールドはJSON文字列である必要があるため、RubyでJSON形式に変換する必要があります。
Rubyでの実装例
以下は、Rubyで書かれたLambda関数の例です。この関数は、正しい形式でレスポンスを返します。
require 'json'
def lambda_handler(event:, context:)
{
statusCode: 200,
headers: {
"Content-Type" => "application/json"
},
body: JSON.generate({
message: 'success'
})
}
end
ポイント
statusCode: HTTPステータスコードを指定します。
headers: レスポンスヘッダーを指定します。
Content-Typeはapplication/jsonに設定します。
body: JSON形式のレスポンスボディを文字列として返します。
RubyのJSON.generateメソッドを使用して、ハッシュをJSON文字列に変換します。
まとめ
AWS API GatewayでLambdaプロキシ統合を使用する際には、Lambda関数が正しいレスポンス形式を返すことが重要です。
RubyでLambda関数を実装する場合、bodyフィールドはJSON文字列である必要があるため、JSON.generateメソッドを使用してJSON形式に変換します。
この形式を守ることで、500エラーを回避し、API GatewayとLambda関数の統合をスムーズに行うことができます。