SlideShare a Scribd company logo
1 of 20
Download to read offline
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

What's hot

Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)崇之 清水
 
Chefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについてChefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについてYuuki Namikawa
 
Service worker が拓く mobile web の新しいかたち
Service worker が拓く mobile web の新しいかたちService worker が拓く mobile web の新しいかたち
Service worker が拓く mobile web の新しいかたちKinuko Yasuda
 
ECS for Docker Meetup #4
ECS for Docker Meetup #4ECS for Docker Meetup #4
ECS for Docker Meetup #4Shinpei Ohtani
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ Daisuke Ikeda
 
Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化dcubeio
 
Build insider testingwithvs
Build insider testingwithvsBuild insider testingwithvs
Build insider testingwithvsTomoyuki Iwade
 
AWS SDK for Haskell開発
AWS SDK for Haskell開発AWS SDK for Haskell開発
AWS SDK for Haskell開発Nomura Yusuke
 
CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩淳 千葉
 
3分でわかる(気になれる) AWS OpsWorks
3分でわかる(気になれる) AWS OpsWorks3分でわかる(気になれる) AWS OpsWorks
3分でわかる(気になれる) AWS OpsWorksYuuki Namikawa
 
Yesodを支える技術
Yesodを支える技術Yesodを支える技術
Yesodを支える技術Hiromi Ishii
 
サーバ構築を自動化する 〜Ansible〜
サーバ構築を自動化する 〜Ansible〜サーバ構築を自動化する 〜Ansible〜
サーバ構築を自動化する 〜Ansible〜Yui Ito
 
Ansible tower 構築方法と使い方
Ansible tower 構築方法と使い方Ansible tower 構築方法と使い方
Ansible tower 構築方法と使い方Hiroshi Okano
 
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説Takao Tetsuro
 

What's hot (18)

Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
 
Chefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについてChefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについて
 
Service worker が拓く mobile web の新しいかたち
Service worker が拓く mobile web の新しいかたちService worker が拓く mobile web の新しいかたち
Service worker が拓く mobile web の新しいかたち
 
ECS for Docker Meetup #4
ECS for Docker Meetup #4ECS for Docker Meetup #4
ECS for Docker Meetup #4
 
LocalStack
LocalStackLocalStack
LocalStack
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~
 
Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化
 
Build insider testingwithvs
Build insider testingwithvsBuild insider testingwithvs
Build insider testingwithvs
 
AWS SDK for Haskell開発
AWS SDK for Haskell開発AWS SDK for Haskell開発
AWS SDK for Haskell開発
 
Using Windows Azure
Using Windows AzureUsing Windows Azure
Using Windows Azure
 
CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩
 
3分でわかる(気になれる) AWS OpsWorks
3分でわかる(気になれる) AWS OpsWorks3分でわかる(気になれる) AWS OpsWorks
3分でわかる(気になれる) AWS OpsWorks
 
Ppl
PplPpl
Ppl
 
Yesod勉強会
Yesod勉強会Yesod勉強会
Yesod勉強会
 
Yesodを支える技術
Yesodを支える技術Yesodを支える技術
Yesodを支える技術
 
サーバ構築を自動化する 〜Ansible〜
サーバ構築を自動化する 〜Ansible〜サーバ構築を自動化する 〜Ansible〜
サーバ構築を自動化する 〜Ansible〜
 
Ansible tower 構築方法と使い方
Ansible tower 構築方法と使い方Ansible tower 構築方法と使い方
Ansible tower 構築方法と使い方
 
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
 

Viewers also liked

ハードなOpen flowswitcの話
ハードなOpen flowswitcの話ハードなOpen flowswitcの話
ハードなOpen flowswitcの話Masayuki Miyake
 
AWS Black Belt Tech シリーズ 2015 - AWS Data Pipeline
AWS Black Belt Tech シリーズ 2015 - AWS Data PipelineAWS Black Belt Tech シリーズ 2015 - AWS Data Pipeline
AWS Black Belt Tech シリーズ 2015 - AWS Data PipelineAmazon Web Services Japan
 
