跨区域调用AWS Lambda权限配置问题求助
解决跨区域Lambda调用的ResourceNotFoundException问题
我来帮你拆解这个问题,其实核心原因很简单——你的Boto3客户端默认连接的是当前Lambda(boss)所在的us-west-2区域,但你要调用的worker2在us-east-1,这相当于你在洛杉矶的服务里,请求洛杉矶的Lambda服务去查找纽约的函数,肯定找不到呀!
下面是具体的修复步骤:
1. 为Boto3 Lambda客户端指定目标区域
在创建Lambda客户端的时候,必须明确指定worker2所在的us-east-1区域,而不是使用默认的当前区域。修改你的代码如下:
import boto3 import json def lambda_handler(event, context): function_name = "arn:aws:lambda:us-east-1:...:function:worker_2" # 关键:创建客户端时指定目标区域us-east-1 lambda_client = boto3.client('lambda', region_name='us-east-1') 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']
2. 确认Worker2的资源策略(可选但建议配置)
虽然你的boss角色已经拥有lambda:InvokeFunction的全资源权限,但为了遵循最小权限原则,建议给worker2添加资源策略,仅允许来自boss的ARN调用。
你可以通过AWS控制台或者AWS CLI给worker2添加以下资源策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::你的账号ID:role/boss的执行角色ARN" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:你的账号ID:function:worker_2" } ] }
为什么之前会报错?
ResourceNotFoundException的本质是:你在us-west-2区域的Lambda服务中,请求调用一个us-east-1的函数ARN,而每个区域的Lambda服务只能管理本区域内的函数,所以它找不到这个资源,就返回了错误。只要把客户端指向目标区域,这个问题就解决了。
内容的提问来源于stack exchange,提问作者Sawyer Merchant
相关产品推荐
相关产品推荐

