如何从Spot实例请求中获得Spot InstanceID ?



我使用aws-go-sdk来创建和管理spot实例。我为了创建一个新的SpotInstance request而发送的每个请求都是用RequestSpotInstances执行的。我试图获取为上次请求创建的实例的实例ID,我看到,在响应对象RequestSpotInstancesOutput中,每个创建的实例都有一个参数,但它不包括实例id,事实上,在RequestSpotInstanceOutput中没有填充InstanceID(从RequestSpotInstances调用返回),我试图使用CreateTags,以便为每个实例创建一个带有请求id的标记,但它不起作用。标签规格与requestSpotInstances UnexpectedParameter与aws-sdk

param := &ec2.RequestSpotInstancesInput{    // Initializing the request params
SpotPrice:     aws.String(ctx.Price),
InstanceCount: aws.Int64(count),
LaunchSpecification: &ec2.RequestSpotLaunchSpecification{
ImageId:          aws.String(ctx.AWSImageID),
InstanceType:     aws.String(ctx.InstanceType),
KeyName:          aws.String(ctx.Key),
UserData:         aws.String(""),
SecurityGroupIds: aws.StringSlice(secgroup),
},
Type: aws.String("one-time"),
}
reqSliceCreateTagsInput := make([]string, 1)
resp, err := client.RequestSpotInstances(param)
if err != nil || resp == nil {
log.Println(err.Error())
log.Fatalf("pkg/aws: CreateSpotInstance resp is nil")
}
reqSliceCreateTagsInput[0] = *resp.SpotInstanceRequests[0].SpotInstanceRequestId
createTagsInput := &ec2.CreateTagsInput{
Resources: aws.StringSlice(reqSliceCreateTagsInput),
Tags: []*ec2.Tag{
{
Key:   aws.String("instance"),
Value: aws.String(name + "-" + index),
},
},
}
time.Sleep(time.Second * 15)
_, err = client.CreateTags(createTagsInput)
if err != nil {
slog.Logf(0, err.Error())
}

是否有办法只接收请求id的实例id ?

我认为Spot Instance请求需要一些时间来完成。

我建议您调用describe_spot_instance_requests(),直到所有实例的Status都是fulfilled(每次调用之间稍等)。

我看不到一个表示整个请求已经完成的字段,因此您可能需要将返回的实例数量与您请求的数量进行比较。

最新更新