クラウドとAWSの説明
クラウドとAWSの説明クラウドとAWSの説明
クラウドとAWSの説明真吾 吉田
 
AWS WAF でセキュリティ対策_JAWS-UG沖縄勉強会_Cloud on the BEACH 2016
AWS WAF でセキュリティ対策_JAWS-UG沖縄勉強会_Cloud on the BEACH 2016AWS WAF でセキュリティ対策_JAWS-UG沖縄勉強会_Cloud on the BEACH 2016
AWS WAF でセキュリティ対策_JAWS-UG沖縄勉強会_Cloud on the BEACH 2016Sanehiko Yogi
 
AWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for Windows Powershell
AWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for Windows PowershellAWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for Windows Powershell
AWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for Windows PowershellAmazon Web Services Japan
 
AWSのセキュリティについて
AWSのセキュリティについてAWSのセキュリティについて
AWSのセキュリティについてYasuhiro Horiuchi
 
AWS 初心者向けWebinar 利用者が実施するAWS上でのセキュリティ対策
AWS 初心者向けWebinar 利用者が実施するAWS上でのセキュリティ対策AWS 初心者向けWebinar 利用者が実施するAWS上でのセキュリティ対策
AWS 初心者向けWebinar 利用者が実施するAWS上でのセキュリティ対策Amazon Web Services Japan
 
