You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨区域调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:25:53