Ati*_*ska 3 python-2.7 aws-lambda aws-api-gateway
这是关于Google Drive API集成的,我有一个Lambda python事件代码,当我这样做时会被触发。这是Google Drive API的推送通知功能。
为了允许Google驱动器推送通知调用我们,我已使用其API将关联的api网关终结点创建为webhook。现在,当我编辑文件时,此lambda确实会被触发,因此这意味着webhook成功并且google回调了该钩子。
进行任何更改后,Google云端硬盘都会将HTTP POST消息发送到webhook网址。
以下HTTP标头以空体返回给lambda函数:
{
"Content-Type": "application/json; utf-8",
"Content-Length": "5000",
"X-Goog_Channel-ID": "05a349fd-c363-4d8c-9409-8b6f310b7379",
"X-Goog-Channel-Token": "to66728b-21c7-4605-8445-d7a297b9ae7f",
"X-Goog-Channel-Expiration": "Fri, 14 Oct 2016 20:05:58 GMT",
"X-Goog-Resource-ID": "SuIweVX_iBzKmM5PQVMbIDYFrr8",
"X-Goog-Resource-URI": "https://www.googleapis.com/drive/v3/files/1QvVo67IJ3_o5g2tCyxpNA29JHx183-bOOblKMoSAGv4?acknowledgeAbuse=false&alt=json",
"X-Goog-Resource-State": "update",
"X-Goog-Changed": "content,properties",
"X-Goog-Message-Number": "480896"
}
Run Code Online (Sandbox Code Playgroud)
但是,lambda处理程序的事件对象为空。我假设事件对象是HTTP主体,而在我的情况下,主体为空,因此我在API Gateway POST方法的Integration Request(以检索标头)中添加了自定义映射模板,如下所示:
#set($inputRoot = $input.path('$'))
{
"Content-Type" : "$input.params('Content-Type')",
"Content-Length" : "$input.params('Content-Length')",
"X-Goog-Channel-ID" : "$input.params('X-Goog-Channel-ID')",
"X-Goog-Channel-Token" : "$input.params('X-Goog-Channel-Token')",
"X-Goog-Channel-Expiration" : "$input.params('X-Goog-Channel-Expiration')",
"X-Goog-Resource-ID" : "$input.params('X-Goog-Resource-ID')",
"X-Goog-Resource-URI" : "$input.params('X-Goog-Resource-URI')",
"X-Goog-Resource-State" : "$input.params('X-Goog-Resource-State')",
"X-Goog-Changed" : "$input.params('X-Goog-Changed')",
"X-Goog-Message-Number" : "$input.params('X-Goog-Message-Number')",
"body" : $input.json('$')
}
Run Code Online (Sandbox Code Playgroud)
但是我不确定如果从Google Drive接收到这些标头,应该如何从事件对象中检索这些标头。仅记录事件对象将其显示为空{}。如果上述不正确,预期的映射是什么?另外,event ['header-name']甚至都没有执行,似乎在我打印时
print 'Event header:{}'.format(event['header-name'])甚至没有在日志中得到Event header语句。因此,这意味着该行不会被执行,而是上面执行的行,这是简单的打印语句,就像print 'Printing results'我不确定为什么代码未到达那里或是否有错误。
您能否指导我如何使用python中的事件对象检索标头?如果我上面的所有步骤看起来都正确,或者我错过了什么?
我能够顺利进行此工作。我不能从您的帖子中得知您的事件对象为何为空。我最好的猜测是您忘记将标头添加到“方法请求”的“ HTTP请求标头”部分。
这是我的Lambda函数:
from __future__ import print_function
import json
print('Loading function')
def lambda_handler(event, context):
print("Received event: " + json.dumps(event, indent=2))
print("Content-Type = " + event['Content-Type'])
print("Content-Length = " + event['Content-Length'])
print("X-Goog-Channel-ID = " + event['X-Goog-Channel-ID'])
print("X-Goog-Channel-Token = " + event['X-Goog-Channel-Token'])
print("X-Goog-Channel-Expiration = " + event['X-Goog-Channel-Expiration'])
print("X-Goog-Resource-ID = " + event['X-Goog-Resource-ID'])
print("X-Goog-Resource-URI = " + event['X-Goog-Resource-URI'])
print("X-Goog-Resource-State = " + event['X-Goog-Resource-State'])
print("X-Goog-Changed = " + event['X-Goog-Changed'])
print("X-Goog-Message-Number = " + event['X-Goog-Message-Number'])
print("body = " + event['body'])
return {
'statusCode': '200',
'body': event['body'],
'headers': {
'Content-Type': 'application/json',
'X-Goog-Channel-ID': event['X-Goog-Channel-ID'],
'X-Goog-Channel-Token': event['X-Goog-Channel-Token'],
'X-Goog-Channel-Expiration': event['X-Goog-Channel-Expiration'],
'X-Goog-Resource-ID': event['X-Goog-Resource-ID'],
'X-Goog-Resource-URI': event['X-Goog-Resource-URI'],
'X-Goog-Resource-State': event['X-Goog-Resource-State'],
'X-Goog-Changed': event['X-Goog-Changed'],
'X-Goog-Message-Number': event['X-Goog-Message-Number'],
}
}
Run Code Online (Sandbox Code Playgroud)
我的映射模板与您的相同。
这是测试调用的返回值,使用示例中的相同输入标头:
{
"body": "Test input body content",
"headers": {
"X-Goog-Resource-ID": "SuIweVX_iBzKmM5PQVMbIDYFrr8",
"X-Goog-Channel-ID": "",
"X-Goog-Resource-State": "update",
"X-Goog-Changed": "content,properties",
"X-Goog-Resource-URI": "https://www.googleapis.com/drive/v3/files/1QvVo67IJ3_o5g2tCyxpNA29JHx183-bOOblKMoSAGv4?acknowledgeAbuse=false&alt=json",
"X-Goog-Message-Number": "480896",
"X-Goog-Channel-Token": "to66728b-21c7-4605-8445-d7a297b9ae7f",
"Content-Type": "application/json",
"X-Goog-Channel-Expiration": "Fri, 14 Oct 2016 20:05:58 GMT"
},
"statusCode": "200"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9746 次 |
| 最近记录: |