We announced
These Go examples show you how to:
-
Describe an Amazon EC2 key pair
-
Create an Amazon EC2 key pair
-
Delete an Amazon EC2 key pair
You can download complete versions of these example files from the aws-doc-sdk-examples
Scenario
Amazon EC2 uses public–key cryptography to encrypt and decrypt login information. Public–key cryptography uses a public key to encrypt data, then the recipient uses the private key to decrypt the data. The public and private keys are known as a key pair.
The routines use the AWS SDK for Go to perform these tasks by using these methods of the EC2 type:
Prerequisites
-
You have set up and configured the SDK.
-
You are familiar with Amazon EC2 key pairs. To learn more, see Amazon EC2 Key Pairs in the Amazon EC2 User Guide.
Describe Your Key Pairs
Create a new Go file named ec2_describe_keypairs.go
.
Import the required AWS SDK for Go packages.
package main
import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/ec2"
"fmt"
"os"
)
Use the following code to create a session and Amazon EC2 client.
// go run ec2_describe_keypairs.go
// credentials from the shared credentials file ~/.aws/credentials.
sess, err := session.NewSession(&aws.Config{
Region: aws.String("us-west-2")},
)
// Create an EC2 service client.
Call DescribeKeyPairs
to get a list of key pairs and print them out.
// Returns a list of key pairs
result, err := svc.DescribeKeyPairs(nil)
if err != nil {
exitErrorf("Unable to get key pairs, %v", err)
}
fmt.Println("Key Pairs:")
for _, pair := range result.KeyPairs {
fmt.Printf("%s: %s\n", *pair.KeyName, *pair.KeyFingerprint)
}
The routine uses the following utility function.
func exitErrorf(msg string, args ...interface{}) {
fmt.Fprintf(os.Stderr, msg+"\n", args...)
os.Exit(1)
See the complete example
Create a Key Pair
Create a new Go file named ec2_create_keypair.go
.
Import the required AWS SDK for Go packages.
package main
import (
"fmt"
"os"
"path/filepath"
"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"
)
Get the key pair name passed in to the code and, to access Amazon EC2, create an EC2 client.
func main() {
if len(os.Args) != 2 {
exitErrorf("pair name required\nUsage: %s key_pair_name",
filepath.Base(os.Args[0]))
}
pairName := os.Args[1]
sess, err := session.NewSession(&aws.Config{
Region: aws.String("us-west-2")},
)
// Create an EC2 service client.
svc := ec2.New(sess)
Create a new key pair with the provided name.
result, 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)
}
fmt.Printf("Created key pair %q %s\n%s\n",
*result.KeyName, *result.KeyFingerprint,
*result.KeyMaterial)
}
The routine uses the following utility function.
func exitErrorf(msg string, args ...interface{}) {
fmt.Fprintf(os.Stderr, msg+"\n", args...)
os.Exit(1)
}
See the complete example
Delete a Key Pair
Create a new Go file named ec2_delete_keypair.go
.
Import the required AWS SDK for Go packages.
package main
import (
"fmt"
"os"
"path/filepath"
"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"
)
Get the key pair name passed in to the code and, to access Amazon EC2, create an EC2 client.
func main() {
if len(os.Args) != 2 {
exitErrorf("pair name required\nUsage: %s key_pair_name",
filepath.Base(os.Args[0]))
}
pairName := os.Args[1]
sess, err := session.NewSession(&aws.Config{
Region: aws.String("us-west-2")},
)
// Create an EC2 service client.
svc := ec2.New(sess)
Delete the key pair with the provided name.
_, err = svc.DeleteKeyPair(&ec2.DeleteKeyPairInput{
KeyName: aws.String(pairName),
})
if err != nil {
if aerr, ok := err.(awserr.Error); ok && aerr.Code() == "InvalidKeyPair.Duplicate" {
exitErrorf("Key pair %q does not exist.", pairName)
}
exitErrorf("Unable to delete key pair: %s, %v.", pairName, err)
}
fmt.Printf("Successfully deleted %q key pair\n", pairName)
}
The routine uses the following utility function.
func exitErrorf(msg string, args ...interface{}) {
fmt.Fprintf(os.Stderr, msg+"\n", args...)
os.Exit(1)
}
See the complete example