Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Go x AWSによるシンプルなサーバーレス実装

yukpiz
March 27, 2019

Go x AWSによるシンプルなサーバーレス実装

シューマイGo編での登壇資料です。
https://shuuu-mai.connpass.com/event/122861/

yukpiz

March 27, 2019
Tweet

More Decks by yukpiz

Other Decks in Technology

Transcript

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

    View Slide

  2. Who?

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  9. Go言語への入り口

    View Slide

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

    View Slide

  11. Go言語への入り口

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. Go言語への入り口

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  20. 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...

    View Slide

  21. Go言語への入り口
    AWS Lambda

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. 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

    View Slide

  26. 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

    View Slide

  27. 活用事例

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  31. 活用事例

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  40. Go × Lambdaへの入り口

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  44. Go × Lambdaへの入り口

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  52. その他の用途

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  56. 最後に

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide