Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
aws-sdk-go-v2入門 MediaDo.go
Search
ogady
September 25, 2020
Programming
2.8k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
aws-sdk-go-v2入門 MediaDo.go
ogady
September 25, 2020
More Decks by ogady
See All by ogady
大規模サービスにおける カスケード障害
takumiogawa
3
1.4k
SREが投資するAIOps ~ペアーズにおけるLLM for Developerへの取り組み~
takumiogawa
7
2.9k
[JAWS DAYS 2022 - Satellites]PairsにおけるEKSセキュリティの取り組み
takumiogawa
2
3.6k
PairsにおけるSLI/SLO再定義
takumiogawa
7
7.6k
Other Decks in Programming
See All in Programming
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
410
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
290
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
460
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
330
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
380
wkhtmltopdfの次どうするか問題2026
willnet
2
1.8k
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
110
Intent as Code
shoppingjaws
6
1.1k
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
110
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1k
SREの越境 / SRE Collaboration
y0hgi
2
290
Heart of Swift Concurrency
koher
0
1.1k
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
410
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
930
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
450
Designing for Performance
lara
611
70k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Design in an AI World
tapps
1
340
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
520
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Transcript
aws-sdk-go-v2入門 MediaDo.go#2 2020.09.25
株式会社メディアドゥ所属 - バックエンド、インフラエンジニア Name : Takumi Ogawa Twitter: @_ogady_
1. aws-sdk-goとは 2. aws-sdk-go-v2とは 3. aws-sdk-goとの違い 4. aws-sdk-go-v2を使ってみる 5. 最後に
aws-sdk-go、 使ってますか? Q
1 aws-sdk-goとは
aws-sdk-goとは • おなじみGo言語用のAWS SDK • 認証・リクエストの再試行・エラー処理など、低レイ ヤーの処理をよしなにラッピングしてくれる • goroutineを使用したS3との大容量ファイル受け渡しな どのAWS連携が簡単にできる
2 aws-sdk-go-v2とは
aws-sdk-go-v2とは • 現行提供されているaws-sdk-goの後継 • パフォーマンス・一貫性・使いやすさなどを改善 • 2017年12月22日より開発者プレビュー版がリリース →2020年9月25日現在も開発者プレビュー版のみの提供
3 aws-sdk-goとの違い
• sessionではなくexternalパッケージを使用する • 現行のsessionパッケージとcredentialパッケージの機能 がv2ではexternalパッケージに集約され、わかりやすく なっている • クライアントはaws.Configのみを使用して生成する。 →従来のaws.Configを生成してsession.New()する手順か ら、よりシンプルになった
・サービスクライアント生成方法の違い aws-sdk-goとの違い
aws-sdk-go sess := session.Must( session.NewSession() ) // S3クライアントを作成 svc :=
s3.New(sess) aws-sdk-go-v2 aws-sdk-goとの違い ・サービスクライアント生成方法の違い cfg, err := external.LoadDefaultAWSConfig() if err != nil { panic( err) } // S3クライアントを作成 svc := s3.New(cfg) ※上記はおおむね同じ挙動
• Send()メソッドを使用し、リクエストを送信する • APIインプット構造体をRequest()に渡すのは現行と同じ • APIコール形式が各サービスで統一されているため、わ かりやすくなった →各API要求メソッドはサフィックスに”Request”がつ いている、Send()メソッドでAPIコールする、など ・APIリクエスト発行の違い
aws-sdk-goとの違い
aws-sdk-go svc := s3.New(sess) res, err := svc.GetObjectWithContext( context.TODO(), &s3.GetObjectInput{
Bucket: aws.String(bucket), Key: aws.String(key)} ) } aws-sdk-go-v2 aws-sdk-goとの違い ・APIリクエスト発行の違い svc := s3.New(cfg) req := svc.GetObjectRequest( &s3.GetObjectInput{ Bucket: aws.String(bucketName), Key: aws.String(key)} ) res, err := req.Send(context.TODO())
• APIインプット構造体のフィールドに型指定された列挙 値を使用する →この変更により、文字列を直接使用することがなくな り、より型安全に使用できる • 列挙値を使用する際に、APIインプットのフィールドを ポインタ型にする必要がなくなった aws-sdk-goとの違い ・APIインプット構造体に型指定された列挙値を提供
const ( ObjectCannedACLPrivate = "private" // 一部省略 } aws-sdk-go type
PutObjectInput struct { // 一部省略 ACL *string } aws-sdk-go-v2 aws-sdk-goとの違い type PutObjectInput struct { // 一部省略 ACL ObjectCannedACL } type ObjectCannedACL string const ( ObjectCannedACLPrivate ObjectCannedACL = "private" // 一部省略 } ・APIインプット構造体に型指定された列挙値を提供(内部実装比較)
aws-sdk-go input := &s3.PutObjectInput{ Bucket: aws.String("myBucket"), Key: aws.String("myKey"), ACL: aws.String(
s3.ObjectCannedACLPrivate ), Body: file, } aws-sdk-go-v2 aws-sdk-goとの違い ・APIインプット構造体に型指定された列挙値を提供 input := &s3.PutObjectInput{ Bucket: aws.String("myBucket"), Key: aws.String("myKey"), ACL: s3.ObjectCannedACLPrivate, Body: file, }
• APIインプット構造体のフィールドでスライス要素と マップ要素を値型からポインタ型に変換する必要がなく なった ・APIスライス、マップ要素指定の違い aws-sdk-goとの違い
aws-sdk-go type AddPermissionInput struct { _ struct{} AWSAccountIds []*string //
一部省略 } aws-sdk-go-v2 aws-sdk-goとの違い ・APIスライス、マップ要素指定の違い(内部実装比較) type AddPermissionInput struct { _ struct{} AWSAccountIds []string // 一部省略 }
input := &sqs.AddPermissionInput{ AWSAccountIds: []string{ "123456789", }, Actions: []string{ "SendMessage",
}, // 一部省略 } aws-sdk-go input := &sqs.AddPermissionInput{ AWSAccountIds: []*string{ aws.String("123456789"), }, Actions: []*string{ aws.String("SendMessage"), }, // 一部省略 } aws-sdk-go-v2 aws-sdk-goとの違い ・APIスライス、マップ要素指定の違い
4 aws-sdk-go-v2を 使ってみる
cfg, err = external.LoadDefaultAWSConfig() cfg, err = external.LoadDefaultAWSConfig( external.WithSharedConfigProfile("example-profile-name"), )
cfg, err := external.LoadDefaultAWSConfig( external.WithCredentialsProvider{ CredentialsProvider: aws.StaticCredentialsProvider{ Value: aws.Credentials{ AccessKeyID: "AKID", SecretAccessKey: "SECRET", SessionToken: "SESSION", Source: "example hard coded credentials" }}}) aws-sdk-go-v2を使ってみる ・Config情報取得 defaultの認証情報を 使用するパターン 認証設定ファイルの 任意の認証情報を使 用するパターン 認証情報を直接指定 するパターン
・S3へファイルアップロード aws-sdk-go-v2を使ってみる svc := s3.New(cfg) input := &s3.PutObjectInput{ Body: bytes.NewReader(file),
Bucket: aws.String(“bucketName”), Key: aws.String(“key”), ACL: s3.ObjectCannedACLPublicRead, } req := svc.PutObjectRequest(input) _, err := req.Send(context.TODO()) if err != nil { return fmt.Errorf("failed to put s3 object with key '%s' %w", key, err) } 前のスライドで生成した aws.Configを渡す リクエストを送信する
・SQSへメッセージ送信 aws-sdk-go-v2を使ってみる svc := sqs.New(cfg) input := &sqs.SendMessageInput{ MessageBody: aws.String(“Message”),
QueueUrl: aws.String(“exampleURL”), } req := svc.SendMessageRequest(input) _, err := req.Send(context.TODO()) if err != nil { return fmt.Errorf("failed to send sqs %w", err) } 前のスライドで生成した aws.Configを渡す リクエストを送信する
5 最後に
• 確実にわかりやすくなってる(と思う) • 内部実装も綺麗になったので、困った時に調査しやすい • とはいえ開発者プレビュー版なので計画的にご利用くだ さい… 最後に
良きaws with goライフを! contact me at @_ogady_ Thanks ! !