Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
GoogleCloudFunctionsでHTTP フックなGoスクリプトを書く 2019/03/20(水) Makuake LT Party #11
Slide 2
Slide 2 text
convto jisibari Twitter: @convto Github: convto 2
Slide 3
Slide 3 text
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった! - 嬉しかったこと - 困ったこと - まとめ
Slide 4
Slide 4 text
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった! - 嬉しかったこと - 困ったこと - まとめ
Slide 5
Slide 5 text
GoogleCloudFunctionsって? - Runtimeもnodeとかpythonとかgoとか似たようなも ん - Lambdaみたいにプロバイダ側のマネージドサービ スとかの Event hook で動かせる - Log はstackdriver(cloudwatchみたいなやつ)に飛ば します
Slide 6
Slide 6 text
GoogleCloudFunctionsって? - Runtimeもnodeとかpythonとかgoとか似たようなも ん - Lambdaみたいにプロバイダ側のマネージドサービ スとかの Event hook で動かせる - Log はstackdriver(cloudwatchみたいなやつ)に飛ば します lambdaのGCP版
Slide 7
Slide 7 text
GoogleCloudFunctionsって? - Runtimeもnodeとかpythonとかgoとか似たようなも ん - Lambdaみたいにプロバイダ側のマネージドサービ スとかの Event hook で動かせる - Log はstackdriver(cloudwatchみたいなやつ)に飛ば します lambdaのGCP版 https://cloud.google.com/functions/feature s/
Slide 8
Slide 8 text
コンソールはこんな感じ
Slide 9
Slide 9 text
コンソールはこんな感じ Goがコンソールで書ける!
Slide 10
Slide 10 text
めっちゃうれしい(lambdaはできない)
Slide 11
Slide 11 text
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった! - 嬉しかったこと - 困ったこと - まとめ
Slide 12
Slide 12 text
No content
Slide 13
Slide 13 text
No content
Slide 14
Slide 14 text
2019/1/17
Slide 15
Slide 15 text
2019/1/17 めっちゃ最近!!!
Slide 16
Slide 16 text
lambdaとの違い - デプロイするのがソースコードzip(lambdaはバイナ リzip) - 作った関数がGoogleCloudFunctions側のmain関数 から呼ばれる(lambdaはユーザーがmainを書く) - 依存の解決とかもGCF側でやる
Slide 17
Slide 17 text
lambdaとの違い - デプロイするのがソースコードzip(lambdaはバイナ リzip) - 作った関数がGoogleCloudFunctions側のmain関数 から呼ばれる(lambdaはユーザーがmainを書く) - 依存の解決とかもGCF側でやる GCFの方は、自分で書くスクリプトは あくまでパッケージとして提供する
Slide 18
Slide 18 text
lambdaとの違い - デプロイするのがソースコードzip(lambdaはバイナ リzip) - 作った関数がGoogleCloudFunctions側のmain関数 から呼ばれる(lambdaはユーザーがmainを書く) - 依存の解決とかもGCF側でやる GCFの方は、自分で書くスクリプトは あくまでパッケージとして提供する package名はmainだとダメ 起動する関数は大文字スタートじゃなきゃダ メ(exportしないとエラー)
Slide 19
Slide 19 text
さわってみたい!(触ってみました)
Slide 20
Slide 20 text
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった! - 嬉しかったこと - 困ったこと - まとめ
Slide 21
Slide 21 text
作ったやつ(DEMO)
Slide 22
Slide 22 text
つくったやつ - custom emoji manager - help機能(hidden message) - list機能(hidden message) - stamp機能
Slide 23
Slide 23 text
Slack slash command にした理由 - ざっくりAPI立ててすぐに使える - とはいえこいつのためにサーバー借りるとかはだ るい - 粒度がちょうどFaaSに向いてそう!!
Slide 24
Slide 24 text
ざっくりやってるこ - 入力を見てhelp, list, stampのいずれかを実行 - listは emoji.list とかでとってる - stampは chat.postMessage とか chat.postEphemeral とかを使ってる
Slide 25
Slide 25 text
ざっくりやってるこ - 入力を見てhelp, list, stampのいずれかを実行 - listは emoji.list とかでとってる - stampは chat.postMessage とか chat.postEphemeral とかを使ってる SlackAPI: https://api.slack.com/web
Slide 26
Slide 26 text
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった! - 嬉しかったこと - 困ったこと - まとめ
Slide 27
Slide 27 text
HTTPホックの関数を作りやすい - Lambdaだとapi-gatewayとかALBをつくって紐づける 必要がある - CloudFunction は関数作成時にすごく雑に選択し て作れる
Slide 28
Slide 28 text
No content
Slide 29
Slide 29 text
もしかしたら内部的には LB的なのを自動生成してるのかも... (まだ追ってないです)
Slide 30
Slide 30 text
net/http.Handlerで処理かける - 普通のハンドラ関数書くのと同じ書き方でかけ る! - requestからの情報の取り方、responseの返し方ま で同じ! - Middleware, ライブラリなど、net/httpにまつわるエ コシステムに乗れる!
Slide 31
Slide 31 text
No content
Slide 32
Slide 32 text
ハンドラ書くのと全く同じ
Slide 33
Slide 33 text
ちなみにlambdaだと
Slide 34
Slide 34 text
ちなみにlambdaだと net/http系の資産をうまく使うために こういうプロジェクトもあるらしいです https://github.com/awslabs/aws-lambda-g o-api-proxy
Slide 35
Slide 35 text
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった! - 嬉しかったこと - 困ったこと - まとめ
Slide 36
Slide 36 text
ひとつめ
Slide 37
Slide 37 text
どうしても複数ファイル構成でデプロイできない - ドキュメントをしっかり見てサンプル構成に合わせ てもできない - HTTP + Go の構成だと相性が悪いのかもしれない (まだbetaだし仕方ないかも)
Slide 38
Slide 38 text
どうしても複数ファイル構成でデプロイできない - ドキュメントをしっかり見てサンプル構成に合わせ てもできない - HTTP + Go の構成だと相性が悪いのかもしれない (まだbetaだし仕方ないかも) ドキュメント https://cloud.google.com/functions/docs/c oncepts/go-runtime
Slide 39
Slide 39 text
どうしても複数ファイル構成でデプロイできない - ドキュメントをしっかり見てサンプル構成に合わせ てもできない - HTTP + Go の構成だと相性が悪いのかもしれない (まだbetaだし仕方ないかも) ドキュメント https://cloud.google.com/functions/docs/c oncepts/go-runtime 仕方ないので今回は処理をまとめた パッケージを作りreleaseを切って functionからimportして対応しました
Slide 40
Slide 40 text
次
Slide 41
Slide 41 text
Go1.12系で発行したgo.modがあるとインポートできない - Go1.12で発行したgo.modはGo1.11.3以前のランタ イムでは解決できない - GoogleCloudFunctionsは多分ランタイムが1.11.3以 下 - そのためgo.modをGo1.12で発行した一部パッケー ジが使えない
Slide 42
Slide 42 text
Go1.12系で発行したgo.modがあるとインポートできない - Go1.12で発行したgo.modはGo1.11.3以前のランタ イムでは解決できない - GoogleCloudFunctionsは多分ランタイムが1.11.3以 下 - そのためgo.modをGo1.12で発行した一部パッケー ジが使えない さっきの対応として作ったパッケージで 綺麗に踏み抜いた
Slide 43
Slide 43 text
Go1.12系で発行したgo.modがあるとインポートできない - Go1.12で発行したgo.modはGo1.11.3以前のランタ イムでは解決できない - GoogleCloudFunctionsは多分ランタイムが1.11.3以 下 - そのためgo.modをGo1.12で発行した一部パッケー ジが使えない さっきの対応として作ったパッケージで 綺麗に踏み抜いた go本体のIssue https://github.com/golang/go/issues/30446
Slide 44
Slide 44 text
次
Slide 45
Slide 45 text
slackのemoji.listのパースが面倒
Slide 46
Slide 46 text
slackのemoji.listのパースが面倒 keyが動的に変わるので面倒
Slide 47
Slide 47 text
こんな感じでやりました
Slide 48
Slide 48 text
こんな感じでやりました mapで取れるっぽい
Slide 49
Slide 49 text
こんな感じでやりました mapで取れるっぽい 階層が多段になってもnestしたmapで 受け取れます
Slide 50
Slide 50 text
次
Slide 51
Slide 51 text
Slash comandで送られるリクエストの形式が不思議 - Postでbodyにquery形式の値が入ってる - bodyをstringで受け取った後にnet/url.ParseQuery() とかしてます - 変な感じします
Slide 52
Slide 52 text
こういうのがきました
Slide 53
Slide 53 text
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった! - 嬉しかったこと - 困ったこと - まとめ
Slide 54
Slide 54 text
まとめ - net/http.Handler で処理かけるのがかなりいい - HTTPで公開する手間がかなり少ない - デプロイは依存解決周りがまだ辛い印象 - slackのAPI、ちょっとレガシー感ある
Slide 55
Slide 55 text
まとめ - net/http.Handler で処理かけるのがかなりいい - HTTPで公開する手間がかなり少ない - デプロイは依存解決周りがまだ辛い印象 - slackのAPI、ちょっとレガシー感ある 単一ファイルのスクリプトで完結する 小さい処理ならめっちゃ幸せになれる
Slide 56
Slide 56 text
まとめ - net/http.Handler で処理かけるのがかなりいい - HTTPで公開する手間がかなり少ない - デプロイは依存解決周りがまだ辛い印象 - slackのAPI、ちょっとレガシー感ある 単一ファイルのスクリプトで完結する 小さい処理ならめっちゃ幸せになれる Goでちょっとしたスクリプト書いて APIにしたいケースならこれで決定 だと思います
Slide 57
Slide 57 text
今回書いたコードここに置いてあります〜 - https://github.com/srttk/cmoji - function.goをそのままGoogleCloudFunctionsに貼り 付けると動く - 雑なのでそのうち整理します(ほんまか?)
Slide 58
Slide 58 text
今回書いたコードここに置いてあります〜 - https://github.com/srttk/cmoji - function.goをそのままGoogleCloudFunctionsに貼り 付けると動く - 雑なのでそのうち整理します(ほんまか?) modulesで参照してるので 書き換えるたびにタグリリースしてます
Slide 59
Slide 59 text
今回書いたコードここに置いてあります〜 - https://github.com/srttk/cmoji - function.goをそのままGoogleCloudFunctionsに貼り 付けると動く - 雑なのでそのうち整理します(ほんまか?) modulesで参照してるので 書き換えるたびにタグリリースしてます はやくzipでデプロイでしたい
Slide 60
Slide 60 text
- プレゼンテーションテーマは SlidesCarnival の ヨークプレゼンテーションテンプレー ト を利用しています クレジット表記
Slide 61
Slide 61 text
ご静聴ありがとう ございました