Home
Slides
Blog
slide.seike460.com
Home
Slides
Blog
Home
Slides
Fukuoka.go #12 + Tokyo.go
Fukuoka.go #12 + Tokyo.go
Fukuoka.go #12 + Tokyo.go
2019年7月12日
Go
Go
Golang
Concurrency
Keyboard Shortcuts
←
→
Navigate slides
Space
Next slide
F
Fullscreen
ESC
Exit fullscreen
Home
First slide
End
Last slide
B
.
Pause
S
Speaker notes
?
Reveal.js help
Close
## AWS Lambda Goのgoroutine周り Fukuoka.go#12 清家史郎(@seike460)
###### Who? Fusic Co., Ltd.  清家史郎  @seike460    
#### Agenda - 今回やりたいこと - AWS Lambdaとgoroutine - プロファイリング - まとめ
#### やりたいこと  - icalデータ取得のgoroutine化 - slack送信のgoroutine化 - 速度向上したのかプロファイリング
#### ical同期データ取得 ``` var icalBody io.ReadCloser for ical := range icals { // IcalデータをHTTPSで取得 icalBody = getIcalData(ical) // icalチェックしてSlackに送信 err := checkAndSlackSend(icalBody) if err != nil { return err } } ```
#### ical非同期データ取得(goroutine化) ``` // icalBody var icalBody io.ReadCloser // 送信グループの作成 wg := &sync.WaitGroup{} for ical := range icals { // goroutine go func(icalChan chan io.ReadCloser) { // IcalデータをHTTPSで取得 icalChan <- getIcalData(ical) }(icalChan) // 待ちを追加 wg.Add(1) // icalチェックしてSlackに送信 go func() { checkAndSlackSend(icalBody) wg.Done() //送信完了 }() // Icalのデータを待ち受ける icalBody = <-icalChan } // 最後の一回分 err := checkAndSlackSend(icalBody) if err != nil { return err } // Slack送信の完了待ち wg.Wait() ```
#### プロファイリング - AWS X-Ray - 本番環境や分散アプリケーションの分析とデバッグ - serverless framework でサクッと導入
#### serverless.yml ``` service: utakata plugins: - serverless-plugin-tracing # プラグイン provider: name: aws runtime: go1.x stage: dev region: ap-northeast-1 tracing: true # X-Ray有効化 iamRoleStatements: - Effect: Allow Action: - xray:PutTraceSegments # X-Ray権限 - xray:PutTelemetryRecords # X-Ray権限 Resource: "*" ``` プラグインインストール ``` yarn add aws-sdk aws-xray-sdk serverless-plugin-tracing ```
#### 別stageにDeploy ##### 同期 ``` yarn deploy --stage single ``` ##### 非同期 ``` yarn deploy --stage goroutine ```
#### 全体の速度 
#### 同期データ取得速度 
#### 非同期データ取得速度 
#### 同期データ取得時のメモリ使用量 
#### 非同期データ取得時のメモリ使用量 
#### まとめ - AWSはAPIアクセスが基本なので、非同期データ取得と相性がよい - goroutineだ! - 途中でLambdaが終了してしまうと処理が中断されてしまう - WaitGroupを使って完了を待つ - 速度向上したのか知りたい - AWS X-Ray使って計測可能
Thank you! Fusicは技術が大好きなエンジニアを募集しています  https://fusic.github.io/
#### os.Exit(0)
Swipe to navigate
Previous
Next
Related Slides
Goでパイプライン
2023/1/1
View
Fukuoka.go #14 + Umeda.go #2
2019/11/15
View
Fukuoka.go #13 + Roppongi.go
2019/9/13
View