SlideShare a Scribd company logo
AWS SDK for Go
JAWS-UG Meguro #0
@suzu_v
アジェンダ
• AWS SDK for Goの紹介
• 内部での実装の工夫について
オフィシャルな AWS SDK いろいろ
Android, Browser (JavaScript), iOS, Java, .NET, Node.js, PHP,
Python, Ruby ...
and Go (Preview 2015/01/29, Unstable): ~
既存のGo実装 (コミュニティ版)
• go-amz/amz
• もともと: https://launchpad.net/goamz
• mitchellhのfork: mitchellh/goamz
• goamz/goamz with Canonical
• AdRollによるfork: AdRoll/goamz
私はこれらのどれも使ったことがありません。使ってる方いたら教
えて下さい。
AWS SDK for Go
https://github.com/awslabs/aws-sdk-go
AWS SDK for Go
• もともとStripe社で開発されていたもの
• codahale (Coda Hale) さんがメンテナ
• Model-basedでのコード生成を使っていて、これが他言語のAWS SDKと
作りが似ていた
• awslabsに移管して公式SDKとして開発中
• https://aws.amazon.com/jp/blogs/aws/coming-soon-aws-sdk-for-go/
• 現在Developer Preview段階
だいたいこんな感じで使えます
package main
import (
"fmt"
"github.com/awslabs/aws-sdk-go/aws"
"github.com/awslabs/aws-sdk-go/service/s3"
)
// AWS SDK for GoでのListBucketsのサンプル
func main() {
// credentials are automatically loaded from ~/.aws/credentials
s := s3.New(&aws.Config{Region: "ap-northeast-1"})
buckets, _ := s.ListBuckets(nil)
for _, b := range buckets.Buckets {
v := *b.Name
fmt.Printf("bucket: %sn", v)
}
}
使ってみた
S3にobjectをputで配置して、list, head, copy, deleteする
aws-sdk-go-example/s3_misc.go at master : suzuken/aws-sdk-
go-example
感触
• わりと書ける、がまだ基礎的なレベルのapiを直接叩く必要が
ある
• けれども、Exampleや型によるサポートを利用すると多少楽に
かける
• Exampleも自動生成されている(後述
• この感触は正式リリース時に変わる可能性があります
(Unstable
サポート予定と思われるサービス
autoscaling dynamodb rds
cloudformation ec2 redshift
cloudfront ecs route53
cloudhsm elasticache route53domains
cloudsearch elasticbeanstalk s3
cloudsearchdomain elastictranscoder ses
cloudtrail elb simpledb
cloudwatch emr sns
cloudwatchlogs glacier sqs
codedeploy iam ssm
cognitoidentity importexport storagegateway
cognitosync kinesis sts
configservice kms support
datapipeline lambda swf
directconnect opsworks
どのように各種サービスをサポートしているか?
AWS SDK for Go internal
• /service 以下は モデルベースのapi生成 によって自動生成
されたコード
• /apis/{service_name} にJSONで書かれたapiの定義があ
り、これを利用している
• ちなみにこの定義はbotoで使っているものらしい
go generate
Generating code - The Go Blog
• ライブラリ開発者のための機能
• ファイルのヘッダに go:generate gen などと書いておくと
go generate で gen が実行される
• gen を実行することでファイルが生成される
• ワンライナー実行のためのwrapper
AWS SDK for Go の Makefileより
aws-sdk-go/Makefile at master : awslabs/aws-sdk-go
default: generate
generate-protocol-test:
go generate ./internal/protocol/...
generate-integration-test:
go generate ./internal/fixtures/integration
generate-test: generate-protocol-test generate-integration-test
generate:
go generate ./aws
go generate ./service
test: generate-test
go test ./... -tags=integration
ライブラリのコードを生成する
aws-sdk-go/generate.go at master : awslabs/aws-sdk-go
// Package service contains automatically generated AWS clients.
package service
//go:generate go run ../internal/model/cli/gen-api/main.go -path=../service ../apis/*/*.normal.json
internal/model/api あたりを読むとどのようにコードを生成し
ているかがわかります。
例: ListBuckets (apis/s3 での定義)
それぞれのapiの定義がJSONで書かれている
"ListBuckets":{
"name":"ListBuckets",
"http":{
"method":"GET",
"requestUri":"/"
},
"output":{"shape":"ListBucketsOutput"},
"documentation":"Returns a list of all buckets owned by the authenticated sender of the request.",
"documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTServiceGET.html",
"alias":"GetService"
},
https://github.com/awslabs/aws-sdk-go/blob/master/apis/
s3/2006-03-01.normal.json#L397-L407
生成されたListBucketsのコード
// ListBucketsRequest generates a request for the ListBuckets operation.
func (c *S3) ListBucketsRequest(input *ListBucketsInput) (req *aws.Request, output *ListBucketsOutput) {
oprw.Lock()
defer oprw.Unlock()
if opListBuckets == nil {
opListBuckets = &aws.Operation{
Name: "ListBuckets",
HTTPMethod: "GET",
HTTPPath: "/",
}
}
if input == nil {
input = &ListBucketsInput{}
}
req = c.newRequest(opListBuckets, input, output)
output = &ListBucketsOutput{}
req.Data = output
return
}
https://github.com/awslabs/aws-sdk-go/blob/master/service/s3/api.go#L1024-L1045
auto-generated example code
• GoにはExampleがテストになる機能が標準ライブラリに付い
ている
• Testable Examples in Go - The Go Blog
• AWS SDK for GoではこのExampleテストも自動生成されてい
る
• godoc で簡単に実行例をみることができる
Example Test: S3 ListBuckets()の例
func ExampleS3_ListBuckets() {
svc := s3.New(nil)
var params *s3.ListBucketsInput
resp, err := svc.ListBuckets(params)
if awsErr, ok := err.(awserr.Error); ok {
// Generic AWS Error with Code, Message, and original error (if any)
fmt.Println(awsErr.Code(), awsErr.Message(), awsErr.OrigErr())
if reqErr, ok := err.(awserr.RequestFailure); ok {
// A service error occurred
fmt.Println(reqErr.Code(), reqErr.Message(), reqErr.StatusCode(), reqErr.RequestID())
}
} else {
fmt.Println(err.Error())
}
// Pretty-print the response data.
fmt.Println(awsutil.StringValue(resp))
}
aws-sdk-go/examples_test.go at master : awslabs/aws-sdk-go より
これも自動生成されている
Godocから見ることができます
http://godoc.org/github.com/awslabs/aws-sdk-go/service/
s3#ex-S3-ListBuckets
まとめ
• AWS SDK for Goはまだ開発中ですが、触れます
• モデルベースのコード生成が活用されている
• ExampleやTestも自動生成されている
• どんどんつかってフィードバックしましょう
• Issues · awslabs/aws-sdk-go

More Related Content

PDF
Jenkinsとhadoopを利用した継続的データ解析環境の構築
PDF
AWS SDK for Go in #jawsmeguro
PPTX
Jenkinsとhadoopを利用した継続的データ解析環境の構築
PDF
Data Engineering at VOYAGE GROUP #jawsdays
PPTX
AWSのElastic BeanstalkでWordPressを 構築レスで導入してみる。
PDF
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
PDF
sbtマルチプロジェクトビルドの使いどころ
PPTX
開発環境をDockernizeした話
Jenkinsとhadoopを利用した継続的データ解析環境の構築
AWS SDK for Go in #jawsmeguro
Jenkinsとhadoopを利用した継続的データ解析環境の構築
Data Engineering at VOYAGE GROUP #jawsdays
AWSのElastic BeanstalkでWordPressを 構築レスで導入してみる。
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
sbtマルチプロジェクトビルドの使いどころ
開発環境をDockernizeした話

What's hot (19)

PDF
LocalStack
PPTX
オフラインファーストの思想と実践
PDF
Service worker が拓く mobile web の新しいかたち
PPTX
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
PDF
2016/05/01 Visual Studio with Cordova
PDF
Sbtのマルチプロジェクトはいいぞ
PDF
SwaggerとAPIのデザイン
PDF
さくらのインフラコード
PDF
Swaggerで始めるモデルファーストなAPI開発
PPTX
開発チーム管理で役立ったVSCode拡張機能
PPTX
フロントエンドの技術を刷新した話し。
PDF
【LT】 怖くない恐怖のScala.js
PDF
React Redux Redux-Saga + サーバサイドレンダリング
PPTX
2016/12/17 ASP.NET フロントエンドタスク入門
PDF
Isomorphic web development with scala and scala.js
PDF
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
PDF
進撃のSbt
PDF
ビッグじゃなくても使えるSpark Streaming
PDF
インフラ運用管理ツールとGolang OSS運用管理勉強会LT
LocalStack
オフラインファーストの思想と実践
Service worker が拓く mobile web の新しいかたち
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
2016/05/01 Visual Studio with Cordova
Sbtのマルチプロジェクトはいいぞ
SwaggerとAPIのデザイン
さくらのインフラコード
Swaggerで始めるモデルファーストなAPI開発
開発チーム管理で役立ったVSCode拡張機能
フロントエンドの技術を刷新した話し。
【LT】 怖くない恐怖のScala.js
React Redux Redux-Saga + サーバサイドレンダリング
2016/12/17 ASP.NET フロントエンドタスク入門
Isomorphic web development with scala and scala.js
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
進撃のSbt
ビッグじゃなくても使えるSpark Streaming
インフラ運用管理ツールとGolang OSS運用管理勉強会LT
Ad

Viewers also liked (8)

PDF
JASELE 20140809 Terasawa
PDF
アジャイルマインドの重要性(長野)
PDF
JavaScriptトレンド総括(2014)
PDF
英語教育学における 「実態調査」の批判的検討
PPTX
第8回山口県英語教育フォーラム. 2015年11月14日(土)
PDF
アジャイルプロセス協議会の紹介
PDF
10 years devsumi agile and the future
PPTX
言語教育政策研究のあり方 英語教育政策研究を事例として
JASELE 20140809 Terasawa
アジャイルマインドの重要性(長野)
JavaScriptトレンド総括(2014)
英語教育学における 「実態調査」の批判的検討
第8回山口県英語教育フォーラム. 2015年11月14日(土)
アジャイルプロセス協議会の紹介
10 years devsumi agile and the future
言語教育政策研究のあり方 英語教育政策研究を事例として
Ad

Similar to AWS SDK for Go in #jawsmeguro (20)

PDF
AWS SDK for Go を使って作ってみた話
PDF
AWS Black Belt Online Seminar AWSサービスを利用したアプリケーション開発を始めよう
PDF
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜
PDF
Golang on AWS
PDF
GoCon2016 spring 自作Webフレームワーク uconを作った話
PDF
[AWSマイスターシリーズ] AWS Client Side SDK -Android,iOS & JavaScript-
PDF
20120528 aws meister-reloaded-awssd-kforjava-public
PDF
Cloud Programing for beginner
PDF
AWS SDK for Haskell開発
PDF
メルカリ・ソウゾウでは どうGoを活用しているのか?
PPTX
Goで作って配布するAzureコマンドラインユーティリティ
PDF
初参加の Developer が見てきた re:Invent 2015
PDF
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
PDF
JAWS-UG静岡 #1 Introduction to AWS SDK for Ruby
PDF
Gaming cicd-pipeline gaming-technight-2
PDF
Serverless backendformobilegame and_aws-appsync_gamingtechnight-2
PDF
[AWSマイスターシリーズ] AWS SDK for PHP / Ruby / boto(Python) / JavaScript in Node.js
PDF
AWS小ネタ集
PDF
AWS Lambda in Golang
PDF
AWS Black Belt Techシリーズ AWS SDK
AWS SDK for Go を使って作ってみた話
AWS Black Belt Online Seminar AWSサービスを利用したアプリケーション開発を始めよう
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜
Golang on AWS
GoCon2016 spring 自作Webフレームワーク uconを作った話
[AWSマイスターシリーズ] AWS Client Side SDK -Android,iOS & JavaScript-
20120528 aws meister-reloaded-awssd-kforjava-public
Cloud Programing for beginner
AWS SDK for Haskell開発
メルカリ・ソウゾウでは どうGoを活用しているのか?
Goで作って配布するAzureコマンドラインユーティリティ
初参加の Developer が見てきた re:Invent 2015
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
JAWS-UG静岡 #1 Introduction to AWS SDK for Ruby
Gaming cicd-pipeline gaming-technight-2
Serverless backendformobilegame and_aws-appsync_gamingtechnight-2
[AWSマイスターシリーズ] AWS SDK for PHP / Ruby / boto(Python) / JavaScript in Node.js
AWS小ネタ集
AWS Lambda in Golang
AWS Black Belt Techシリーズ AWS SDK

More from VOYAGE GROUP (20)

PDF
Data Engineering at VOYAGE GROUP #jawsdays
PDF
JSON Schema で Web API のスキマを埋めよう
PDF
Flux react現状確認会
PDF
[20140625]wwdc2014 feedback
PDF
Google playでのリワードアプリリジェクトからの今後のマネタイズ手段について インタースティシャル広告×クロスプロモーション-
PDF
事業内デザイナーのミッション(公開版) genesix 藤井幹大
PDF
[20130624]最近の開発環境について話してみる sakata
PDF
セミナープレゼン資料【Adingo】 20130529 
PDF
セミナープレゼン資料【Adingo】 20130530 
PDF
Abテストノススメ
PDF
iPhoneアプリ「トリセツ」にて実践したリーンスタートアップ
PDF
【発表用】Lpoワークショップ~組織でサイト改善をする方法~
KEY
Androidにおけるテストに関して〜デバイスをどう選択するか〜
PDF
スマホ無料アプリのマネタイズについて【Adingo】
PDF
最新のマーケットアルゴリズムと、 アルゴリズムを踏まえてのプロモーション
PDF
【発表用】ウェブアナリスト養成講座「Lpoとabテスト」
PDF
ゴールから始めよう!
PDF
Phpではじめるオブジェクト指向(公開用)
PDF
Sprk2012 LT
KEY
フラットなPHPからフレームワークへ
Data Engineering at VOYAGE GROUP #jawsdays
JSON Schema で Web API のスキマを埋めよう
Flux react現状確認会
[20140625]wwdc2014 feedback
Google playでのリワードアプリリジェクトからの今後のマネタイズ手段について インタースティシャル広告×クロスプロモーション-
事業内デザイナーのミッション(公開版) genesix 藤井幹大
[20130624]最近の開発環境について話してみる sakata
セミナープレゼン資料【Adingo】 20130529 
セミナープレゼン資料【Adingo】 20130530 
Abテストノススメ
iPhoneアプリ「トリセツ」にて実践したリーンスタートアップ
【発表用】Lpoワークショップ~組織でサイト改善をする方法~
Androidにおけるテストに関して〜デバイスをどう選択するか〜
スマホ無料アプリのマネタイズについて【Adingo】
最新のマーケットアルゴリズムと、 アルゴリズムを踏まえてのプロモーション
【発表用】ウェブアナリスト養成講座「Lpoとabテスト」
ゴールから始めよう!
Phpではじめるオブジェクト指向(公開用)
Sprk2012 LT
フラットなPHPからフレームワークへ

AWS SDK for Go in #jawsmeguro

  • 1. AWS SDK for Go JAWS-UG Meguro #0 @suzu_v
  • 2. アジェンダ • AWS SDK for Goの紹介 • 内部での実装の工夫について
  • 3. オフィシャルな AWS SDK いろいろ Android, Browser (JavaScript), iOS, Java, .NET, Node.js, PHP, Python, Ruby ... and Go (Preview 2015/01/29, Unstable): ~
  • 4. 既存のGo実装 (コミュニティ版) • go-amz/amz • もともと: https://launchpad.net/goamz • mitchellhのfork: mitchellh/goamz • goamz/goamz with Canonical • AdRollによるfork: AdRoll/goamz 私はこれらのどれも使ったことがありません。使ってる方いたら教 えて下さい。
  • 5. AWS SDK for Go https://github.com/awslabs/aws-sdk-go
  • 6. AWS SDK for Go • もともとStripe社で開発されていたもの • codahale (Coda Hale) さんがメンテナ • Model-basedでのコード生成を使っていて、これが他言語のAWS SDKと 作りが似ていた • awslabsに移管して公式SDKとして開発中 • https://aws.amazon.com/jp/blogs/aws/coming-soon-aws-sdk-for-go/ • 現在Developer Preview段階
  • 7. だいたいこんな感じで使えます package main import ( "fmt" "github.com/awslabs/aws-sdk-go/aws" "github.com/awslabs/aws-sdk-go/service/s3" ) // AWS SDK for GoでのListBucketsのサンプル func main() { // credentials are automatically loaded from ~/.aws/credentials s := s3.New(&aws.Config{Region: "ap-northeast-1"}) buckets, _ := s.ListBuckets(nil) for _, b := range buckets.Buckets { v := *b.Name fmt.Printf("bucket: %sn", v) } }
  • 8. 使ってみた S3にobjectをputで配置して、list, head, copy, deleteする aws-sdk-go-example/s3_misc.go at master : suzuken/aws-sdk- go-example
  • 9. 感触 • わりと書ける、がまだ基礎的なレベルのapiを直接叩く必要が ある • けれども、Exampleや型によるサポートを利用すると多少楽に かける • Exampleも自動生成されている(後述 • この感触は正式リリース時に変わる可能性があります (Unstable
  • 10. サポート予定と思われるサービス autoscaling dynamodb rds cloudformation ec2 redshift cloudfront ecs route53 cloudhsm elasticache route53domains cloudsearch elasticbeanstalk s3 cloudsearchdomain elastictranscoder ses cloudtrail elb simpledb cloudwatch emr sns cloudwatchlogs glacier sqs codedeploy iam ssm cognitoidentity importexport storagegateway cognitosync kinesis sts configservice kms support datapipeline lambda swf directconnect opsworks どのように各種サービスをサポートしているか?
  • 11. AWS SDK for Go internal • /service 以下は モデルベースのapi生成 によって自動生成 されたコード • /apis/{service_name} にJSONで書かれたapiの定義があ り、これを利用している • ちなみにこの定義はbotoで使っているものらしい
  • 12. go generate Generating code - The Go Blog • ライブラリ開発者のための機能 • ファイルのヘッダに go:generate gen などと書いておくと go generate で gen が実行される • gen を実行することでファイルが生成される • ワンライナー実行のためのwrapper
  • 13. AWS SDK for Go の Makefileより aws-sdk-go/Makefile at master : awslabs/aws-sdk-go default: generate generate-protocol-test: go generate ./internal/protocol/... generate-integration-test: go generate ./internal/fixtures/integration generate-test: generate-protocol-test generate-integration-test generate: go generate ./aws go generate ./service test: generate-test go test ./... -tags=integration
  • 14. ライブラリのコードを生成する aws-sdk-go/generate.go at master : awslabs/aws-sdk-go // Package service contains automatically generated AWS clients. package service //go:generate go run ../internal/model/cli/gen-api/main.go -path=../service ../apis/*/*.normal.json internal/model/api あたりを読むとどのようにコードを生成し ているかがわかります。
  • 15. 例: ListBuckets (apis/s3 での定義) それぞれのapiの定義がJSONで書かれている "ListBuckets":{ "name":"ListBuckets", "http":{ "method":"GET", "requestUri":"/" }, "output":{"shape":"ListBucketsOutput"}, "documentation":"Returns a list of all buckets owned by the authenticated sender of the request.", "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTServiceGET.html", "alias":"GetService" }, https://github.com/awslabs/aws-sdk-go/blob/master/apis/ s3/2006-03-01.normal.json#L397-L407
  • 16. 生成されたListBucketsのコード // ListBucketsRequest generates a request for the ListBuckets operation. func (c *S3) ListBucketsRequest(input *ListBucketsInput) (req *aws.Request, output *ListBucketsOutput) { oprw.Lock() defer oprw.Unlock() if opListBuckets == nil { opListBuckets = &aws.Operation{ Name: "ListBuckets", HTTPMethod: "GET", HTTPPath: "/", } } if input == nil { input = &ListBucketsInput{} } req = c.newRequest(opListBuckets, input, output) output = &ListBucketsOutput{} req.Data = output return } https://github.com/awslabs/aws-sdk-go/blob/master/service/s3/api.go#L1024-L1045
  • 17. auto-generated example code • GoにはExampleがテストになる機能が標準ライブラリに付い ている • Testable Examples in Go - The Go Blog • AWS SDK for GoではこのExampleテストも自動生成されてい る • godoc で簡単に実行例をみることができる
  • 18. Example Test: S3 ListBuckets()の例 func ExampleS3_ListBuckets() { svc := s3.New(nil) var params *s3.ListBucketsInput resp, err := svc.ListBuckets(params) if awsErr, ok := err.(awserr.Error); ok { // Generic AWS Error with Code, Message, and original error (if any) fmt.Println(awsErr.Code(), awsErr.Message(), awsErr.OrigErr()) if reqErr, ok := err.(awserr.RequestFailure); ok { // A service error occurred fmt.Println(reqErr.Code(), reqErr.Message(), reqErr.StatusCode(), reqErr.RequestID()) } } else { fmt.Println(err.Error()) } // Pretty-print the response data. fmt.Println(awsutil.StringValue(resp)) } aws-sdk-go/examples_test.go at master : awslabs/aws-sdk-go より これも自動生成されている
  • 20. まとめ • AWS SDK for Goはまだ開発中ですが、触れます • モデルベースのコード生成が活用されている • ExampleやTestも自動生成されている • どんどんつかってフィードバックしましょう • Issues · awslabs/aws-sdk-go