Slide 1

Slide 1 text

GCPと連携して マスターデータ更新 [GDG Osaka] GASによる業務改善勉強会 2022/11/02 佐藤慧太

Slide 2

Slide 2 text

軽い自己紹介 - 佐藤慧太( @SatohJohn ) - フリュー株式会社 ( 渋谷 ) - 社内でGCPの営業として 活動しています

Slide 3

Slide 3 text

新規事業とかで Spread Sheetでマスターデータ管理 ってよくやりますよね

Slide 4

Slide 4 text

で、Masterデータをもとに DBを更新するじゃないですか

Slide 5

Slide 5 text

でも、DBはprivate IPしか許可せず 直接繋げないんです

Slide 6

Slide 6 text

そんなときに Cloud Functionを通して DBを叩く!

Slide 7

Slide 7 text

つまり セキュリティの硬いDBに対して Serverless VPCを通した Cloud Functionを通して アクセスする

Slide 8

Slide 8 text

メリット - 運用メンバー、企画メンバーが書いているスプレッドシートをそのままMasterとして 利用できる - GCPのアプリケーションからFunctionsやCloudRunなどを叩くことができる - 複雑な処理を書ける - 認証通せるので、関数自体は叩かれまくることはなく安全 - GASを叩ける人を決められる (spread sheetの共有とGASを叩く人が違う場合)

Slide 9

Slide 9 text

デメリット - 1GCPプロジェクトしか紐付けできない - 開発系と本番系とー、ってなるとめんどい。 VPCを色々イジる必要がある。

Slide 10

Slide 10 text

構成

Slide 11

Slide 11 text

やりかた

Slide 12

Slide 12 text

やりかた(GASとGCPを紐付ける1) GASの方でプロジェクトの認証をする (projectIDじゃなくプロジェクト番号なの注意)

Slide 13

Slide 13 text

やりかた(GASとGCPを紐付ける2) GCP Projectの方でクライアントが自動的に作られる

Slide 14

Slide 14 text

やりかた(GASとGCPを紐付ける3) OAuth同意画面で公開ステータス「テスト」 ってなっている場合、 テストユーザを追加する

Slide 15

Slide 15 text

やりかた(Functionを作る) 認証ありでCloud Functionを作成する(ここは自由、ただし私はNode.jsが好きです)

Slide 16

Slide 16 text

やりかた(GASを作る) // Cloud Functionsとの接続 / Cloud Functionsに対して、HTTPトリガーの発火をする function post(payload) { const url = "https://hogehoge" const token = ScriptApp.getIdentityToken() UrlFetchApp.fetch({ url, method: 'post', payload: JSON.stringify(payload), contentType: 'application/json', headers: { Authorization: `Bearer ${token}` } }) } ScriptAppのgetIdentityTokenをつかって認証ができる!

Slide 17

Slide 17 text

実行をしよう

Slide 18

Slide 18 text

実行をしよう

Slide 19

Slide 19 text

感じたこと - 思ったよりもかんたんに実装ができるぞ - 今まで、GCPプロジェクト側からSpread Sheetへの参照をしていた - service accountの作成して、spread sheetに参照権限もたせてた - GCPの「組織」を使ってやると、公開アプリケーションとして配布できるのでなんか 色々できる - と思う

Slide 20

Slide 20 text

おしまい