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
猜你喜欢
- 检查具有纬度和经度的地理点是否在 shapefile 中 2022-01-01
- 我如何透明地重定向一个Python导入? 2022-01-01
- YouTube API v3 返回截断的观看记录 2022-01-01
- 我如何卸载 PyTorch? 2022-01-01
- 计算测试数量的Python单元测试 2022-01-01
- 使用 Cython 将 Python 链接到共享库 2022-01-01
- ";find_element_by_name(';name';)";和&QOOT;FIND_ELEMENT(BY NAME,';NAME';)";之间有什么区别? 2022-01-01
- 使用公司代理使Python3.x Slack(松弛客户端) 2022-01-01
- 如何使用PYSPARK从Spark获得批次行 2022-01-01
- CTR 中的 AES 如何用于 Python 和 PyCrypto? 2022-01-01