我遵循this tutorial自动将我的所有DynamoDB流索引到我创建的亚马逊ElasticSearch服务集群中。
我一步一步地遵循它,我创建了所有的权限策略。
然而,当我在测试时,我的Amazon ES集群中没有任何内容被索引。当我检查CloudWatch时,我看到这个日志:
('ERROR: ', 'Traceback (most recent call last):
File "/var/task/lambda_function.py", line 123, in lambda_handler
return _lambda_handler(event, context)
File "/var/task/lambda_function.py", line 219, in _lambda_handler
post_to_es(es_payload) # post to ES with exponential backoff
File "/var/task/lambda_function.py", line 86, in post_to_es
es_ret_str = post_data_to_es(payload, es_region, creds, es_endpoint, \'/_bulk\')
File "/var/task/lambda_function.py", line 53, in post_data_to_es
req = botocore.awsrequest.create_request_object(params)
File "/var/runtime/botocore/awsrequest.py", line 314, in create_request_object
request_object.context.update(r[\'context\'])
KeyError: \'context\'
')我不明白这个问题。我所知道的是我的Lambda函数成功地触发了每个DynamoDB流,可以将日志发送到CloudWatch,但无法在亚马逊ES中索引这些数据。
有人能帮我解决这个问题吗?
发布于 2016-08-03 15:38:21
aws lambda使用的botocore代码最近发生了重大变化。
受影响的代码行是:
req = botocore.awsrequest.create_request_object(params)
对于新的更改,他们希望参数参数包含'context‘字段。
因此,请将上下文字段添加到参数参数中:示例:params = {'method': method, 'url': proto + host + path, 'region': region, 'headers': {'Host': host}, 'body': payload,'context': {'signing': {'region': 'us-east-1'}}}
完成上述更改后,您的lambda应该能够成功运行。
详细信息:在文件botocore.awsrequest中,第314行的代码更改导致了此问题。https://github.com/boto/botocore/commit/28b8831f5f8518bef5accf994fc377c58a3569f7#diff-cb00fc815f8f80ae15e7d0cecc74b395
https://stackoverflow.com/questions/38460837
复制相似问题