Slide 1

Slide 1 text

AWS SDK for Goͷ Contextύλʔϯ Gopherಓ৔ #1 LT Shuichi Ohsawa (@ohsawa0515) 1/13

Slide 2

Slide 2 text

ࣗݾ঺հ • େᖒलҰ(Shuichi Ohsawa) • GitHub, Twitter: @ohsawa0515 • Blog: http://blog.jicoman.info/ • Sansanגࣜձࣾ - ໊ࢗ؅ཧΫϥ΢υαʔϏε • ໊ࢗσʔλԽγεςϜͷΠϯϑϥߏஙɾӡ༻ɾվળ 2/13

Slide 3

Slide 3 text

AWS SDK for Go ͷ υΩϡϝϯτΛ ݟ͍ͯͯؾ͍ͮͨ 3/13

Slide 4

Slide 4 text

4/13

Slide 5

Slide 5 text

5/13

Slide 6

Slide 6 text

ContextΛ஌Δલ WithContextͬͯͳΜͩΖ͏ŋŋŋ ❓ GoݴޠͷContextΛ࢖͏Έ͍͚ͨͩͲɺαϯϓϧίʔυݟͯ΋ ࢖ͬͯͳͦ͞͏ͩ͠ผʹ͍͍΍ " 6/13

Slide 7

Slide 7 text

ContextΛ஌ͬͨޙ Ωϟϯηϧͱ͔λΠϜΞ΢τ͕Ͱ͖Δ͔Βศར΍Μ 7/13

Slide 8

Slide 8 text

S3΁ΞοϓϩʔυʹλΠϜΞ΢τΛઃ ͚Δ ctx, cancel := context.WithTimeout(context.Background(), time.Duration(30)*time.Second) defer cancel() svc := s3.New(sess) if _, err := svc.PutObjectWithContext(ctx, &s3.PutObjectInput{ Body: f, Bucket: aws.String(s3Bucket), Key: aws.String(file), }); err != nil { log.Fatal(err) } 8/13

Slide 9

Slide 9 text

PutObjectWithContext() PutObject() ʹ ContextΛηοτ͍ͯ͠Δ func (c *S3) PutObjectWithContext(ctx aws.Context, input *PutObjectInput, opts ...request.Option) (*PutObjectOutput, error) { req, out := c.PutObjectRequest(input) req.SetContext(ctx) req.ApplyOptions(opts...) return out, req.Send() } 9/13

Slide 10

Slide 10 text

PutObjectWithContext() PutObject() ʹ͸ͳ͍Ҿ਺͕ŋŋŋ func (c *S3) PutObjectWithContext(ctx aws.Context, input *PutObjectInput, opts ...request.Option) (*PutObjectOutput, error) { req, out := c.PutObjectRequest(input) req.SetContext(ctx) req.ApplyOptions(opts...) return out, req.Send() } 10/13

Slide 11

Slide 11 text

ϦΫΤετϋϯυϥΛڬΊΔ PutObjectʹ͔͔ͬͨ࣌ؒΛදࣔ͢Δ ctx, cancel := context.WithTimeout(context.Background(), time.Duration(30)*time.Second) defer cancel() svc := s3.New(sess) if _, err := svc.PutObjectWithContext(ctx, &s3.PutObjectInput{ Body: f, Bucket: aws.String(s3Bucket), Key: aws.String(file), }, func(r *request.Request) { start := time.Now() r.Handlers.Complete.PushBack(func(req *request.Request) { fmt.Printf("request %s took %s to complete\n", req.RequestID, time.Since(start)) }) }); err != nil { log.Fatal(err) } 11/13

Slide 12

Slide 12 text

·ͱΊ • AWS SDK for GoͷContextύλʔϯΛ࢖͑͹APIίʔϧͷ Ωϟϯηϧ΍λΠϜΞ΢τΛ؆୯ʹઃఆͰ͖Δ • SDKଆͰΩϟϯηϧॲཧΛ೚ͤΔ͜ͱ͕Ͱ͖ΔͷͰɺContext ͱ΄΅࣮૷͕มΘΒͣ࢖͑Δ • ϦΫΤετϋϯυϥΛڬΊΔͷͰଞʹ΋͍Ζ͍ΖͰ͖ͦ͏ 12/13

Slide 13

Slide 13 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝ ·ͨ͠ 13/13