Skip to content

Instantly share code, notes, and snippets.

@devonartis
Created October 4, 2017 00:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save devonartis/e36b785e2b844197a50eaf61591decbe to your computer and use it in GitHub Desktop.
Save devonartis/e36b785e2b844197a50eaf61591decbe to your computer and use it in GitHub Desktop.
Create EC2 Keys with Golang
package main
import (
"flag"
"fmt"
"io/ioutil"
"os"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/ec2"
)
var (
pairname string
region string
svc *ec2.EC2
)
func exitErrorf(msg string, args ...interface{}) {
fmt.Fprintf(os.Stderr, msg+"\n", args...)
os.Exit(1)
}
func savePem(f string, k string) error {
return ioutil.WriteFile(f, []byte(k), 0666)
}
func main() {
pairname := flag.String("k", "", "Keypair Name To Create (Required)")
region := flag.String("r", "us-east-1", "Region name")
flag.Parse()
if *pairname == "" {
flag.PrintDefaults()
os.Exit(1)
}
svc = ec2.New(session.New(&aws.Config{Region: aws.String(*region)}))
keyresult, err := svc.CreateKeyPair(&ec2.CreateKeyPairInput{
KeyName: aws.String(*pairname),
})
if err != nil {
if aerr, ok := err.(awserr.Error); ok && aerr.Code() == "InvalidKeyPair.Duplicate" {
exitErrorf("Keypair %q already exists.", *pairname)
}
exitErrorf("Unable to create key pair: %s, %v.", *pairname, err)
}
savePem(*pairname+".pem", *keyresult.KeyMaterial)
fmt.Printf("Created key pair %q %s\n%s\n",
*keyresult.KeyName, *keyresult.KeyFingerprint,
*keyresult.KeyMaterial)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment