1. 概要

この Codelab では、Botkit ツールキットを使用して Slack ボットを構築し、Google Cloud で実行する方法を学びます。Slack のライブ チャンネルで、ボットとやりとりできるようになります。
学習内容
- Slack でボットのカスタム統合を作成する方法
- Secret Manager を使用して Slack シークレットを保護する方法
- ステートレス コンテナを自動的にスケーリングするフルマネージド コンピューティング プラットフォームである Cloud Run に Slack ボットをデプロイする方法
必要なもの
このチュートリアルの利用方法をお選びください。
Google Cloud のご利用経験について、いずれに該当されますか?
2. 設定と要件
セルフペース型の環境設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。



- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は
PROJECT_IDと識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。 - なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
Cloud Shell の起動
Google Cloud はノートパソコンからリモートで操作できますが、このチュートリアルでは、Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。
Cloud Shell をアクティブにする
- Cloud Console で、[Cloud Shell をアクティブにする]
をクリックします。

Cloud Shell を初めて起動する場合は、その内容を説明する中間画面が表示されます。中間画面が表示された場合は、[続行] をクリックします。

すぐにプロビジョニングが実行され、Cloud Shell に接続されます。

この仮想マシンには、必要な開発ツールがすべて用意されています。仮想マシンは Google Cloud で稼働し、永続的なホーム ディレクトリが 5 GB 用意されているため、ネットワークのパフォーマンスと認証が大幅に向上しています。このコードラボで行う作業のほとんどはブラウザから実行できます。
Cloud Shell に接続すると、認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。
- Cloud Shell で次のコマンドを実行して、認証されたことを確認します。
gcloud auth list
コマンド出力
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Cloud Shell で次のコマンドを実行して、gcloud コマンドがプロジェクトを認識していることを確認します。
gcloud config list project
コマンド出力
[core] project = <PROJECT_ID>
上記のようになっていない場合は、次のコマンドで設定できます。
gcloud config set project <PROJECT_ID>
コマンド出力
Updated property [core/project].
3. API を有効にする
Cloud Shell で、Artifact Registry、Cloud Build、Cloud Run、Secret Manager の各 API を有効にします。
gcloud services enable \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com \ secretmanager.googleapis.com
次のような成功メッセージが出力されます。
Operation "operations/..." finished successfully.
これで、アプリケーションを準備してデプロイする準備が整いました。
4. Slack ワークスペースを作成する
カスタム インテグレーションを作成できる Slack ワークスペースが必要です。このチュートリアルで使用するワークスペースをまだお持ちでない場合は、ワークスペースを無料で作成できます。

5. Slack bot ユーザーを作成する
ボットユーザーは、Slack でメッセージを確認、投稿したり、ファイルをアップロードしたりできます。この Codelab では、簡単な挨拶メッセージを投稿する bot を作成します。
新しい Slack アプリを作成する
- Slack アプリの管理ページに移動します。
- 右上にある [Create new app] ボタンをクリックします。
- アプリに「Kittenbot」などの名前を付けます。
- アプリをインストールする Slack チームを選択します。
ボットユーザーを作成する
- 左側のパネルの [機能] で [App Home] に移動します。

- [Review Scopes to Add] をクリックして、bot トークンにスコープを割り当てます。
- [Bot Token Scopes] までスクロールし、[Add an OAuth Scope] をクリックします。
chat:writeを選択して「Kittenbot としてメッセージを送信」

- 上にスクロールして、[Install App to your Workspace] ボタンをクリックします。
- これにより、アプリがチームにインストールされ、作成したばかりの bot ユーザーが追加され、bot トークンが生成されます。
- プロンプトが表示されたら、[許可] をクリックして、ボットがワークスペースでチャットできるようにします。
メッセージとコマンドを有効にする
- [タブを表示] まで下にスクロールし、次の両方のオプションが有効になっていることを確認します。

クライアント署名シークレットを取得する
- [設定] の [基本情報] に移動します。
- [署名シークレット] まで下にスクロールし、[表示] をクリックして、シークレットをクリップボードにコピーします。

- シークレットを環境変数に保存します。
CLIENT_SIGNING_SECRET=PASTE_THE_SIGNING_SECRET
bot トークンを取得する
- [Features] の [OAuth & Permissions] に移動します。
- [Copy] ボタンをクリックして、ボットユーザーの OAuth アクセス トークンのテキストをクリップボードにコピーします。

