Slide 1

Slide 1 text

Go x AWSによる シンプルなサーバーレス実装 Written by @yukpiz Mar 27, 2019 #shuuumai #golang

Slide 2

Slide 2 text

Who?

Slide 3

Slide 3 text

Who? Yuuki Zayasu(@yukpiz) リディッシュ株式会社 テックリード

Slide 4

Slide 4 text

Who? Yuuki Zayasu(@yukpiz) リディッシュ株式会社 テックリード #golang #aws

Slide 5

Slide 5 text

Who? Yuuki Zayasu(@yukpiz) リディッシュ株式会社 テックリード #golang #aws #engineers_lt(エンジニアの登壇を応援する会)

Slide 6

Slide 6 text

Who? Yuuki Zayasu(@yukpiz) リディッシュ株式会社 テックリード #golang #aws #engineers_lt(エンジニアの登壇を応援する会) 釣り スノボ 小型船舶操縦士1級

Slide 7

Slide 7 text

Who? Yuuki Zayasu(@yukpiz) リディッシュ株式会社 テックリード #golang #aws #engineers_lt(エンジニアの登壇を応援する会) 釣り スノボ 小型船舶操縦士1級 第二種電気工事士 生コン打設 養鶏 野菜栽培

Slide 8

Slide 8 text

Who? Please follow me! @yukpiz https://labo.yukpiz.me

Slide 9

Slide 9 text

Go言語への入り口

Slide 10

Slide 10 text

Go言語への入り口 Go言語 触ったことありますか?

Slide 11

Slide 11 text

Go言語への入り口

Slide 12

Slide 12 text

Go言語への入り口 Go言語に興味を持っている、もしくは普段使っている皆さんに 少しでも知らなかった事を知って欲しい

Slide 13

Slide 13 text

Go言語への入り口 Go言語に興味を持っている、もしくは普段使っている皆さんに 少しでも知らなかった事を知って欲しい AWSと簡単に組み合わせて 様々な使い方ができる事を知ってほしい

Slide 14

Slide 14 text

Go言語への入り口 Go言語に興味を持っている、もしくは普段使っている皆さんに 少しでも知らなかった事を知って欲しい AWSと簡単に組み合わせて 様々な使い方ができる事を知ってほしい 是非、持ち帰って自分でGo言語を触ってみるキッカケにして欲しい

Slide 15

Slide 15 text

Go言語への入り口

Slide 16

Slide 16 text

Go言語への入り口 コマンドラインツールを作る(urfave/cli等)

Slide 17

Slide 17 text

