APIGatewayのLambda統合で引数を受け取るサンプルを紹介します。
引数の値によってLambdaの返却値を動的にします。
以下が今回作成するAPIの概略図です。
固定値を返すAPIを作成
まずは固定値を返すAPIを作成します。
以下の記事を参照ください。
APIGatewayの設定
固定値を返すAPIを作成したら、動的値を返却できるように変更を加えていきます。
メソッドを選択し、「メソッドリクエスト」を選択します。

「クエリ文字列の追加」からクエリパラメタ「param」を追加します。
この設定によってAPIGatewayでクエリパラメタを受け取ることができます。

次に「統合リクエスト」を選択します。

「Lambdaプロキシ統合の使用」にチェックを入れます。
これにより、APIGatewayで受け取ったパラメータをLambdaに渡すことができます。

これでAPIGatewayでパラメ―タを受け取る設定が完了しました。
Lambda関数の作成
次にパラメータを受けて動的な返却値を返すLambdaを作成します。
APIGatewayから渡されたパラメータは以下のような形式でLambdaに渡されます。
{
'resource': '/',
'path': '/',
'httpMethod': 'GET',
'headers': None,
'multiValueHeaders': None,
'queryStringParameters': {'param': '1'},
'multiValueQueryStringParameters': {'param': ['1']},
'pathParameters': None,
'stageVariables': None,
'requestContext':
{
'resourceId': 'xxxxxxxxxxx',
'resourcePath': '/',
'httpMethod': 'GET',
'extendedRequestId': 'MDc-2HgEtjMFiCQ=',
'requestTime': '05/May/2020:10:37:44 +0000',
'path': '/',
'accountId': 'xxxxxxxxxxxxxxxxxxxxx',
'protocol': 'HTTP/1.1',
'stage': 'test-invoke-stage',
'domainPrefix': 'testPrefix',
'requestTimeEpoch': 1588675064508,
'requestId': 'xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx',
'identity':
{
'cognitoIdentityPoolId': None,
'cognitoIdentityId': None,
'apiKey': 'test-invoke-api-key',
'principalOrgId': None,
'cognitoAuthenticationType': None,
'userArn': 'arn:aws:iam::xxxxxxxxxxxxxxxx:user/xxxxx',
'apiKeyId': 'test-invoke-api-key-id',
'userAgent': 'aws-internal/3 aws-sdk-java/1.11.749 Linux/4.9.184-0.1.ac.235.83.329.metal1.x86_64 OpenJDK_64-Bit_Server_VM/25.242-b08 java/1.8.0_242 vendor/Oracle_Corporation',
'accountId': 'xxxxxxxxxxxxx',
'caller': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'sourceIp': 'test-invoke-source-ip',
'accessKey': 'xxxxxxxxxxxxxxxxxxxx',
'cognitoAuthenticationProvider': None,
'user': 'xxxxxxxxxxxxxxxxxxxxxxx'
},
'domainName': 'testPrefix.testDomainName',
'apiId': 'xxxxxxxxxxxxxxxx'
},
'body': None,
'isBase64Encoded': False
}
この中に「queryStringParameters」という値があります。
この中にAPIGatewayが受け取ったパラメータが格納されています。
'queryStringParameters': {'param': '1'},
Lambdaでこの値を取得するには以下のように処理を記述すればよいです。
import json
def lambda_handler(event, context):
# ペイロードからクエリパラメタを取得
body = 'param is ' + event['queryStringParameters']['param']
res = {
"statusCode" : 200,
"headers" : {"Access-Control-Allow-Origin" : '*'},
"body" : body
}
return res
Lambdaを作成したら「新しいバージョンの発行」をしておきましょう。
APIGatewayにLambdaを設定する
最後に作成したLambdaをAPIGatewayに統合します。
既にAPIを作成してしまっている場合は、Lambdaを変更することはできないので、新たにAPIメソッドを作成する必要があります。
Lambdaを設定したらデプロイを実行し、外部ネットワークから呼び出せるようにしましょう。
ブラウザから以下のURLにアクセスすることで、動的なレスポンスが返ってくることがわかります。
// APIにパラメータ付きリクエスト https://[YOUR_API_URL]?param=[value] // 動的な値が返ってくる param is [value]