今年の前半に、私の同僚のPeter MoonがAWS SDK for Goの提供計画を共有してくれました。以下のPeterのゲスト投稿にある通り、SDKが一般利用可能になりました!
-- Jeff;
AWSは我々のプロダクトに関わるデベロッパーコミュニティを強く推進しています。これは我々のライブラリやツールの多くをGitHubでオープンソースにしている1つの理由ですし、そこでは我々はデベロッパーのお客様と直接コミュニケーションしコラボレーションすることができることを非常に大切にしています。これまでのオープンソースコミュニティでの全ての経験の中で、AWS SDK for Goがどの様に生まれたのかというお話は、ぜひとも共有しておきたいものの1つになります。
10ヶ月前にこのプロジェクトのオーナーシップを持って以来、コミュニティのフィードバックや貢献によって実験的ステージとプレビューステージを進めることができ、そして本日AWS SDK for Goがバージョン1.0となったことをアナウンスできて興奮していますし、これを本番環境用途で利用することを推薦しています。我々の他の多くのプロジェクト同様、SDKはSemantic Versioningに従っているので、1.0から同じマイナーバージョン1.xへは、既存のコードが動き続けるという安心感を持ってアップグレードを行えます。
6月にデベロッパープレビューをアナウンスして以来、いくつかの鍵となる改善をSDKに追加してきました。
- Sessions - 設定やリクエストハンドラを簡単にクライアント間で共有できます
- JMESPATHのサポート - 複雑なAPIのレスポンスや他の構造体に対して、シンプルな表現でクエリや整形を行えます
- Paginators - list系のAPIのレスポンスの複数ページを辿っていくことができます
- Waiters - AWSリソースの非同期な状態変化を待つことができます
- Documentation - デベロッパーガイドを改善しました
これらの新しい機能のうちいくつかを使ったサンプルコードがこちらです:
// Create a session
s := session.New(aws.NewConfig().WithRegion("us-west-2"))
// Add a handler to print every API request for the session
s.Handlers.Send.PushFront(func(r *request.Request) {
fmt.Printf("Request: %s/%s\n", r.ClientInfo.ServiceName, r.Operation)
})
// We want to start all instances in a VPC, so let's get their IDs first.
ec2client := ec2.New(s)
var instanceIDsToStart []*string
describeInstancesInput := &ec2.DescribeInstancesInput{
Filters: []*ec2.Filter{&ec2.Filter{
Name: aws.String("vpc-id"),
Values: aws.StringSlice([]string{"vpc-82977de9"}),
},
},
}
// Use a paginator to easily iterate over multiple pages of response
ec2client.DescribeInstancesPages(describeInstancesInput,
func(page *ec2.DescribeInstancesOutput, lastPage bool) bool {
// Use JMESPath expressions to query complex structures
ids, _ := awsutil.ValuesAtPath(page, "Reservations[].Instances[].InstanceId")
for _, id := range ids {
instanceIDsToStart = append(instanceIDsToStart, id.(*string))
}
return !lastPage
})
// The SDK provides several utility functions for literal pointer transformation
fmt.Println("Starting:", aws.StringValueSlice(instanceIDsToStart))
// Skipped for brevity here, but *always* handle errors in the real world :)
ec2client.StartInstances(&ec2.StartInstancesInput{
InstanceIds: instanceIDsToStart,
})
// Finally, use a waiter function to wait until the instances are running
ec2client.WaitUntilInstanceRunning(describeInstancesInput)
fmt.Println("Instances are now running.")
最後にもう一度、オリジナルのコードベースへの貢献とAWS SDK for Goの素晴らしい開始点を提供してくれた、Coda HaleとStripeの友人達に感謝をしています。ついにそれは完全に本番環境で利用可能となり、我々のお客様が開発するであろうこのSDKを使った画期的なアプリケーションの全てを見ることを楽しみにしています。
より詳細な情報は以下をご覧ください:
Peter Moon, Senior Product Manager
原文: Now Available: Version 1.0 of the AWS SDK for Go (翻訳: SA岩永)