2023-03-14 15:12:28 +01:00
package mtd_aws
import (
2023-03-15 15:30:29 +01:00
"context"
"fmt"
"os"
"github.com/aws/aws-sdk-go-v2/aws"
"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/types"
2023-03-14 15:12:28 +01:00
)
2023-03-20 15:43:14 +01:00
func New_config ( region string , credentials string ) aws . Config {
2023-03-15 15:30:29 +01:00
// Create a new AWS config
2023-03-20 15:43:14 +01:00
cfg , err := config . LoadDefaultConfig ( context . TODO ( ) , config . WithSharedConfigFiles ( [ ] string { credentials } ) , config . WithRegion ( region ) )
2023-03-15 15:30:29 +01:00
if err != nil {
fmt . Println ( "Error creating config:" , err )
fmt . Println ( "Configure Credentials in line with the documentation found here: https://aws.github.io/aws-sdk-go-v2/docs/configuring-sdk/#specifying-credentials" )
os . Exit ( 1 )
}
return cfg
}
func Instance_info ( config aws . Config , instanceID string ) {
// Create a new EC2 service client
svc := ec2 . NewFromConfig ( config )
input := & ec2 . DescribeInstancesInput {
InstanceIds : [ ] string { instanceID } ,
}
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 {
fmt . Println ( "Public IP Address:" , aws . ToString ( instance . PublicIpAddress ) )
}
fmt . Println ( "Private IP Address:" , aws . ToString ( instance . PrivateIpAddress ) )
}
func Instances ( config aws . Config ) ( [ ] * types . Instance , error ) {
svc := ec2 . NewFromConfig ( config )
input := & ec2 . DescribeInstancesInput { }
var instances [ ] * types . Instance
paginator := ec2 . NewDescribeInstancesPaginator ( svc , input )
for paginator . HasMorePages ( ) {
page , err := paginator . NextPage ( context . TODO ( ) )
if err != nil {
return nil , err
}
for _ , reservation := range page . Reservations {
for _ , instance := range reservation . Instances {
instances = append ( instances , & instance )
}
}
}
return instances , nil
2023-03-14 15:12:28 +01:00
}