@@ -0,0 +1,45 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
awsserversdk "gitea.s1f.ren/shiran/aws-server-sdk"
|
||||
)
|
||||
|
||||
func main() {
|
||||
client, err := awsserversdk.NewClient(os.Getenv("AWS_SERVER_BASE_URL"), os.Getenv("AWS_SERVER_APP_TOKEN"))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
region := os.Getenv("AWS_SERVER_REGION")
|
||||
options, err := client.Catalog.GetCreateOptions(context.Background(), region)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if len(options.Images) == 0 || len(options.InstanceTypes) == 0 {
|
||||
log.Fatal("Region has no published image or instance type")
|
||||
}
|
||||
request := awsserversdk.CreateInstanceRequest{ImageID: options.Images[0].ImageID, InstanceType: options.InstanceTypes[0].InstanceType, Name: "sdk-example", AssociateEIP: true, RootVolume: &awsserversdk.VolumeSpec{SizeGiB: 30, Type: "gp3"}}
|
||||
if len(options.Placements) > 0 {
|
||||
request.PlacementID = options.Placements[0].PlacementID
|
||||
}
|
||||
estimate, err := client.Pricing.EstimateInstance(context.Background(), region, request)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Printf("estimated hourly %.6f %s", estimate.HourlyPrice, estimate.Currency)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Minute)
|
||||
defer cancel()
|
||||
operation, err := client.Instances.Create(ctx, region, request)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
task, err := operation.Wait(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Printf("instance %s created by task %s", operation.ID, task.ID)
|
||||
}
|
||||
Reference in New Issue
Block a user