Invoke an AWS lambda across regions(跨区域调用AWS lambda)
本文介绍了跨区域调用AWS lambda的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有三个lambda函数:oss、worker1、worker2。在使用boto3.client.voke时,我可以从BOSS调用worker1。这两者位于同一地区。
Worker2位于单独的区域。尝试从BOSS调用worker2时,返回以下错误:
"调用调用操作时出现错误(ResourceNotFoundException):在此区域(‘us-West-2’)中无法访问来自‘us-East-1’的函数"。
BOSS具有执行角色,权限如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"lambda:InvokeFunction"
],
"Effect": "Allow",
"Resource": "arn:aws:lambda:*:*:*"
}
]
}
请帮助澄清如何传递权限才能起作用。 谢谢
编辑:
Master和Worker 1位于US-West-2,而Worker 1位于US-East-1。
下面是用于从master调用Worker的代码:
def lambda_handler(event, context):
function_name = "arn:aws:lambda:us-east-1-...:function:worker_2"
lambda_client = boto3.client('lambda')
payload = json.dumps({"body-json": "payload string")
response = lambda_client.invoke(
FunctionName = function_name,
Payload = payload
)
response_payload = response['Payload'].read()
response_arr = json.loads(response_payload)
return response_arr['answer']
推荐答案
感谢大家的投入。@Michael-sqlbot关于AWS客户端库默认将请求发送到本地区域的评论帮助我找到了解决方案。对于Python,库就是boto3。阅读docs后,不清楚如何设置区域。正是这个blog post提供了(简单的)答案:
client = boto3.client('lambda', region_name='us-west-2')
您是对的,Michael,区域之间从一个lambda到另一个lambda的用例是错综复杂的。我把这个答案留在这里,以防其他刚接触boto3的人在尝试让其他资源(lambda到EC2、lambda到S3等)跨区域工作时遇到相同的错误。谢谢
这篇关于跨区域调用AWS lambda的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:跨区域调用AWS lambda
基础教程推荐
猜你喜欢
- 合并具有多索引的两个数据帧 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01
- 症状类型错误:无法确定关系的真值 2022-01-01