- ボットトークンを環境変数に保存します。
BOT_TOKEN=PASTE_THE_BOT_TOKEN
ご安心ください。 これらのトークンをもう一度取得する必要がある場合は、アプリの管理ページ からこの構成ページに戻ります。
6. シークレットを保護する
ボットトークンとクライアント署名シークレットが安全に保存されるようにする必要があります。ソースコードにハードコードすると、バージョン管理に公開したり、Docker イメージに埋め込んだりして、シークレットが誤って公開される可能性が高くなります。
Secret Manager は、API キー、パスワード、証明書、その他のセンシティブ データを保存する安全かつ便利な方法を提供します。これは、Google Cloud で使用されるすべてのシークレットを一元的に管理、アクセス、監査することが可能な、信頼できる唯一の情報源です。
シークレットを作成する
次のコマンドを使用して、クライアント署名シークレットと bot トークンを保存します。
- クライアント署名シークレット
echo -n $CLIENT_SIGNING_SECRET | gcloud secrets create client-signing-secret \ --replication-policy automatic \ --data-file -
- Bot トークン
echo -n $BOT_TOKEN | gcloud secrets create bot-token \ --replication-policy automatic \ --data-file -
シークレットにアクセスする
シークレットが正しく作成され、権限が機能していることを確認します。次のコマンドを使用して Secret にアクセスします。
echo $(gcloud secrets versions access 1 --secret client-signing-secret) echo $(gcloud secrets versions access 1 --secret bot-token)
Google Cloud コンソールでシークレットを表示して管理することもできます。
7. サンプルコードを取得する
Cloud Shell のコマンドラインで次のコマンドを実行して、GitHub リポジトリのクローンを作成します。
git clone https://github.com/googlecodelabs/cloud-slack-bot.git
ディレクトリを cloud-slack-bot/start に変更します。
cd cloud-slack-bot/start
コードを理解する
お好みのコマンドライン エディタ(nano、vim、emacs など)で kittenbot.js ファイルを開くか、次のコマンドを使用して Cloud Shell エディタで現在のフォルダを直接開きます。
cloudshell workspace .
kittenbot コードには 2 つの主な機能があります。1 つはシークレットを取得するため、もう 1 つはボットを実行するためです。
まず、依存関係をインポートします。
kittenbot.js
const { Botkit } = require('botkit');
const {
SlackAdapter,
SlackEventMiddleware,
} = require('botbuilder-adapter-slack');
const { SecretManagerServiceClient } = require('@google-cloud/secret-manager');
SlackAdapter と SlackEventMiddleware は、Botkit を拡張し、ボットが Slack API との間でメッセージを簡単に変換できるようにするパッケージです。Secret Manager クライアントを使用すると、前の手順で保存したシークレットにアクセスできます。
次に、シークレットを取得する関数があります。
/**
* Returns the secret string from Google Cloud Secret Manager
* @param {string} name The name of the secret.
* @return {Promise<string>} The string value of the secret.
*/
async function accessSecretVersion(name) {
const client = new SecretManagerServiceClient();
const projectId = process.env.PROJECT_ID;
const [version] = await client.accessSecretVersion({
name: `projects/${projectId}/secrets/${name}/versions/1`,
});
// Extract the payload as a string.
const payload = version.payload.data.toString('utf8');
return payload;
}
この関数は、ボットの認証に必要なシークレットの文字列値を返します。
次の関数は、ボットを初期化します。
/**
* Function to initialize kittenbot.
*/
async function kittenbotInit() {
const adapter = new SlackAdapter({
clientSigningSecret: await accessSecretVersion('client-signing-secret'),
botToken: await accessSecretVersion('bot-token'),
});
adapter.use(new SlackEventMiddleware());
const controller = new Botkit({
webhook_uri: '/api/messages',
adapter: adapter,
});
controller.ready(() => {
controller.hears(
['hello', 'hi', 'hey'],
['message', 'direct_message'],
async (bot, message) => {
await bot.reply(message, 'Meow. :smile_cat:');
}
);
});
}
関数の最初の部分では、シークレットを使用して SlackAdapter を構成し、メッセージを受信するエンドポイントを指定します。コントローラがオンになると、bot は「hello」、「hi」、「hey」を含むメッセージに「Meow. 😺」
アプリ マニフェストの次の部分を確認してください。
package.json
{
// ...
"scripts": {
"start": "node kittenbot.js",
// ...
},
"engines": {
"node": "16"
},
// ...
}
Cloud Run を使用すると、ソースから Node.js アプリを直接デプロイできます。バックグラウンドでは、次の処理が行われます。
- Cloud Run は Cloud Build を呼び出してコンテナ イメージをビルドします(ソースコードからのデプロイをご覧ください)。
Dockerfileがソースコード ディレクトリにある場合、Cloud Build はそれを使用してコンテナ イメージをビルドします。- Dockerfile がないため、Cloud Build は Buildpacks を呼び出してソースを分析し、本番環境に対応したイメージを自動生成します。
- Buildpack は
package.jsonマニフェストを検出し、Node.js イメージをビルドします。 scripts.startフィールドは、アプリの起動方法を決定します。engines.nodeフィールドは、コンテナ ベースイメージの Node.js バージョンを決定します。- デプロイ時に、既知のセキュリティ修正が自動的に適用されます。
アプリをデプロイする準備が整いました。
8. アプリをデプロイする
Slack Events API は、Webhook を使用してイベントに関する送信メッセージを送信します。Slack アプリを構成するときは、Slack API が ping を送信する一般公開の URL を指定する必要があります。
Cloud Run は、Webhook ターゲットをホストするための優れたソリューションです。任意の言語やランタイムを使用でき、同時実行性も提供されるため、アプリケーションで処理できるボリュームが大幅に増加します。
プロジェクト ID を取得する
PROJECT_ID 環境変数を定義します。
PROJECT_ID=$(gcloud config get-value core/project)
Cloud Run リージョンを定義する
Cloud Run はリージョナルです。つまり、Cloud Run サービスを実行するインフラストラクチャは特定のリージョンに配置され、そのリージョン内のすべてのゾーンで冗長的に利用できるよう Google によって管理されます。デプロイに使用するリージョンを定義します。例:
REGION="us-central1"
権限を更新する
Secret Manager からシークレットにアクセスできるようにするには、Cloud Run サービス アカウントにロール roles/secretmanager.secretAccessor を付与する必要があります。
まず、デフォルトのサービス アカウントを環境変数に保存します。
SERVICE_ACCOUNT=$(gcloud iam service-accounts list \ --format "value(email)" \ --filter "displayName:Compute Engine default service account")
メールアドレスが保存されていることを確認します。
echo $SERVICE_ACCOUNT
サービス アカウントの形式は PROJECT_NUMBER-compute@developer.gserviceaccount.com です。
メールアドレスを取得したら、サービス アカウントのロールを有効にします。
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT \ --role roles/secretmanager.secretAccessor
アプリをデプロイする
Cloud Run サービスは固有のエンドポイントを公開し、受信リクエストを処理するため、基盤となるインフラストラクチャを自動的にスケールします。
Cloud Run にアプリをデプロイします。
gcloud run deploy kittenbot \ --source . \ --platform managed \ --region $REGION \ --set-env-vars PROJECT_ID=$PROJECT_ID \ --allow-unauthenticated
- これにより、
kittenbotというサービスが作成されます。 --sourceオプションは、現在のフォルダを使用して Cloud Build でアプリケーションをビルドします。Cloud Build は、package.jsonファイルの存在を自動的に検出します。- このコマンド
gcloud config set run/region $REGIONを使用して、デフォルトのリージョンを定義することもできます。 - 次のコマンドを使用して、Cloud Run をデフォルトでマネージドにすることもできます。
gcloud config set run/platform managed --set-env-varsオプションは、サービス環境変数を設定します。--allow-unauthenticatedオプションを使用すると、サービスが一般公開されます。
初回は、Artifact Registry リポジトリの作成を求めるメッセージが表示されます。[Enter] をタップして検証します。
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [REGION] will be created. Do you want to continue (Y/n)?
これにより、ソースコードの Artifact Registry リポジトリへのアップロードとコンテナ イメージのビルドが開始されます。
Building using Dockerfile and deploying container ... * Building and deploying new service... Building Container. OK Creating Container Repository... OK Uploading sources... * Building Container... Logs are available at ...
ビルドとデプロイが完了するまでしばらく待ちます。成功すると、コマンドラインにサービス URL が表示されます。
... OK Building and deploying new service... Done. OK Creating Container Repository... OK Uploading sources... OK Building Container... Logs are available at ... OK Creating Revision... Creating Service. OK Routing traffic... OK Setting IAM Policy... Done. Service [SERVICE]... has been deployed and is serving 100 percent of traffic. Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app
次のコマンドでサービス URL を取得できます。
SERVICE_URL=$( \ gcloud run services describe kittenbot \ --platform managed \ --region $REGION \ --format "value(status.url)" \ ) echo $SERVICE_URL
URL の形式は次のとおりです。
https://kittenbot-PROJECTHASH-REGIONID.a.run.app
この URL は、Slack Events API を有効にするために使用されるベースになります。クリップボードにコピーして、次の手順で使用します。
サービスが公開され、一般公開されました。詳細については、Cloud Run コンソールをご覧ください。
最終リビジョンが作成された日時、トラフィック量、ログを確認できます。ログをクリックすると、Botkit コントローラがオンになっていて、メッセージを受信する準備ができていることがわかります。
それでは、Slack チャンネルからメッセージを送信してみましょう。
9. Slack イベントを有効にする
前述のとおり、kittenbot コードでは Webhook ターゲットの相対エンドポイントを指定しています。
kittenbot.js
const controller = new Botkit({
webhook_uri: '/api/messages',
adapter: adapter,
});
つまり、完全な URL は、Cloud Run サービスのベース部分に /api/messages を加えたものになります。
イベントを有効にする
アプリ管理ページで、サイドバーの [イベント サブスクリプション] セクションに移動し、[イベントを有効にする] をオンにします。サービス URL を入力します。
PASTE_THE_SERVICE_URL/api/messages

