aws sdk utils

This commit is contained in:
schulze 2023-03-22 10:47:29 +01:00
parent 81c611383b
commit 3a554568ca

View File

@ -9,13 +9,19 @@ import (
"github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/ec2" "github.com/aws/aws-sdk-go-v2/service/ec2"
"github.com/aws/aws-sdk-go-v2/service/ec2/types" "github.com/aws/aws-sdk-go-v2/service/ec2/types"
"github.com/google/uuid"
"github.com/thefeli73/polemos/state" "github.com/thefeli73/polemos/state"
) )
// AwsInstance is basic info about a single aws instance (instance id, redion, pubIP and privIP)
type AwsInstance struct {
InstanceID string
Region string
PublicIP string
PrivateIP string
}
// NewConfig creates a AWS config for a specific region // NewConfig creates a AWS config for a specific region
func NewConfig(region string, credentials string) aws.Config { func NewConfig(region string, credentials string) aws.Config {
// Create a new AWS config
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithSharedConfigFiles([]string{credentials}), config.WithRegion(region)) cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithSharedConfigFiles([]string{credentials}), config.WithRegion(region))
if err != nil { if err != nil {
fmt.Println("Error creating config:", err) fmt.Println("Error creating config:", err)
@ -26,9 +32,9 @@ func NewConfig(region string, credentials string) aws.Config {
} }
// IndexInstances scans all configured regions for instances and add them to services // IndexInstances scans all configured regions for instances and add them to services
func IndexInstances(config state.Config) { func IndexInstances(config state.Config) []AwsInstance {
awsInstances := []AwsInstance{}
for _, region := range config.AWS.Regions { for _, region := range config.AWS.Regions {
//fmt.Println("Listing instances in region:", region)
awsConfig := NewConfig(region, config.AWS.CredentialsPath) awsConfig := NewConfig(region, config.AWS.CredentialsPath)
instances, err := Instances(awsConfig) instances, err := Instances(awsConfig)
if err != nil { if err != nil {
@ -36,38 +42,33 @@ func IndexInstances(config state.Config) {
continue continue
} }
//fmt.Println("Listing instances in region:", region)
for _, instance := range instances { for _, instance := range instances {
InstanceInfo(awsConfig, *instance.InstanceId) var publicAddr string
u := uuid.New() if instance.PublicIpAddress != nil {
_ = u publicAddr = aws.ToString(instance.PublicIpAddress)
}
awsInstances = append(awsInstances, AwsInstance{
InstanceID: aws.ToString(instance.InstanceId),
Region: region,
PublicIP: publicAddr,
PrivateIP: aws.ToString(instance.PrivateIpAddress)})
} }
} }
return awsInstances
} }
// InstanceInfo collects info about a specific instance in a region // PrintInstanceInfo prints info about a specific instance in a region
func InstanceInfo(config aws.Config, instanceID string) { func PrintInstanceInfo(instance *types.Instance) {
// Create a new EC2 service client fmt.Println("\tInstance ID:", aws.ToString(instance.InstanceId))
svc := ec2.NewFromConfig(config) fmt.Println("\t\tInstance Type:", string(instance.InstanceType))
fmt.Println("\t\tAMI ID:", aws.ToString(instance.ImageId))
input := &ec2.DescribeInstancesInput{ fmt.Println("\t\tState:", string(instance.State.Name))
InstanceIds: []string{instanceID}, fmt.Println("\t\tAvailability Zone:", aws.ToString(instance.Placement.AvailabilityZone))
}
result, err := svc.DescribeInstances(context.TODO(), input)
if err != nil {
fmt.Println("Error describing instance:", err)
return
}
// Print instance information
instance := result.Reservations[0].Instances[0]
fmt.Println("Instance ID:", aws.ToString(instance.InstanceId))
fmt.Println("Instance Type:", string(instance.InstanceType))
fmt.Println("AMI ID:", aws.ToString(instance.ImageId))
fmt.Println("State:", string(instance.State.Name))
fmt.Println("Availability Zone:", aws.ToString(instance.Placement.AvailabilityZone))
if instance.PublicIpAddress != nil { if instance.PublicIpAddress != nil {
fmt.Println("Public IP Address:", aws.ToString(instance.PublicIpAddress)) fmt.Println("\t\tPublic IP Address:", aws.ToString(instance.PublicIpAddress))
} }
fmt.Println("Private IP Address:", aws.ToString(instance.PrivateIpAddress)) fmt.Println("\t\tPrivate IP Address:", aws.ToString(instance.PrivateIpAddress))
} }
// Instances returns all instances for a config i.e. a region // Instances returns all instances for a config i.e. a region