跨区域调用Lambda如何让其操作发起调用区域的AWS资源
解决方案
完全可以实现单区域部署Lambda,跨区域操作其他区域的资源,无需在每个区域单独部署函数副本,仅需做三处调整即可:
- 调用侧传递目标区域参数
你在发起跨区域Lambda调用时,需要将待操作资源的所属区域(即你示例中的区域2,也就是发起调用请求的Lambda所在区域)作为参数写入调用payload传递。修改后的调用代码如下:
import json import os import boto3 client = boto3.client('lambda', region_name='region 1') def lambda_handler(event, context): # 追加目标区域参数,直接取当前运行环境的区域即可,无需硬编码 event['target_region'] = os.environ['AWS_REGION'] response = client.invoke( FunctionName = 'Lambda_function_name', InvocationType = 'RequestResponse', Payload = json.dumps(event) ) # 后续处理逻辑
- 被调用侧初始化资源客户端时指定区域
部署在区域1的待调用Lambda,在初始化AWS资源客户端时不要使用默认区域,而是从传入的payload中读取之前传入的target_region参数,用该参数初始化对应区域的客户端即可,示例代码如下:
import json import boto3 def lambda_handler(event, context): # 读取传入的目标区域 target_region = event.get('target_region', '默认区域可自行设置') # 用目标区域初始化EC2客户端 ec2_client = boto3.client('ec2', region_name=target_region) # 后续对ec2_client的所有操作都会作用于目标区域的EC2资源 # 你的原有EC2检测、修改逻辑不需要做其他调整
- 调整Lambda执行角色的IAM权限
部署在区域1的Lambda对应的IAM执行角色,需要开放所有你需要操作的区域的EC2相关操作权限,IAM权限为全局生效,只要权限策略没有限制资源区域,即可正常跨区域调用对应服务接口。
补充说明
如果你的Lambda部署在VPC内,默认跨区域调用AWS服务会走公网链路,如果你需要走私有链路,可以为对应区域的AWS服务配置VPC端点即可。跨区域调用会有少量网络延迟,对延迟不敏感的运维类场景完全适用。
内容的提问来源于stack exchange,提问作者helpo11
相关产品推荐
相关产品推荐

