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

使用boto3的ec2.create_fleet()创建Spot Fleet时遇参数不生效等问题

解决create_fleet替代request_spot_fleet的问题

针对你遇到的四个问题,逐一给出修复方案:

1. 启动多个独立实例而非单个集群请求

控制台显示Request type = instance是因为Fleet配置不完整,确保调用create_fleet时传递FleetType='maintain',同时正确配置LaunchTemplateConfigs和TargetCapacitySpecification。完整配置后,控制台会显示一个单独的Spot Fleet条目,所有实例都归属该Fleet。

2. 设置Type="maintain"但显示Persistence one-time

旧API的Type参数对应新API的顶层参数FleetType,必须在create_fleet调用中显式传递FleetType='maintain',而非嵌入到其他参数块中。同时确保ReplaceUnhealthyInstances=True(默认启用,显式指定更稳妥),这样Fleet会维持目标容量,而非一次性创建实例。

3. ValidFrom和ValidUntil字段为空

这两个参数是create_fleet的顶层参数,必须传递ISO 8601格式的UTC时间字符串(例如'2024-05-20T00:00:00Z')。格式不正确会导致AWS忽略参数,控制台字段为空。可以用Python生成符合要求的时间:

from datetime import datetime, timedelta, timezone
valid_from = (datetime.now(timezone.utc) + timedelta(hours=1)).isoformat()
valid_until = (datetime.now(timezone.utc) + timedelta(hours=24)).isoformat()

4. 传入IAM Fleet Role

在create_fleet的顶层参数中添加IamFleetRole,值为你的Fleet角色ARN(通常使用AWS托管的aws-ec2-spot-fleet-tagging-role,或自定义角色):

IamFleetRole='arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role'

该角色用于授权Spot Fleet服务管理实例(如替换不健康实例、标签管理等)。


完整修改后的调用代码

from datetime import datetime, timedelta, timezone

# 生成ValidFrom和ValidUntil的ISO格式时间
valid_from = (datetime.now(timezone.utc) + timedelta(hours=1)).isoformat()
valid_until = (datetime.now(timezone.utc) + timedelta(hours=24)).isoformat()

# 调用create_fleet,补充所有缺失参数
response = ec2client.create_fleet(
    LaunchTemplateConfigs=LaunchTemplateConfigs,
    TargetCapacitySpecification=TargetCapacitySpecification,
    SpotOptions=SpotOptions,
    FleetType='maintain',
    ValidFrom=valid_from,
    ValidUntil=valid_until,
    IamFleetRole='arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role',
    ReplaceUnhealthyInstances=True
)

内容的提问来源于stack exchange,提问作者Erin W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:54:55