也许您可以将下一个代码添加到添加函数中,这样它也接受有效负载:
@app.route('/{exp}', methods=['GET'])
def add(exp, *args, **kwargs):
if isinstance(exp, dict):
# exp is event here
request = exp.get('request', {'x': 0, 'y': 0})
exp = exp.get('exp', 'add')
我将编写一个通用示例,您可以轻松修改它以满足您的需求。在你的情况下,数据字典会有request
and exp
键,并且您需要找到 lambda 函数的 arn。
AWS 文档 Lambda.invoke https://boto3.readthedocs.io/en/latest/reference/services/lambda.html#Lambda.Client.invoke
假设从现在开始我们有 2 个名为“master”和“slave”的 Lambda。主人会召唤奴隶。
目前有3种类型的调用:
- RequestResponse(默认):主机调用并等待从机响应
- 事件:异步,主调用并忘记
- DryRun:运行前做一些验证
我坚持#1 RequestResponse:
Slave:
def lambda_handler(event, context):
result = {}
result['event'] = event
result['result'] = "It's ok"
return result
它的 arn 是这样的arn:aws:lambda:us-east-1:xxxxxxxxxxxxxx:function:slave
在示例中,slave 只是一个 echo 函数
现在,master 需要必要的角色权限才能调用它,以及 arn 或名称。然后你可以写这样的东西:
import boto3
from datetime import datetime
import json
client = boto3.client('lambda')
def lambda_handler(event, context):
arn = 'arn:aws:lambda:us-east-1:xxxxxxxxxxxxxx:function:slave'
data = {'my_dict': {'one': 1, 'two': 2}, 'my_list': [1,2,3], 'my_date': datetime.now().isoformat()}
response = client.invoke(FunctionName=arn,
InvocationType='RequestResponse',
Payload=json.dumps(data))
result = json.loads(response.get('Payload').read())
return result
通常你会得到 arn 类似的东西os.environ.get('slave_arn')
所有来自/传入 lambda 的数据都必须是 JSON 可序列化的。