AWS修改Spot Fleet目标容量报FleetNotInModifiableState错误如何解决
报错原因
FleetNotInModifiableState错误的触发原因是目标Spot Fleet请求不属于可修改类型:
- 只有**持久型(type为maintain)**的Spot Fleet请求支持调用
modify_spot_fleet_request接口修改目标容量 - 一次性(one-time)、即时(instant)类型的Spot Fleet请求提交后就无法修改配置,只能直接取消
- 已经处于
cancelled/failed/expired状态的Spot Fleet请求也不支持修改
解决方案
方案1:直接取消当前不可修改的Spot Fleet(适用于一次性/即时类型的Spot Fleet)
替换原有modify_spot_fleet_request调用逻辑,改用cancel_spot_fleet_requests接口即可,示例代码如下:
import boto3 def lambda_handler(event, context): client = boto3.client('ec2') response = client.cancel_spot_fleet_requests( SpotFleetRequestIds=[ 'sfr-xxxxxxxx-593f-4444-9e99-nnnnnnnnnn', ], # 设为True会同时终止该Spot Fleet关联的所有实例,设为False则仅取消请求、保留实例 TerminateInstances=True ) print(response)
方案2:后续需频繁调整容量时,创建持久型Spot Fleet
如果后续需要经常修改Spot Fleet的目标容量,创建请求时指定Type为maintain即可,示例创建代码片段:
response = client.request_spot_fleet( SpotFleetRequestConfig={ 'TargetCapacity': 2, # 指定为持久维护型,支持后续修改配置 'Type': 'maintain', 'IamFleetRole': 'arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role', # 其余实例规格、镜像、子网等配置省略 ... } )
注意事项
- 若使用的是AWS新版EC2 Fleet而非传统Spot Fleet,需要调用对应的
modify_fleet/delete_fleet接口,而非Spot Fleet专属接口 - 调用操作接口前可先调用
describe_spot_fleet_requests接口查询目标请求的类型和状态,提前判断是否支持修改
内容的提问来源于stack exchange,提问作者Aravindan vaithialingam
相关产品推荐
相关产品推荐

