projects/imds/update.go (47 lines of code) (raw):
package main
import (
"flag"
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/ec2"
)
var region string
func updateLaunchTemplates(lt string) {
sess, _ := session.NewSession(&aws.Config{
Region: aws.String(region)},
)
client := ec2.New(sess)
opts := &ec2.LaunchTemplateInstanceMetadataOptionsRequest{
HttpPutResponseHopLimit: aws.Int64(1),
HttpTokens: aws.String("required"),
}
ltvo, err := client.CreateLaunchTemplateVersion(
&ec2.CreateLaunchTemplateVersionInput{
LaunchTemplateId: aws.String(lt),
SourceVersion: aws.String("$Default"),
LaunchTemplateData: &ec2.RequestLaunchTemplateData{MetadataOptions: opts},
VersionDescription: aws.String("Hop count 1"),
},
)
if err != nil {
fmt.Println(err)
}
_, err = client.ModifyLaunchTemplate(
&ec2.ModifyLaunchTemplateInput{
DefaultVersion: aws.String(fmt.Sprint(*ltvo.LaunchTemplateVersion.VersionNumber)),
LaunchTemplateId: aws.String(lt),
},
)
if err != nil {
fmt.Println(err)
}
fmt.Printf("Updated template %s successfully. IMDSv2 is required and hop count is set to 1.", lt)
}
func main() {
var lt string
flag.StringVar(®ion, "region", "us-east-1", "AWS region")
flag.StringVar(<, "launch-template", "", "Launch template Id")
flag.Parse()
updateLaunchTemplates(lt)
}