跨AWS账号Lambda触发:从账号A的Lambda触发账号B的Lambda并实现数据传递的配置咨询
嘿,我来帮你搞定这个跨账号Lambda调用的问题——完全不用额外加API Gateway,直接调用就行,权限配置其实两边都要弄,我给你一步步讲清楚~
跨账号直接调用Lambda的实现方案
1. 先给账号B的Lambda开权限(允许账号A调用)
首先得在账号B的目标Lambda上开个口子,允许账号A的实体来调用它,这就得靠基于资源的策略(resource-based policy)来实现:
- 登录账号B的AWS控制台,找到你要触发的那个Lambda函数
- 切到「配置」→「权限」标签,拉到最下面的「资源策略」板块,点「添加权限」
- 主体类型选「AWS账户」,输入账号A的12位ID
- 操作选
lambda:InvokeFunction,保存就搞定了
嫌控制台麻烦的话,也可以用AWS CLI(在账号B的环境下执行):
aws lambda add-permission \ --function-name <账号B的Lambda函数名/完整ARN> \ --statement-id allow-account-a-invoke \ --action lambda:InvokeFunction \ --principal <账号A的12位ID>
2. 给账号A的Lambda执行角色加调用权限
接下来要在账号A这边,给你的源Lambda的执行角色加权限,让它有权限去调用账号B的Lambda:
- 登录账号A的AWS控制台,找到源Lambda的执行角色(在「配置」→「权限」里能看到角色名)
- 进入这个IAM角色,点「添加权限」→「创建内联策略」
- 选「JSON」模式,粘贴下面的策略内容(记得替换成账号B的Lambda ARN):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "<账号B的Lambda函数完整ARN>" } ] }
- 给策略起个好记的名字(比如
AllowInvokeAccountBLambda),保存就行
3. 账号A的Lambda代码里直接调用目标Lambda
最后一步,在账号A的Lambda函数里,用AWS SDK直接调用账号B的Lambda,把你拿到的数据传过去就行。比如用Python的boto3示例:
import boto3 import json lambda_client = boto3.client('lambda', region_name='<你的AWS区域,比如us-east-1>') def lambda_handler(event, context): # 这里是你从数据源获取数据的逻辑,替换成你自己的代码 fetched_data = {"user_id": 123, "data_content": "your-fetched-data-here"} # 调用账号B的Lambda函数 response = lambda_client.invoke( FunctionName='<账号B的Lambda函数完整ARN>', InvocationType='RequestResponse', # 同步调用,要异步的话改成Event Payload=json.dumps(fetched_data).encode('utf-8') ) # 如果需要处理账号B Lambda的返回结果,就加这段 result = json.loads(response['Payload'].read()) return { 'statusCode': 200, 'body': result }
几个关键注意点
- 两个Lambda最好在同一个AWS区域,如果不在的话,要在boto3客户端里指定账号B Lambda所在的区域
- 要是想更精确控制权限,资源策略里的主体可以直接写账号A的Lambda执行角色ARN,而不是整个账号A的ID,这样就只有这个特定的Lambda能调用
- 异步调用的话,把
InvocationType改成Event就行,账号A的Lambda不用等结果,直接继续执行
内容的提问来源于stack exchange,提问作者Eddy
相关产品推荐
相关产品推荐

