gpt4 book ai didi

python - 如何使用 boto3 从外部调用在 zappa 中设置的 @app.route 函数?

转载 作者:行者123 更新时间:2023-12-03 17:31:06 24 4
gpt4 key购买 nike

我在 arn:aws:lambda:us-east-1:xxxxx:function:xx-xx-prod 部署了一个 zappa lambda,它提供如下路线:

@app.route('/test', methods=['POST'])
def test():
response = app.response_class(
response=get_jsonstr({'test': 'OK'}),
status=200,
mimetype='application/json'
)
return response

我想从另一个 lambda 函数调用上面的 test() 函数,如下所示:
client = boto3.client('lambda', region_name='us-east-1')
r = client.invoke(
FunctionName='arn:aws:lambda:us-east-1:xxxxx:function:xx-xx-prod',
InvocationType='RequestResponse',
LogType='None',
Payload='',
)
print(r)
print(json.loads(r['Payload'].read()))

上面的调用成功如下:
{
'ResponseMetadata': {
'RequestId': '37ecc17b-03a9-11e9-9ea0-9dee231dfb79',
'HTTPStatusCode': 200,
'HTTPHeaders': {
'date': 'Wed, 19 Dec 2018 16:14:55 GMT',
'content-type': 'application/json',
'content-length': '4',
'connection': 'keep-alive',
'x-amzn-requestid': '37ecc17b-03a9-11e9-9ea0-9dee231dfb79',
'x-amzn-remapped-content-length': '0',
'x-amz-executed-version': '$LATEST',
'x-amzn-trace-id': 'root=1-5c1a6e7d-8063e5004eab150d6c967b0;sampled=0'
},
'RetryAttempts': 0
},
'StatusCode': 200,
'ExecutedVersion': '$LATEST',
'Payload': <botocore.response.StreamingBody object at 0x11296ce10>
}
None

我如何告诉 zappa 处理程序调用 test() 函数?

更新:

我发现我可以在 zappa_settings.json 中添加一个自定义处理程序,如下所示:
"lambda_handler": "lambdafilename.test"
然后,我像这样更改了 test():
@app.route('/test', methods=['POST'])
def test(event=None, context=None):
return json.dumps({'test': 'OK1'})

现在,调用返回预期结果:
{"test": "OK1"}
但是,使用这个自定义处理程序,我失去了 zappa/flask 提供的 WSGI 功能。

最佳答案

我查看了 Zappa CLI 的源代码弄清楚如何zappa invoke command在内部工作,因为这正是我们想要的:
以远程和编程方式调用 Zappa lambda 中的特定函数。

payload = {'command': '<module_path>.lambda_handler_function'}
client = boto3.client('lambda', region_name='us-east-1')
client.invoke(
FunctionName='arn:aws:lambda:<arn>:function:<your_zappa_lambda_name>',
InvocationType='RequestResponse',
LogType='Tail',
Payload=json.dumps(payload),
)

请记住,您的函数必须接受 lambda eventcontext成为一个有效的入口点。

欲知更多信息 zappa invoke命令工作:

if command == 'invoke'

command = {key: function_name}

关于python - 如何使用 boto3 从外部调用在 zappa 中设置的 @app.route 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53856069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com