我正在尝试将API网关与Lambda代理集成,
API服务器接收带有这些参数的请求,即邮政编码和房屋
https://api.domain.com/getAddressproxy?postcode=XX2YZ&house=123
但是,从API网关到Lambda代理的测试不会返回值
https://xxxxxxxxxx.execute-api.eu-west-1.amazonaws.com/Test/getaddressproxy?postcode=XX2YZ&house=123
我认为问题在于lambda函数没有将查询字符串参数传递给API服务器。
我知道如何将查询字符串参数传递给请求对象吗?
代码:
from __future__ import print_function
import json
import urllib2
import ssl
print('Loading function')
target_server = "https://api.domain.com"
def lambda_handler(event, context):
print("Got event\n" + json.dumps(event, indent=2))
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
print("Event here: ")
print(event['path'])
print(event["queryStringParameters"])
req = urllib2.Request(target_server + event['path'])
if event['body']:
req.add_data(event['body'])
# Copy only some headers
copy_headers = ('Accept', 'Content-Type')
for h in copy_headers:
if h in event['headers']:
req.add_header(h, event['headers'][h])
out = {}
try:
resp = urllib2.urlopen(req, context=ctx)
out['statusCode'] = resp.getcode()
out['body'] = resp.read()
except urllib2.HTTPError as e:
out['statusCode'] = e.getcode()
out['body'] = e.read()
return out
答案 0 :(得分:2)
event["queryStringParameters"]
是字典,如果未传递,则为None
。将其转换为查询字符串并附加到请求URL。
...
import urllib
...
qs = urllib.urlencode(event["queryStringParameters"] or {})
req = urllib2.Request(
''.join(
(target_server, event['path'], '?', qs)
)
)
答案 1 :(得分:2)
您可以在Lambda中使用查询字符串,如下所示
var result = event["queryStringParameters"]['queryStringParam1']
根据您的API网址
var postcode = event["queryStringParameters"]['postcode']
var house = event["queryStringParameters"]['house']
或者您可以在集成请求部分中使用正文映射模板,并获取请求正文和查询字符串。在body body模板上构造一个新的JSON,它将包含来自请求体和查询字符串的数据。当我们添加正文映射模板时,您的业务逻辑将获取我们在正文映射模板中构建的JSON。
要获取查询字符串的体内映射模板,请执行,
$ input.params(' querystringkey&#39)
例如,在体内映射模板中,
#set($inputRoot = $input.path('$'))
{
"firstName" : "$input.path('$.firstName')",
"lastName" : "$input.path('$.lastName')"
"language" : "$input.params('$.language')"
}

有关身体贴图模板的详细信息,请阅读https://aws.amazon.com/blogs/compute/tag/mapping-templates/