AWS re:Invent 2016: Deep Dive: Amazon EMR Best Practices & Design Patterns (B...
AWS re:Invent 2016: Deep Dive: Amazon EMR Best Practices & Design Patterns (B...AWS re:Invent 2016: Deep Dive: Amazon EMR Best Practices & Design Patterns (B...
AWS re:Invent 2016: Deep Dive: Amazon EMR Best Practices & Design Patterns (B...Amazon Web Services
 
AWS re:Invent 2016: Migrating Your Data Warehouse to Amazon Redshift (DAT202)
AWS re:Invent 2016: Migrating Your Data Warehouse to Amazon Redshift (DAT202)AWS re:Invent 2016: Migrating Your Data Warehouse to Amazon Redshift (DAT202)
AWS re:Invent 2016: Migrating Your Data Warehouse to Amazon Redshift (DAT202)Amazon Web Services
 
AWS Blackbelt 2015シリーズ Amazon Storage Service (S3)
AWS Blackbelt 2015シリーズ Amazon Storage Service (S3)AWS Blackbelt 2015シリーズ Amazon Storage Service (S3)
AWS Blackbelt 2015シリーズ Amazon Storage Service (S3)Amazon Web Services Japan
 
Interactively Querying Large-scale Datasets on Amazon S3
Interactively Querying Large-scale Datasets on Amazon S3Interactively Querying Large-scale Datasets on Amazon S3
Interactively Querying Large-scale Datasets on Amazon S3Amazon Web Services
 
Develop a Custom Data Solution Architecture with NorthBay
Develop a Custom Data Solution Architecture with NorthBayDevelop a Custom Data Solution Architecture with NorthBay
Develop a Custom Data Solution Architecture with NorthBayAmazon Web Services
 

Viewers also liked (12)

ハードなOpen flowswitcの話
ハードなOpen flowswitcの話ハードなOpen flowswitcの話
ハードなOpen flowswitcの話
 
AWS Black Belt Tech シリーズ 2015 - AWS Data Pipeline
AWS Black Belt Tech シリーズ 2015 - AWS Data PipelineAWS Black Belt Tech シリーズ 2015 - AWS Data Pipeline
AWS Black Belt Tech シリーズ 2015 - AWS Data Pipeline
 
クラウドとAWSの説明
クラウドとAWSの説明クラウドとAWSの説明
クラウドとAWSの説明
 
AWS WAF でセキュリティ対策_JAWS-UG沖縄勉強会_Cloud on the BEACH 2016
AWS WAF でセキュリティ対策_JAWS-UG沖縄勉強会_Cloud on the BEACH 2016AWS WAF でセキュリティ対策_JAWS-UG沖縄勉強会_Cloud on the BEACH 2016
AWS WAF でセキュリティ対策_JAWS-UG沖縄勉強会_Cloud on the BEACH 2016
 
AWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for Windows Powershell
AWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for Windows PowershellAWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for Windows Powershell
AWS Black Belt Tech シリーズ 2015 AWS CLI & AWS Tools for Windows Powershell
 
AWSのセキュリティについて
AWSのセキュリティについてAWSのセキュリティについて
AWSのセキュリティについて
 
AWS 初心者向けWebinar 利用者が実施するAWS上でのセキュリティ対策
AWS 初心者向けWebinar 利用者が実施するAWS上でのセキュリティ対策AWS 初心者向けWebinar 利用者が実施するAWS上でのセキュリティ対策
AWS 初心者向けWebinar 利用者が実施するAWS上でのセキュリティ対策
 
AWS re:Invent 2016: Deep Dive: Amazon EMR Best Practices & Design Patterns (B...
AWS re:Invent 2016: Deep Dive: Amazon EMR Best Practices & Design Patterns (B...AWS re:Invent 2016: Deep Dive: Amazon EMR Best Practices & Design Patterns (B...
AWS re:Invent 2016: Deep Dive: Amazon EMR Best Practices & Design Patterns (B...
 
AWS re:Invent 2016: Migrating Your Data Warehouse to Amazon Redshift (DAT202)
AWS re:Invent 2016: Migrating Your Data Warehouse to Amazon Redshift (DAT202)AWS re:Invent 2016: Migrating Your Data Warehouse to Amazon Redshift (DAT202)
AWS re:Invent 2016: Migrating Your Data Warehouse to Amazon Redshift (DAT202)
 
AWS Blackbelt 2015シリーズ Amazon Storage Service (S3)
AWS Blackbelt 2015シリーズ Amazon Storage Service (S3)AWS Blackbelt 2015シリーズ Amazon Storage Service (S3)
AWS Blackbelt 2015シリーズ Amazon Storage Service (S3)
 
Interactively Querying Large-scale Datasets on Amazon S3
Interactively Querying Large-scale Datasets on Amazon S3Interactively Querying Large-scale Datasets on Amazon S3
Interactively Querying Large-scale Datasets on Amazon S3
 
Develop a Custom Data Solution Architecture with NorthBay
Develop a Custom Data Solution Architecture with NorthBayDevelop a Custom Data Solution Architecture with NorthBay
Develop a Custom Data Solution Architecture with NorthBay
 

Similar to AWS SDK for Go in #jawsmeguro

成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
[AWSマイスターシリーズ] AWS SDK for PHP / Ruby / boto(Python) / JavaScript in Node.js
[AWSマイスターシリーズ] AWS SDK for PHP / Ruby / boto(Python) / JavaScript in Node.js[AWSマイスターシリーズ] AWS SDK for PHP / Ruby / boto(Python) / JavaScript in Node.js
[AWSマイスターシリーズ] AWS SDK for PHP / Ruby / boto(Python) / JavaScript in Node.jsAmazon Web Services Japan
 
AWS Lambdaのテストで役立つ各種ツール
AWS Lambdaのテストで役立つ各種ツールAWS Lambdaのテストで役立つ各種ツール
AWS Lambdaのテストで役立つ各種ツールMasaki Suzuki
 
Goで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティGoで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティyaegashi
 
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespacesIssei Hiraoka
 
AWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
AWS Black Belt Tech シリーズ 2015 - AWS Elastic BeanstalkAWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
AWS Black Belt Tech シリーズ 2015 - AWS Elastic BeanstalkAmazon Web Services Japan
 
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた日本マイクロソフト株式会社
 
20170809 AWS code series
20170809 AWS code series20170809 AWS code series
20170809 AWS code seriesAtsushi Fukui
 
試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShiftEtsuji Nakai
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Yohei Sasaki
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Daisuke Hiraoka
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから真吾 吉田
 
Introduction of aws-cli
Introduction of aws-cliIntroduction of aws-cli
Introduction of aws-cliMasaaki HIROSE
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
Application Deployment on AWS
Application Deployment on AWSApplication Deployment on AWS
Application Deployment on AWSEiji Shinohara
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係Hiraku Komuro
 
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
AWS Black Belt Online Seminar 2017 AWS Elastic BeanstalkAWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
AWS Black Belt Online Seminar 2017 AWS Elastic BeanstalkAmazon Web Services Japan
 
Logic Apps と Api Apps の話
Logic Apps と Api Apps の話Logic Apps と Api Apps の話
Logic Apps と Api Apps の話Sunao Tomita
 

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

成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
Nodejs
NodejsNodejs
Nodejs
 
[AWSマイスターシリーズ] AWS SDK for PHP / Ruby / boto(Python) / JavaScript in Node.js
[AWSマイスターシリーズ] AWS SDK for PHP / Ruby / boto(Python) / JavaScript in Node.js[AWSマイスターシリーズ] AWS SDK for PHP / Ruby / boto(Python) / JavaScript in Node.js
[AWSマイスターシリーズ] AWS SDK for PHP / Ruby / boto(Python) / JavaScript in Node.js
 
AWS Lambdaのテストで役立つ各種ツール
AWS Lambdaのテストで役立つ各種ツールAWS Lambdaのテストで役立つ各種ツール
AWS Lambdaのテストで役立つ各種ツール
 
Goで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティGoで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティ
 
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
 
AWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
AWS Black Belt Tech シリーズ 2015 - AWS Elastic BeanstalkAWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
AWS Black Belt Tech シリーズ 2015 - AWS Elastic Beanstalk
 
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
 
20170809 AWS code series
20170809 AWS code series20170809 AWS code series
20170809 AWS code series
 
試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから
 
Introduction of aws-cli
Introduction of aws-cliIntroduction of aws-cli
Introduction of aws-cli
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
Application Deployment on AWS
Application Deployment on AWSApplication Deployment on AWS
Application Deployment on AWS
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係
 
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
AWS Black Belt Online Seminar 2017 AWS Elastic BeanstalkAWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
 
Logic Apps と Api Apps の話
Logic Apps と Api Apps の話Logic Apps と Api Apps の話
Logic Apps と Api Apps の話
 

More from Kenta Suzuki

fluentd設定行数とシステム複雑性のカジュアルな話
fluentd設定行数とシステム複雑性のカジュアルな話fluentd設定行数とシステム複雑性のカジュアルな話
fluentd設定行数とシステム複雑性のカジュアルな話Kenta Suzuki
 
サービス改善はログデータ分析から
サービス改善はログデータ分析からサービス改善はログデータ分析から
サービス改善はログデータ分析からKenta Suzuki
 
web広告輪講 #5
web広告輪講 #5web広告輪講 #5
web広告輪講 #5Kenta Suzuki
 
Head First Ad Technology and DMP
Head First Ad Technology and DMPHead First Ad Technology and DMP
Head First Ad Technology and DMPKenta Suzuki
 
データとは何か
データとは何かデータとは何か
データとは何かKenta Suzuki
 

More from Kenta Suzuki (6)

fluentd設定行数とシステム複雑性のカジュアルな話
fluentd設定行数とシステム複雑性のカジュアルな話fluentd設定行数とシステム複雑性のカジュアルな話
fluentd設定行数とシステム複雑性のカジュアルな話
 
サービス改善はログデータ分析から
サービス改善はログデータ分析からサービス改善はログデータ分析から
サービス改善はログデータ分析から
 
DMPの仕組み
DMPの仕組みDMPの仕組み
DMPの仕組み
 
web広告輪講 #5
web広告輪講 #5web広告輪講 #5
web広告輪講 #5
 
Head First Ad Technology and DMP
Head First Ad Technology and DMPHead First Ad Technology and DMP
Head First Ad Technology and DMP
 
データとは何か
データとは何かデータとは何か
データとは何か
 

Recently uploaded

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 

Recently uploaded (9)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 

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