ペイロード
Lambda関数のPayloadバージョン2.0では、以下のような形式でデータが渡されます。
{
"version": "2.0",
"routeKey": "POST /my-endpoint",
"rawPath": "/my-endpoint",
"rawQueryString": "param1=value1¶m2=value2",
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en-US,en;q=0.5",
"Content-Type": "application/json",
"Host": "lambda.example.com",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
},
"requestContext": {
"accountId": "123456789012",
"apiId": "abcdefghij",
"domainName": "lambda.example.com",
"domainPrefix": "lambda",
"http": {
"method": "POST",
"path": "/my-endpoint",
"protocol": "HTTP/1.1",
"sourceIp": "192.0.2.1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
},
"requestId": "c6af9ac6-7b61-11e6-9a41-93e8deadbeef",
"routeKey": "POST /my-endpoint",
"stage": "prod",
"time": "25/Mar/2020:19:36:42 +0000",
"timeEpoch": 1585175802426
},
"isBase64Encoded": false,
"body": "{\"key1\":\"value1\", \"key2\":\"value2\", \"key3\":\"value3\"}"
}
この例では、Lambda関数に渡されるデータはJSON形式です。versionフィールドにはバージョン番号が含まれ、routeKeyフィールドにはリクエストのルートキーが格納されています。headersフィールドにはHTTPリクエストヘッダーが含まれ、bodyフィールドにはリクエストの本文が含まれます。
必要に応じて、headersフィールド内のHTTPヘッダーやbodyフィールド内の本文データを解析して使用することができます。また、リクエストに関連する情報はrequestContextフィールド内に格納されています。
上記のサンプルはあくまで一例であり、実際のリクエストデータに応じてフィールドの内容は変化します。Lambda関数内でこのデータを適切に解析して処理することが重要です。
Expressでプロキシ
1. Expressアプリケーションを作成し、Lambda関数として実行するための設定を追加します。
const express = require('express');
const app = express();
app.use(express.json());
// Lambda関数として実行するためのエントリーポイントを作成します
exports.handler = async (event, context) => {
const response = await app.run(event, context);
return response;
};
2. ExpressアプリケーションでLambdaイベントを処理するためのルートを定義します。
app.post('/my-endpoint', (req, res) => {
// リクエストデータの処理
const requestBody = req.body;
// レスポンスデータの作成
const responseData = {
message: 'Hello from Express!',
data: requestBody
};
// レスポンスの送信
res.json(responseData);
});
3. ExpressアプリケーションをAWS Lambdaにデプロイします。このためには、AWS Serverless Application Model(SAM)やServerless Frameworkなどのツールを使用することができます。
4. Lambda関数の設定でペイロードバージョン2.0を有効にします。これにより、Expressアプリケーションに渡されるイベントの形式がバージョン2.0になります。
以上の手順により、ExpressアプリケーションがLambda関数として動作し、ペイロードバージョン2.0のリクエストを処理することができます。Expressのルーティングやミドルウェアを使用して、さまざまなエンドポイントや処理を追加することも可能です。