AWS Lambda配置Auto Scaling Group容量时出现InvalidRegionError问题
问题排查与修复方案
错误根因
报错信息:Provided region_name 'os.environ[aws_region]' doesn't match a supported format.
报错明确提示传入的region值是字符串os.environ[aws_region],不是合法的AWS区域标识,问题出在代码的语法错误和参数使用错误,一共3处核心问题:
- 初始化boto3客户端时,错误给
os.environ[region]加上了单引号,导致系统将这段代码本身作为字符串传入,没有实际读取环境变量的值 - 代码中定义了静态region变量
ap-south-1但没有使用,实际运行的代码读取的是不存在的aws_region环境变量,参数不匹配 - 调用
update_auto_scaling_group时错误给ASG名称、容量数值套了os.environ[],os.environ是读取Lambda环境变量的方法,不是字符串/数值的标识方法,没有配置对应环境变量的情况下会直接报错
修复方案
方案1:使用写死的固定配置(无需配置环境变量)
直接使用代码中预定义的region和ASG名称即可,代码修改如下:
import boto3 region = 'ap-south-1' ASG_name = 'test-scheduler' # 直接传入预定义的region变量,不要加引号 asg = boto3.client('autoscaling', region_name=region) def lambda_handler(event, context): response = asg.update_auto_scaling_group( AutoScalingGroupName=ASG_name, MinSize=1, DesiredCapacity=1, MaxSize=1 )
方案2:从Lambda环境变量读取配置(更灵活,适合多环境部署)
首先进入Lambda控制台的配置->环境变量页面,添加以下3个环境变量:
aws_region:值为你的ASG所在区域,比如ap-south-1asg_name:值为你的ASG名称,比如test-schedulerasg_capacity:值为你要设置的容量,比如1
然后修改代码如下:
import boto3 import os # 正确读取环境变量,不要加引号 asg = boto3.client('autoscaling', region_name=os.environ['aws_region']) def lambda_handler(event, context): # 环境变量读取的值是字符串,容量参数需要整数,要做类型转换 capacity = int(os.environ['asg_capacity']) response = asg.update_auto_scaling_group( AutoScalingGroupName=os.environ['asg_name'], MinSize=capacity, DesiredCapacity=capacity, MaxSize=capacity )
额外注意事项
- 请确认你的Lambda执行角色已经添加了
autoscaling:UpdateAutoScalingGroup的权限,否则会触发权限不足的报错 - 如果ASG和Lambda不在同一个区域,需要确保region参数填ASG所在的区域,否则找不到对应的ASG资源
内容的提问来源于stack exchange,提问作者akhil kandari
相关产品推荐
相关产品推荐

