如何通过aws API网关将json对象发布到aws lambda函数?
p.s.-我的目标是在python中编写lambda函数,然后将其发布到aws SQS。
提前致谢。
答案 0 :(得分:5)
我明白了。现在,我有一个API Gateway acceptiong客户端发布了指定格式的JSON数据,然后将其传递给AWS-Lambda函数,该函数将数据转储到AWS-SQS中。这些步骤将在下面详细说明 -
第1步 -
使用任何支持的语言创建lambda函数(我使用过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库,无需再添加任何文件。另请注意,除了名称之外,我没有为SQS指定任何详细信息,因为我的Lambda函数和SQS都位于同一AWS区域。我将整个“event”变量转储到SQS,因为它只包含发布的JSON数据。
第2步 -
现在在AWS控制台中转到“API网关”,然后创建一个新的API网关,然后在资源下创建一个“POST”操作。
现在,在帖子操作下,点击“整合请求”。现在添加一个正文模板,如下面给出的示例 -
{
"userMobile" : "$input.params('userMobile')",
"ClientID" : "$input.params('ClientID')",
"routeTitle" : "$input.params('routeTitle')"
}
另外,请确保您的API的“集成类型”为“Lambda”,并且我们在STEP-1中创建的Lambda函数已连接到API。
现在,我们差不多完成了。现在我们所要做的就是为我们创建的API创建一个阶段并部署API。 ***
请注意部署后API的HTTP URL。
第3步 -
现在转到“简单排队服务(SQS)”,然后创建一个简单的SQS并保留所有默认参数。确保队列名称与Lambda函数中提供的队列名称匹配,并且Lambda函数和SQS都位于同一AWS区域。
现在,您可以将相同格式的JSON数据发送到您的API,您的Lambda函数会将其转储到SQS队列,您可以在那里查看数据。
您还可以使用Fidler等工具测试API。
***确保每次对其进行更改时都重新部署API。
答案 1 :(得分:0)
是的,你可以,
如果使用Lambda Proxy集成从API网关触发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
}