Go言語への入り口 コマンドラインツールを作る(urfave/cli等) A Tour of Goをやる(https://go-tour-jp.appspot.com/)

Slide 18

Slide 18 text

Go言語への入り口 コマンドラインツールを作る(urfave/cli等) A Tour of Goをやる(https://go-tour-jp.appspot.com/) Webフレームワークを使ってWebサイトを作る(gin, echo等)

Slide 19

Slide 19 text

Go言語への入り口 コマンドラインツールを作る(urfave/cli等) A Tour of Goをやる(https://go-tour-jp.appspot.com/) Webフレームワークを使ってWebサイトを作る(gin, echo等) AWSを組み合わせてサービスを作ってみる(New!)

Slide 20

Slide 20 text

Go言語への入り口 コマンドラインツールを作る(urfave/cli等) A Tour of Goをやる(https://go-tour-jp.appspot.com/) Webフレームワークを使ってWebサイトを作る(gin, echo等) AWSを組み合わせてサービスを作ってみる(New!) DynamoDB, Lambda, SQS, API Gateway, ECS/EKS, EC2, etc...

Slide 21

Slide 21 text

Go言語への入り口 AWS Lambda

Slide 22

Slide 22 text

Go言語への入り口 機能を実装してクラウド上で実行可能(FaaS)

Slide 23

Slide 23 text

Go言語への入り口 機能を実装してクラウド上で実行可能(FaaS) Go言語(1.x Runtime)が使える

Slide 24

Slide 24 text

Go言語への入り口 機能を実装してクラウド上で実行可能(FaaS) Go言語(1.x Runtime)が使える 様々なAWSの各種サービスと連携が可能

Slide 25

Slide 25 text

Go言語への入り口 機能を実装してクラウド上で実行可能(FaaS) Go言語(1.x Runtime)が使える 様々なAWSの各種サービスと連携が可能 API Gateway AWS IoT Alexa Skills Kit Alexa Smart Home Application Load Balancer CloudWatch Events CloudWatch Logs CodeCommit Cognito Sync Trigger DynamoDB Kinesis S3 SNS SQS

Slide 26

Slide 26 text

Go言語への入り口 機能を実装してクラウド上で実行可能(FaaS) Go言語(1.x Runtime)が使える 様々なAWSの各種サービスと連携が可能 API Gateway AWS IoT Alexa Skills Kit Alexa Smart Home Application Load Balancer CloudWatch Events CloudWatch Logs CodeCommit Cognito Sync Trigger DynamoDB Kinesis S3 SNS SQS + Invoke Lambda

Slide 27

Slide 27 text

活用事例

Slide 28

Slide 28 text

活用事例 サービス内メッセージの一斉配信サービス

Slide 29

Slide 29 text

活用事例 サービス内メッセージの一斉配信サービス レストランに関連するデータの収集サービス

Slide 30

Slide 30 text

活用事例 サービス内メッセージの一斉配信サービス レストランに関連するデータの収集サービス SendGridを使ったメール配信サービス ...etc

Slide 31

Slide 31 text

活用事例

Slide 32

Slide 32 text

活用事例 配信予定時刻に処理を開始

Slide 33

Slide 33 text

活用事例 配信予定時刻に処理を開始 SQSで一定速度でLambdaに排出

Slide 34

Slide 34 text

活用事例 配信予定時刻に処理を開始 SQSで一定速度でLambdaに排出 配信処理を担うLambda

Slide 35

Slide 35 text

活用事例 配信予定時刻に処理を開始 SQSで一定速度でLambdaに排出 配信処理を担うLambda ユーザーの端末へ

Slide 36

Slide 36 text

活用事例 配信予定時刻に処理を開始 SQSで一定速度でLambdaに排出 配信処理を担うLambda ユーザーの端末へ 処理に失敗した配信レコード

Slide 37

Slide 37 text

活用事例 各種サービスの制限について

Slide 38

Slide 38 text

活用事例 各種サービスの制限について サービスごとに制限項目がある Lambdaなら実行時間や同時実行数など 他のサービスと連携させる場合、その考慮も必要

Slide 39

Slide 39 text

活用事例 各種サービスの制限について サービスごとに制限項目がある Lambdaなら実行時間や同時実行数など 他のサービスと連携させる場合、その考慮も必要 詳細は各種サービスのドキュメントに記載がある 以下はLambdaの制限事項ドキュメント https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/limits.html

Slide 40

Slide 40 text

Go × Lambdaへの入り口

Slide 41

Slide 41 text

Go × Lambdaへの入り口 デプロイツールの選定(Apex, Lamvery, Serverless Framework)

Slide 42

Slide 42 text

Go × Lambdaへの入り口 デプロイツールの選定(Apex, Lamvery, Serverless Framework) 実装したLambda関数をツールを使ってアップロードする LambdaはApex、それ以外のサービスはterraformに一元化

Slide 43

Slide 43 text

Go × Lambdaへの入り口 デプロイツールの選定(Apex, Lamvery, Serverless Framework) 実装したLambda関数をツールを使ってアップロードする LambdaはApex、それ以外のサービスはterraformに一元化 関数の実装

Slide 44

Slide 44 text

Go × Lambdaへの入り口

Slide 45

Slide 45 text

Go × Lambdaへの入り口 必要なのは2パッケージ

Slide 46

Slide 46 text

Go × Lambdaへの入り口 必要なのは2パッケージ Lambda実行時に呼び出される関数

Slide 47

Slide 47 text

Go × Lambdaへの入り口 必要なのは2パッケージ Lambda実行時に呼び出される関数 発火元から受け取るイベント引数

Slide 48

Slide 48 text

Go × Lambdaへの入り口 必要なのは2パッケージ Lambda実行時に呼び出される関数 発火元から受け取るイベント引数 処理結果を返す errorインターフェース型

Slide 49

Slide 49 text

Go × Lambdaへの入り口 デプロイツールの選定(Apex, Lamvery, Serverless Framework) 実装したLambda関数をツールを使ってアップロードする LambdaはApex、それ以外のサービスはterraformに一元化 関数の実装 Handlerの引数で受け取れるイベントはgodocで確認できる https://godoc.org/github.com/aws/aws-lambda-go/events

Slide 50

Slide 50 text

Go × Lambdaへの入り口 デプロイツールの選定(Apex, Lamvery, Serverless Framework) 実装したLambda関数をツールを使ってアップロードする LambdaはApex、それ以外のサービスはterraformに一元化 関数の実装 Handlerの引数で受け取れるイベントはgodocで確認できる https://godoc.org/github.com/aws/aws-lambda-go/events AWSの各種サービスとの連携

Slide 51

Slide 51 text

Go × Lambdaへの入り口 Lambdaの発火元

Slide 52

Slide 52 text

その他の用途

Slide 53

Slide 53 text

その他の用途 BOTを作ってみよう!

Slide 54

Slide 54 text

その他の用途 BOTを作ってみよう! Slack BOTやTwitter BOTで遊んでみる API Gatewayと連携して、Webhook駆動のBOT CloudWatchと連携して、定期実行するBOT

Slide 55

Slide 55 text

その他の用途 BOTを作ってみよう! Slack BOTやTwitter BOTで遊んでみる API Gatewayと連携して、Webhook駆動のBOT Cloudwatchと連携して、定期実行するBOT

Slide 56

Slide 56 text

最後に

Slide 57

Slide 57 text

最後に Go言語入門の選択肢にAWS Lambdaを! 連携できるサービスを組み合わせて、簡単に作ろう

Slide 58

Slide 58 text

最後に Go言語入門の選択肢にAWS Lambdaを! 連携できるサービスを組み合わせて、簡単に作ろう 仕事じゃなくても、まずはプライベートの簡単なツールから! こういうのも作れそうとか面白いアイデア、是非教えてください

Slide 59

Slide 59 text

Written by @yukpiz Mar 27, 2019 #shuuumai #golang Slides Policy The Go gopher was designed by Renée French. #f3f3f3 #434343 #da6272