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)
}
}
}
AWS API applications should not handle credentials like this. the standard session credentials chain will automatically check those environment variables, as well as other options like config files and the metadata service. If you're programming against the aws sdk, and you're not delegating to AWS for all credentials resolution, you're probably doing it wrong.
Thanks for the code example!