Skip to content

Instantly share code, notes, and snippets.

@stephen-mw
Last active April 18, 2022 16:07
Show Gist options
  • Star 15 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save stephen-mw/9f289d724c4cfd3c88f2 to your computer and use it in GitHub Desktop.
Save stephen-mw/9f289d724c4cfd3c88f2 to your computer and use it in GitHub Desktop.
List running EC2 instances with golang and aws-sdk-go

This is the beginning of hopefully many new posts with golang snippets from my blog. List all of your running (or pending) EC2 instances with Amazon's golang sdk.

For a list of filters or instance attributes consult the official documentation.

package main

import (
	"fmt"
	"github.com/awslabs/aws-sdk-go/aws"
	"github.com/awslabs/aws-sdk-go/gen/ec2"
	"os"
)

func check(e error) {

	if e != nil {
		panic(e)
	}
}

func main() {

	aws_user := os.Getenv("AWS_ACCESS_KEY_ID")
	aws_pass := os.Getenv("AWS_SECRET_ACCESS_KEY")

	creds := aws.Creds(aws_user, aws_pass, "")
	client := ec2.New(creds, "us-west-1", nil)

	// Only grab instances that are running or just started
	filters := []ec2.Filter{
		ec2.Filter{
			aws.String("instance-state-name"),
			[]string{"running", "pending"},
		},
	}
	request := ec2.DescribeInstancesRequest{Filters: filters}
	result, err := client.DescribeInstances(&request)
	check(err)

	for _, reservation := range result.Reservations {
		for _, instance := range reservation.Instances {
			fmt.Println(*instance.InstanceID)
		}
	}
}
@DanielRis
Copy link

DanielRis commented Sep 7, 2017

fmt.Println(*instance.InstanceID) should be fmt.Println(*instance.InstanceId)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment