この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
API Gateway + AWS Lambda(C#)でHTTPヘッダーやパスパラメータ、ステージ変数などの各種情報を取得する方法を調べました。API Gatewayの設定でプロキシ統合にチェックを入れた場合の方法です。言語はC#で.NET Coreのバージョンは3.1です。
参照しているパッケージ
Lambdaのパッケージは以下を参照しています。
- Amazon.Lambda.APIGatewayEvents 2.4.0
- Amazon.Lambda.Core 1.2.0
- Amazon.Lambda.Serialization.SystemTextJson 2.1.0
- AWSSDK.APIGateway 3.5.2.15
- AWSSDK.Lambda 3.5.5.3
以下がLambdaファンクションのテストコードです。クエリストリング、パスパラメータ、ステージ変数を入れて試しましたが取得できていました。
using Amazon.Lambda.Core;
using System;
using System.Net;
using System.Text.Json;
using System.Text.Json.Serialization;
using Amazon.Lambda.APIGatewayEvents;
using System.Text;
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]
namespace Test
{
public class Function
{
public APIGatewayProxyResponse FunctionHandler(Request request, ILambdaContext context)
{
Console.WriteLine("resource:" + request.Resource);
Console.WriteLine("path:" + request.Path);
Console.WriteLine("httpMethod:" + request.HttpMethod);
Console.WriteLine("headers:" + request.Headers.ToString());
Console.WriteLine("multiValueHeaders:" + request.MultiValueHeaders.ToString());
Console.WriteLine("queryStringParameters:" + request.QueryStringParameters);
Console.WriteLine("multiValueQueryStringParameters:" + request.MultiValueQueryStringParameters);
Console.WriteLine("pathParameters:" + request.PathParameters);
Console.WriteLine("stageVariables:" + request.StageVariables);
Console.WriteLine("requestContext:" + request.RequestContext);
Console.WriteLine("body:" + request.Body);
Console.WriteLine("isBase64Encoded:" + request.IsBase64Encoded);
return new APIGatewayProxyResponse
{
StatusCode = (int)HttpStatusCode.OK
};
}
}
public class Request
{
[JsonPropertyName("resource")]
public string Resource { get; set; }
[JsonPropertyName("path")]
public string Path { get; set; }
[JsonPropertyName("httpMethod")]
public string HttpMethod { get; set; }
[JsonPropertyName("headers")]
public JsonElement Headers { get; set; }
[JsonPropertyName("multiValueHeaders")]
public JsonElement MultiValueHeaders { get; set; }
[JsonPropertyName("queryStringParameters")]
public JsonElement QueryStringParameters { get; set; }
[JsonPropertyName("multiValueQueryStringParameters")]
public JsonElement MultiValueQueryStringParameters { get; set; }
[JsonPropertyName("pathParameters")]
public JsonElement PathParameters { get; set; }
[JsonPropertyName("stageVariables")]
public JsonElement StageVariables { get; set; }
[JsonPropertyName("requestContext")]
public JsonElement RequestContext { get; set; }
[JsonPropertyName("body")]
public string Body { get; set; }
[JsonPropertyName("isBase64Encoded")]
public Boolean IsBase64Encoded { get; set; }
}
}
以下のドキュメントを参考にしました。