Aws APIゲートウェイを介してjsonオブジェクトをawslambda関数に投稿するにはどうすればよいですか?
p.s.-私の目標は、ラムダ関数をpythonに記述し、それをawsSQSに投稿することです。
前もって感謝します。
私はそれを考え出した。これで、API Gateway Acceptiongクライアントが指定された形式のJSONデータを投稿し、それをAWS-Lambda関数に渡して、データをAWS-SQSにダンプしました。手順については、以下で詳しく説明します-
ステップ1-
サポートされている言語でラムダ関数を作成します(私はPython 3.6を使用しました)。サンプルコードは次のとおりです。
import boto3
import json
def lambda_handler(event, context):
sqs = boto3.resource('sqs')
queue = sqs.get_queue_by_name(QueueName='userData')
response = queue.send_message(MessageBody=json.dumps(event))
return {
"status":"0",
"message":"",
"pubId":event["ClientID"],
"routetitle":event["routeTitle"]
}
注:awsコンテキストで使用できるjsonライブラリとboto3ライブラリの両方をインポートしましたが、ファイルを追加する必要はありません。また、Lambda関数とSQSの両方が同じAWSリージョンにあるため、名前以外のSQSの詳細を指定していないことも確認してください。投稿されたJSONデータのみが含まれているため、「イベント」変数全体をSQSにダンプしています。
ステップ2-
AWSコンソールで「APIGateway」に移動し、新しいAPI Gatewayを作成してから、リソースの下に「POST」アクションを作成します。
次に、投稿アクションの下で、[統合リクエスト]をクリックします。次に、以下の例のようにボディテンプレートを追加します-
{
"userMobile" : "$input.params('userMobile')",
"ClientID" : "$input.params('ClientID')",
"routeTitle" : "$input.params('routeTitle')"
}
また、APIの「IntegrationType」が「Lambda」であり、STEP-1で作成したLambda関数がAPIに接続されていることを確認してください。
これで、ほぼ完了です。これで、作成したAPIのステージを作成し、APIをデプロイするだけです。 ***
デプロイ後のAPIのHTTPURLに注意してください。
ステップ3-
次に、「Simple Queuing Service(SQS)」に移動し、すべてのデフォルトパラメータを保持したままSimpleSQSを作成します。キュー名がLambda関数で指定したものと一致し、Lambda関数とSQSの両方が同じAWSリージョンにあることを確認してください。
これで、APIと同じ形式のJSONデータをPOSTできます。Lambda関数はそれをSQSキューにダンプし、そこでデータを表示できます。
Fidlerなどのツールを使用してAPIをテストすることもできます。
*** APIに変更を加えるたびに、必ずAPIを再デプロイしてください。
はい、できます、
Lambdaプロキシ統合を使用してAPIGatewayからLambda関数をトリガーすると、リクエストは以下のようなペイロードで関数を呼び出します。ご覧のとおり、必要なのはJSON本体属性を解析することだけです。
{
"resource": /path",
"path": "/path",
"httpMethod": "PUT",
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, sdch, br",
"Accept-Language": "en-US,en;q=0.8,pl;q=0.6,en-GB;q=0.4",
"Cache-Control": "no-cache",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-Country": "PL",
"Content-Type": "application/json",
"DNT": "1",
"Host": "api.stockflare.com",
"Origin": "http://localhost:3000",
"Pragma": "no-cache",
"Referer": "http://localhost:3000/databank",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36",
"Via": "1.1 XXXXX.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "XXXXXX==",
"X-Amzn-Trace-Id": "Root=XXXXXX",
"X-Forwarded-For": "XXXXX",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"queryStringParameters": null,
"pathParameters": null,
"stageVariables": null,
"requestContext": {
"path": "/path",
"accountId": "XXXXX",
"resourceId": "p0flbp",
"stage": "v1",
"requestId": "XXXXX",
"identity": {
"cognitoIdentityPoolId": null,
"accountId": null,
"cognitoIdentityId": null,
"caller": null,
"apiKey": "",
"sourceIp": "XXXXXX",
"accessKey": null,
"cognitoAuthenticationType": null,
"cognitoAuthenticationProvider": null,
"userArn": null,
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36",
"user": null
},
"resourcePath": "/path",
"httpMethod": "PUT",
"apiId": "XXXXXX"
},
"body": "{\"fields\":[\"forecast_pe\"],\"countries\":[\"_all\",\"amer\",\"apac\",\"emea\"],\"sectors\":[\"50\",\"51\"]}",
"isBase64Encoded": false
}