概要
Google Driveのフォルダ内にあるスプレッドシート情報をSlackに通知するCloud Functionsを試験的に作成してみたのでご紹介します。本記事はセットアップ編です。
構成
- Google Cloud Functions
- Google Cloud Run
- Google Drive API
- Google Sheets API
- Slack Webhook
全体の流れ
以下の流れで記事を進めていきます。本記事は2までの紹介です。
-
Google Cloudの設定:
- サービスアカウントの作成と必要なロールの付与
- Workload Identity連携の設定
- Slack Webhookの設定
-
Cloud Functionsの実装:
- Google Drive APIとGoogle Sheets APIを使用して、フォルダ内のファイルリストをファイル最終更新者にメンションするFunctionを作成
-
Cloud Runでの実行と結果:
- Cloud RunからCloud Functionsを呼び出し、サービスアカウントを使用して実行
Google Cloudの設定
サービスアカウントの作成
まずはサービスアカウントを作成します。
- GCPコンソールにアクセスし、プロジェクトを選択します
- ナビゲーションメニューから「IAMと管理」 > 「サービスアカウント」を選択します
- 「サービスアカウントを作成」から、以下の情報を入力し「作成して続行」を選択:
- サービスアカウント名
- サービスアカウントID
4.「サービスアカウントにプロジェクトへのアクセスを許可する」から以下ロールを付与:
roles/artifactregistry.createOnPushWriter
roles/cloudbuild.builds.builder
roles/cloudfunctions.invoker
roles/iam.serviceAccountTokenCreator
roles/iam.serviceAccountUser
roles/iam.workloadIdentityUser
roles/logging.logWriter
roles/run.serviceAgent
roles/storage.objectAdmin
詳細な手順については、Googleの公式ドキュメントを参照してください。
Workload Identity連携
サービスアカウントを使用してGoogle APIにアクセスできるよう、Workload Identity連携をします。
-
Workload Identityプールの作成
- GCPコンソールで「IAMと管理」 > 「Workload Identity連携」を選択します
- 「Workload Identityプールを作成」から任意のプールIDを設定します
- プールのプロバイダを追加します。今回はOIDCプロバイダを使用します
- プロバイダの属性を構成後、保存で完了です
-
サービスアカウントへ連携
- プールの詳細ページに移動し、「アクセスを許可」を選択します
- サービスアカウントの権限借用を使用してアクセス権を付与するを選択します
- 連携したいサービスアカウント選択し、保存で完了です
詳細な手順については、Googleの公式ドキュメントを参照してください。
Google Drive APIの有効化とサービスの作成
- GCPコンソールで「APIとサービス」 > 「ライブラリ」を選択します
- 「Google Drive API」を検索し、有効化します
- 同様に、「Google Sheets API」も検索して有効化します
以下のように有効化されていればOKです。
Slack Webhookの設定
-
Slackアプリの作成
- Slack API にアクセス
- 「create New App」> 「From scratch」を選択します
- アプリの名前、ワークスペースを設定して作成完了です
-
Incoming Webhooksの有効化
- 左側のメニューから「Incoming Webhooks」を選択します
- 「Activate Incoming Webhooks」をオンにします
-
Webhookの作成
- 「Add New Webhook to Workspace」からメッセージを投稿するワークスペースを選択します
- 投稿するSlackチャンネルを指定し「許可する」を選択するとWebhook URLが生成されます
-
Webhook URLの使用
- お試しで、HTTP POSTリクエストを送信します。Sample curl request to post to a channel:を実行してみます
curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, world!"}' 生成されたWebhook URL
問題なく通知されました
詳細な手順については、Slackの公式ドキュメントを参照してください。
次の記事では、以下の3,4を紹介をします。
- Google Cloudの設定
- Slack Webhookの設定
- Cloud Functionsの実装
- Cloud Runでの実行と結果