URL の入力速度によっては、入力が完了する前に確認が試行されることがあります。失敗した場合は、[再試行] をクリックします。
チャンネル登録
メッセージ ボットのすべてのイベントに登録します。

ページの下部にある [変更を保存] をクリックします。[アプリを再インストール] というメッセージが表示されます。メッセージに沿って操作し、[許可] をクリックします。
これで、bot の統合は完了です。ワークスペース内のメッセージがトリガーとなり、Slack から Cloud Run サービスにメッセージが送信され、Cloud Run サービスから簡単な挨拶が返信されます。
10. bot をテストする
Kittenbot にダイレクト メッセージを送信します。

「@kittenbot」と入力して [Invite Them] をクリックし、kittenbot をチャンネルに追加します。

これで、チャンネルのすべてのユーザーが Kittenbot とやり取りできるようになりました。

Slack の各メッセージはイベントをトリガーし、HTTP POST メッセージを Cloud Run サービスに送信します。Cloud Run サービスログを見ると、各メッセージがログの POST エントリに対応していることがわかります。

kittenbot は各メッセージに「Meow. 😺」
11. ボーナス - ボットを更新する
このオプションのセクションの所要時間は数分です。クリーンアップに直接進んでいただいても構いません。
会話スレッド
「meow」以外の応答もできるボットを作成してみましょう。しかし、Cloud Run で実行されているものの新しいバージョンをデプロイするにはどうすればよいでしょうか?
ディレクトリを cloud-slack-bot/extra-credit に変更します。
cd ../extra-credit/
現在のフォルダを Cloud Shell エディタで開きます。
cloudshell workspace .
Botkit には、会話を処理する機能があります。これにより、ボットはより多くの情報をリクエストし、1 語よりも長い返信でメッセージに対応します。
ダイアログを定義する
まず、ファイルの末尾で会話型関数がどのように定義されているかを確認します。
// ...
const maxCats = 20;
const catEmojis = [
':smile_cat:',
':smiley_cat:',
':joy_cat:',
':heart_eyes_cat:',
':smirk_cat:',
':kissing_cat:',
':scream_cat:',
':crying_cat_face:',
':pouting_cat:',
':cat:',
':cat2:',
':leopard:',
':lion_face:',
':tiger:',
':tiger2:',
];
/**
* Function to concatenate cat emojis
* @param {number} numCats Number of cat emojis.
* @return {string} The string message of cat emojis.
*/
function makeCatMessage(numCats) {
let catMessage = '';
for (let i = 0; i < numCats; i++) {
// Append a random cat from the list
catMessage += catEmojis[Math.floor(Math.random() * catEmojis.length)];
}
return catMessage;
}
/**
* Function to create the kitten conversation
* @param {Object} controller The botkit controller.
* @return {Object} The BotkitConversation object.
*/
function createKittenDialog(controller) {
const convo = new BotkitConversation('kitten-delivery', controller);
convo.ask('Does someone need a kitten delivery?', [
{
pattern: 'yes',
handler: async (response, convo, bot) => {
await convo.gotoThread('yes_kittens');
},
},
{
pattern: 'no',
handler: async (response, convo, bot) => {
await convo.gotoThread('no_kittens');
},
},
{
default: true,
handler: async (response, convo, bot) => {
await convo.gotoThread('default');
},
},
]);
convo.addQuestion(
'How many would you like?',
[
{
pattern: '^[0-9]+?',
handler: async (response, convo, bot, message) => {
const numCats = parseInt(response);
if (numCats > maxCats) {
await convo.gotoThread('too_many');
} else {
convo.setVar('full_cat_message', makeCatMessage(numCats));
await convo.gotoThread('cat_message');
}
},
},
{
default: true,
handler: async (response, convo, bot, message) => {
if (response) {
await convo.gotoThread('ask_again');
} else {
// The response '0' is interpreted as null
await convo.gotoThread('zero_kittens');
}
},
},
],
'num_kittens',
'yes_kittens'
);
// If numCats is too large, jump to start of the yes_kittens thread
convo.addMessage(
'Sorry, {{vars.num_kittens}} is too many cats. Pick a smaller number.',
'too_many'
);
convo.addAction('yes_kittens', 'too_many');
// If response is not a number, jump to start of the yes_kittens thread
convo.addMessage("Sorry I didn't understand that", 'ask_again');
convo.addAction('yes_kittens', 'ask_again');
// If numCats is 0, send a dog instead
convo.addMessage(
{
text:
'Sorry to hear you want zero kittens. ' +
'Here is a dog, instead. :dog:',
attachments: [
{
fallback: 'Chihuahua Bubbles - https://youtu.be/s84dBopsIe4',
text: '<https://youtu.be/s84dBopsIe4|' + 'Chihuahua Bubbles>!',
},
],
},
'zero_kittens'
);
// Send cat message
convo.addMessage('{{vars.full_cat_message}}', 'cat_message');
convo.addMessage('Perhaps later.', 'no_kittens');
return convo;
}
この新しい会話では、回答に基づいてスレッドが誘導されます。たとえば、子猫に関する質問に対して「いいえ」と回答した場合、会話スレッドの終端である「no_kittens」というラベルの付いたメッセージにジャンプします。
コントローラにダイアログを追加する
会話が定義されたので、コントローラに追加する方法を見てみましょう。
async function kittenbotInit() {
// ...
const controller = new Botkit({
webhook_uri: '/api/messages',
adapter: adapter,
});
// Add Kitten Dialog
const convo = createKittenDialog(controller);
controller.addDialog(convo);
// Controller is ready
controller.ready(() => {
// ...
});
}
ダイアログをトリガーする
これで、コントローラがダイアログを使用できるようになりました。チャットボットが「kitten」、「kittens」、「cat」、「cats」を検出したときに会話がどのように開始されるかを見てみましょう。
// ...
controller.ready(() => {
controller.hears(
['hello', 'hi', 'hey'],
['message', 'direct_message'],
async (bot, message) => {
await bot.reply(message, 'Meow. :smile_cat:');
return;
}
);
// START: listen for cat emoji delivery
controller.hears(
['cat', 'cats', 'kitten', 'kittens'],
['message', 'direct_message'],
async (bot, message) => {
// Don't respond to self
if (message.bot_id !== message.user) {
await bot.startConversationInChannel(message.channel, message.user);
await bot.beginDialog('kitten-delivery');
return;
}
}
);
// END: listen for cat emoji delivery
// ...
});
// ...
アプリが更新された場合
アプリケーションを Cloud Run に再デプロイします。
gcloud run deploy kittenbot \ --source . \ --platform managed \ --region $REGION \ --set-env-vars PROJECT_ID=$PROJECT_ID \ --allow-unauthenticated
試してみる

