Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GoogleCloudFunctionsでHTTPフックなGoスクリプトを書く / Writ...
Search
convto
March 20, 2019
Technology
0
100
GoogleCloudFunctionsでHTTPフックなGoスクリプトを書く / Write HTTP hook Go script with GoogleCloudFunctions
google cloud functions 触ったメモ
convto
March 20, 2019
Tweet
Share
More Decks by convto
See All by convto
gob バイナリが Go バージョンによって 出力が変わることについて調べてみた / Investigating How gob Binary Output Changes Across Go Versions
convto
0
81
Go 関連の個人的おもしろCVE 5選 / my favorite go cve
convto
3
370
バイナリを眺めてわかる gob encoding の仕様と性質、適切な使い方 / understanding gob encoding
convto
6
2.3k
みんなでたのしむ math/big / i love math big
convto
0
220
Go1.22からの疑似乱数生成器について/go-122-pseudo-random-generator
convto
2
590
Go1.20からサポートされるtree構造のerrの紹介と、treeを考慮した複数マッチができるライブラリを作った話/introduction of tree structure err added since go 1_20
convto
0
980
byte列のbit表現を得るencodingライブラリ作った
convto
1
1.1k
Go runtimeの歩き方/how to follow go runtime function
convto
1
940
入出金ドメインの苦労話と解決へのアプローチ/funds in/out difficulties and solutions
convto
2
1.3k
Other Decks in Technology
See All in Technology
Azureの開発で辛いところ
re3turn
0
240
生成AI × 旅行 LLMを活用した旅行プラン生成・チャットボット
kominet_ava
0
160
Unsafe.BitCast のすゝめ。
nenonaninu
0
200
ABWGのRe:Cap!
hm5ug
1
120
CDKのコードレビューを楽にするパッケージcdk-mentorを作ってみた/cdk-mentor
tomoki10
0
210
自社 200 記事を元に整理した読みやすいテックブログを書くための Tips 集
masakihirose
2
330
Visual StudioとかIDE関連小ネタ話
kosmosebi
1
370
PaaSの歴史と、 アプリケーションプラットフォームのこれから
jacopen
7
1.5k
Accessibility Inspectorを活用した アプリのアクセシビリティ向上方法
hinakko
0
180
デジタルアイデンティティ技術 認可・ID連携・認証 応用 / 20250114-OIDF-J-EduWG-TechSWG
oidfj
2
680
【NGK2025S】動物園(PINTO_model_zoo)に遊びに行こう
kazuhitotakahashi
0
230
#TRG24 / David Cuartielles / Post Open Source
tarugoconf
0
580
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.5k
Adopting Sorbet at Scale
ufuk
74
9.2k
The Cost Of JavaScript in 2023
addyosmani
46
7.2k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Into the Great Unknown - MozCon
thekraken
34
1.6k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Documentation Writing (for coders)
carmenintech
67
4.5k
Six Lessons from altMBA
skipperchong
27
3.6k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
VelocityConf: Rendering Performance Case Studies
addyosmani
327
24k
Code Reviewing Like a Champion
maltzj
521
39k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
570
Transcript
GoogleCloudFunctionsでHTTP フックなGoスクリプトを書く 2019/03/20(水) Makuake LT Party #11
convto jisibari Twitter: @convto Github: convto 2
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった!
- 嬉しかったこと - 困ったこと - まとめ
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった!
- 嬉しかったこと - 困ったこと - まとめ
GoogleCloudFunctionsって? - Runtimeもnodeとかpythonとかgoとか似たようなも ん - Lambdaみたいにプロバイダ側のマネージドサービ スとかの Event hook で動かせる
- Log はstackdriver(cloudwatchみたいなやつ)に飛ば します
GoogleCloudFunctionsって? - Runtimeもnodeとかpythonとかgoとか似たようなも ん - Lambdaみたいにプロバイダ側のマネージドサービ スとかの Event hook で動かせる
- Log はstackdriver(cloudwatchみたいなやつ)に飛ば します lambdaのGCP版
GoogleCloudFunctionsって? - Runtimeもnodeとかpythonとかgoとか似たようなも ん - Lambdaみたいにプロバイダ側のマネージドサービ スとかの Event hook で動かせる
- Log はstackdriver(cloudwatchみたいなやつ)に飛ば します lambdaのGCP版 https://cloud.google.com/functions/feature s/
コンソールはこんな感じ
コンソールはこんな感じ Goがコンソールで書ける!
めっちゃうれしい(lambdaはできない)
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった!
- 嬉しかったこと - 困ったこと - まとめ
None
None
2019/1/17
2019/1/17 めっちゃ最近!!!
lambdaとの違い - デプロイするのがソースコードzip(lambdaはバイナ リzip) - 作った関数がGoogleCloudFunctions側のmain関数 から呼ばれる(lambdaはユーザーがmainを書く) - 依存の解決とかもGCF側でやる
lambdaとの違い - デプロイするのがソースコードzip(lambdaはバイナ リzip) - 作った関数がGoogleCloudFunctions側のmain関数 から呼ばれる(lambdaはユーザーがmainを書く) - 依存の解決とかもGCF側でやる GCFの方は、自分で書くスクリプトは
あくまでパッケージとして提供する
lambdaとの違い - デプロイするのがソースコードzip(lambdaはバイナ リzip) - 作った関数がGoogleCloudFunctions側のmain関数 から呼ばれる(lambdaはユーザーがmainを書く) - 依存の解決とかもGCF側でやる GCFの方は、自分で書くスクリプトは
あくまでパッケージとして提供する package名はmainだとダメ 起動する関数は大文字スタートじゃなきゃダ メ(exportしないとエラー)
さわってみたい!(触ってみました)
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった!
- 嬉しかったこと - 困ったこと - まとめ
作ったやつ(DEMO)
つくったやつ - custom emoji manager - help機能(hidden message) - list機能(hidden
message) - stamp機能
Slack slash command にした理由 - ざっくりAPI立ててすぐに使える - とはいえこいつのためにサーバー借りるとかはだ るい -
粒度がちょうどFaaSに向いてそう!!
ざっくりやってるこ - 入力を見てhelp, list, stampのいずれかを実行 - listは emoji.list とかでとってる -
stampは chat.postMessage とか chat.postEphemeral とかを使ってる
ざっくりやってるこ - 入力を見てhelp, list, stampのいずれかを実行 - listは emoji.list とかでとってる -
stampは chat.postMessage とか chat.postEphemeral とかを使ってる SlackAPI: https://api.slack.com/web
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった!
- 嬉しかったこと - 困ったこと - まとめ
HTTPホックの関数を作りやすい - Lambdaだとapi-gatewayとかALBをつくって紐づける 必要がある - CloudFunction は関数作成時にすごく雑に選択し て作れる
None
もしかしたら内部的には LB的なのを自動生成してるのかも... (まだ追ってないです)
net/http.Handlerで処理かける - 普通のハンドラ関数書くのと同じ書き方でかけ る! - requestからの情報の取り方、responseの返し方ま で同じ! - Middleware, ライブラリなど、net/httpにまつわるエ
コシステムに乗れる!
None
ハンドラ書くのと全く同じ
ちなみにlambdaだと
ちなみにlambdaだと net/http系の資産をうまく使うために こういうプロジェクトもあるらしいです https://github.com/awslabs/aws-lambda-g o-api-proxy
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった!
- 嬉しかったこと - 困ったこと - まとめ
ひとつめ
どうしても複数ファイル構成でデプロイできない - ドキュメントをしっかり見てサンプル構成に合わせ てもできない - HTTP + Go の構成だと相性が悪いのかもしれない (まだbetaだし仕方ないかも)
どうしても複数ファイル構成でデプロイできない - ドキュメントをしっかり見てサンプル構成に合わせ てもできない - HTTP + Go の構成だと相性が悪いのかもしれない (まだbetaだし仕方ないかも)
ドキュメント https://cloud.google.com/functions/docs/c oncepts/go-runtime
どうしても複数ファイル構成でデプロイできない - ドキュメントをしっかり見てサンプル構成に合わせ てもできない - HTTP + Go の構成だと相性が悪いのかもしれない (まだbetaだし仕方ないかも)
ドキュメント https://cloud.google.com/functions/docs/c oncepts/go-runtime 仕方ないので今回は処理をまとめた パッケージを作りreleaseを切って functionからimportして対応しました
次
Go1.12系で発行したgo.modがあるとインポートできない - Go1.12で発行したgo.modはGo1.11.3以前のランタ イムでは解決できない - GoogleCloudFunctionsは多分ランタイムが1.11.3以 下 - そのためgo.modをGo1.12で発行した一部パッケー ジが使えない
Go1.12系で発行したgo.modがあるとインポートできない - Go1.12で発行したgo.modはGo1.11.3以前のランタ イムでは解決できない - GoogleCloudFunctionsは多分ランタイムが1.11.3以 下 - そのためgo.modをGo1.12で発行した一部パッケー ジが使えない
さっきの対応として作ったパッケージで 綺麗に踏み抜いた
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
次
slackのemoji.listのパースが面倒
slackのemoji.listのパースが面倒 keyが動的に変わるので面倒
こんな感じでやりました
こんな感じでやりました mapで取れるっぽい
こんな感じでやりました mapで取れるっぽい 階層が多段になってもnestしたmapで 受け取れます
次
Slash comandで送られるリクエストの形式が不思議 - Postでbodyにquery形式の値が入ってる - bodyをstringで受け取った後にnet/url.ParseQuery() とかしてます - 変な感じします
こういうのがきました
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった!
- 嬉しかったこと - 困ったこと - まとめ
まとめ - net/http.Handler で処理かけるのがかなりいい - HTTPで公開する手間がかなり少ない - デプロイは依存解決周りがまだ辛い印象 - slackのAPI、ちょっとレガシー感ある
まとめ - net/http.Handler で処理かけるのがかなりいい - HTTPで公開する手間がかなり少ない - デプロイは依存解決周りがまだ辛い印象 - slackのAPI、ちょっとレガシー感ある
単一ファイルのスクリプトで完結する 小さい処理ならめっちゃ幸せになれる
まとめ - net/http.Handler で処理かけるのがかなりいい - HTTPで公開する手間がかなり少ない - デプロイは依存解決周りがまだ辛い印象 - slackのAPI、ちょっとレガシー感ある
単一ファイルのスクリプトで完結する 小さい処理ならめっちゃ幸せになれる Goでちょっとしたスクリプト書いて APIにしたいケースならこれで決定 だと思います
今回書いたコードここに置いてあります〜 - https://github.com/srttk/cmoji - function.goをそのままGoogleCloudFunctionsに貼り 付けると動く - 雑なのでそのうち整理します(ほんまか?)
今回書いたコードここに置いてあります〜 - https://github.com/srttk/cmoji - function.goをそのままGoogleCloudFunctionsに貼り 付けると動く - 雑なのでそのうち整理します(ほんまか?) modulesで参照してるので 書き換えるたびにタグリリースしてます
今回書いたコードここに置いてあります〜 - https://github.com/srttk/cmoji - function.goをそのままGoogleCloudFunctionsに貼り 付けると動く - 雑なのでそのうち整理します(ほんまか?) modulesで参照してるので 書き換えるたびにタグリリースしてます
はやくzipでデプロイでしたい
- プレゼンテーションテーマは SlidesCarnival の ヨークプレゼンテーションテンプレー ト を利用しています クレジット表記
ご静聴ありがとう ございました