おめでとうございます!Cloud Run で動作する Slack ボットが新しいバージョンに更新されました。
スラッシュ コマンド
ユーザーとの会話を希望しない場合はどうすればよいですか?簡単なコマンド 1 つでアクションをトリガーしたい場合はどうすればよいでしょうか?
Slack は、スラッシュ コマンドを使用してこの機能を提供しています。ユーザーは、メッセージ ボックスにコマンドを入力してアプリケーションを呼び出すことができます。
Slack スラッシュ コマンドを有効にする
- アプリの管理ページの [機能] で [スラッシュ コマンド] セクションに移動します。
- [Create New Command] をクリックします。
- kittenbot サービス URL を使用して
/catsコマンドを構成します。Events API を有効にしたときと同じエンドポイントを使用してください。これは、URL に'/api/messages'を加えたものです。

- プロンプトに沿ってアプリと権限を更新します。
コントローラにスラッシュ コマンドを追加する
コントローラの ready 関数内でスラッシュ コマンドのハンドラが追加された方法をご覧ください。
// ...
// Controller is ready
controller.ready(() => {
// ...
// START: slash commands
controller.on('slash_command', async (bot, message) => {
const numCats = parseInt(message.text);
const response = makeCatMessage(numCats);
bot.httpBody({ text: response });
});
// END: slash commands
});
// ...
試してみる
「/cats」と数字を入力して、スラッシュ コマンドを送信します。例: /cats 8

bot から、自分だけが見ることができる 8 匹の猫が返されます。

12. クリーンアップ
これで、Cloud Run で Slack ボットが実行されるようになりました。使用したリソースをクリーンアップします(費用とリソースの節約のため)。
プロジェクトを削除する
Cloud Shell からプロジェクト全体を削除できます。
gcloud projects delete $PROJECT_ID
リソースを個別に削除する場合は、次のセクションに進みます。
デプロイを削除する
gcloud run services delete kittenbot --region $REGION
コマンド出力
Service [kittenbot] will be deleted. Do you want to continue (Y/n)? y Deleted service [kittenbot].
クライアント署名シークレットを削除する
gcloud secrets delete client-signing-secret
コマンド出力
You are about to destroy the secret [client-signing-secret] and its [1] version(s). This action cannot be reversed. Do you want to continue (Y/n)? y Deleted secret [client-signing-secret].
bot トークン シークレットを削除する
gcloud secrets delete bot-token
コマンド出力
You are about to destroy the secret [bot-token] and its [1] version(s). This action cannot be reversed. Do you want to continue (Y/n)? y Deleted secret [bot-token].
ストレージ バケットを削除する
まず、Google Cloud Storage バケットを一覧表示して、バケットのパスを取得します。
gsutil ls
コマンド出力
gs://[REGION.]artifacts.<PROJECT_ID>.appspot.com/ gs://<PROJECT_ID>_cloudbuild/
次に、アーティファクト バケットを削除します。
gsutil rm -r gs://[REGION.]artifacts.${PROJECT_ID}.appspot.com/
コマンド出力
Removing gs://[REGION.]artifacts.<PROJECT_ID>.appspot.com/...
最後に、cloudbuild バケットを削除します。
gsutil rm -r gs://${PROJECT_ID}_cloudbuild/
コマンド出力
Removing gs://<PROJECT_ID>_cloudbuild/...
13. 完了

これで、Cloud Run で Slack ボットを実行する方法を理解できました。
ここで学んだのはこのテクノロジーの一部であるため、ご自身の Cloud Run のデプロイでさらに理解を深めることをおすすめします。
学習した内容
- Slack でボットのカスタム インテグレーションを作成する
- Secret Manager を使用して Slack シークレットを保護する
- Cloud Run に Slack ボットをデプロイする
次のステップ
- Cloud Run のチュートリアルを完了する
詳細
- GitHub で、他の Google Cloud Slack インテグレーションの例を確認する。
- Google Cloud のその他の機能を試す。チュートリアルをご覧ください。