このチュートリアルは、Google Chat、Slack、または Microsoft Teams などのコラボレーション プラットフォームにプッシュされた重要な Google Cloud イベントの通知を受け取りたい DevOps チームを対象としています。通知を使用すると、チームは Google Cloud コンソールに定期的にログインしてイベントの更新を確認する必要がなくなります。
このチュートリアルの例では、ディスク スナップショットを作成した後に通知が生成されます。ディスク スナップショットを作成すると、ゾーン永続ディスクまたはリージョン永続ディスクからデータがバックアップされます。このチュートリアルを修正すれば、仮想マシン(VM)インスタンスの作成や削除など、他の重要な Google Cloud イベントが発生したときにコラボレーション システムに自動的に通知が push されるように設定できます。
このチュートリアルのコードは GitHub リポジトリで入手できます。
このチュートリアルは、DevOps とクラウド テクノロジーを専門とするエンジニアを対象としています。ここでは Cloud Logging、Pub/Sub、Cloud Functions に精通していることを前提としています。
State of DevOps で、ソフトウェア デリバリーのパフォーマンスを向上させると認められた機能が報告されています。このチュートリアルでは、次の機能について説明します。
アーキテクチャ
次の図は、このチュートリアルで使用するさまざまなコンポーネントを示しています。
まず、永続ディスクを作成し、ディスク スナップショットを作成します。次に、成功したディスク スナップショットに対応するログイベントをフィルタリングし、Pub/Sub トピックに公開してイベントをエクスポートします。Cloud Functions の関数がトピックからメッセージを読み取り、Webhook にプッシュ通知を送信します。このチュートリアルでは、この Webhook は Cloud Functions の関数で表されます。
目標
- 選択したイベントを Pub/Sub にエクスポートするように Cloud Logging を設定し、Cloud Functions がそれらを利用できるようにします。
- Cloud Logging によってエクスポートされたイベントを利用した Cloud Functions の関数をデプロイし、Webhook をトリガーします。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。
このチュートリアルでは、Cloud Shell を使用してすべてのコマンドを実行します。
Compute Engine、Cloud Logging、Cloud Functions、Pub/Sub API を有効にします。
gcloud services enable \ compute.googleapis.com \ logging.googleapis.com \ cloudfunctions.googleapis.com \ pubsub.googleapis.com
環境の準備
Cloud Shell で、このチュートリアルで使用する Compute Engine のリージョンとゾーンの
gcloud
デフォルトを設定します。gcloud config set compute/region us-central1 gcloud config set compute/zone us-central1-a
このチュートリアルでは、
us-central1
リージョンとus-central1-a
ゾーンを使用します。必要に応じてリージョンとゾーンを変更できます。詳細については、地域とリージョンをご覧ください。このチュートリアルで使用する環境変数を定義します。
PROJECT=$(gcloud config get-value project) PUBSUB_TOPIC="gce-snapshots-events" DISK="my-disk-1" WEBHOOK_NAME="webhookEmulator" WEBHOOK_URL="https://$(gcloud config get-value compute/region)-$PROJECT.cloudfunctions.net/$WEBHOOK_NAME"
リソースの作成
このセクションでは、このチュートリアル用に次の Google Cloud リソースを作成します。
- Pub/Sub トピック
- Cloud Logging のシンク
- Cloud Functions の関数
Pub/Sub トピックの作成
Cloud Shell で、イベント メッセージを公開するための Pub/Sub トピックを作成します。
gcloud pubsub topics create $PUBSUB_TOPIC
Pub/Sub への Cloud Logging シンクの作成
Cloud Logging では、Google Cloud から取得したイベントを保存、検索、分析できます。これらのログをフィルタリングして Cloud Storage、BigQuery、Pub/Sub にエクスポートできます。
Cloud Shell で、ディスク スナップショットによって生成されたログを Pub/Sub にエクスポートします。
gcloud logging sinks create gce-events-sink \ pubsub.googleapis.com/projects/$PROJECT/topics/$PUBSUB_TOPIC \ --log-filter='resource.type="gce_disk" jsonPayload.event_type="GCE_OPERATION_DONE" jsonPayload.event_subtype="compute.disks.createSnapshot"'
出力には、前に作成した Pub/Sub トピックにログを公開するときに Cloud Logging が使用するサービス アカウントのメールアドレスが含まれます。このメールアドレスの形式は
SERVICE_ACCOUNT_NAME@gcp-sa-logging.iam.gserviceaccount.com
です。サービス アカウントのメールアドレスをコピーします。コピーしたメールアドレスは次のセクションで必要になります。
権限を設定する
Cloud Shell で、Pub/Sub トピックにメッセージをパブリッシュできるように、サービス アカウントに Pub/Sub パブリッシャー IAM ロール(
roles/pubsub.publisher
)を付与します。gcloud beta pubsub topics add-iam-policy-binding $PUBSUB_TOPIC \ --member='serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS' \ --role='roles/pubsub.publisher'
SERVICE_ACCOUNT_EMAIL_ADDRESS
は、前のセクションでコピーしたメールアドレスに置き換えます。
Webhook を作成する
通常、本番環境では、コラボレーション プラットフォームに送信されるプッシュ通知によって重要な Google Cloud イベントが通知されます。これらのプラットフォームのほとんどは Webhook を提供しています。このチュートリアルでは、いずれかのプラットフォームから Webhook をシミュレートする Cloud Functions の関数を作成します。HTTP 経由でトリガーされるこの Cloud Functions の関数は、受信したメッセージの内容を出力します。
デフォルトでは、任意のユーザーまたはサービスが Cloud Functions の HTTP 関数を呼び出すことができます。HTTP 関数に Identity and Access Management(IAM)を構成すると、リクエストに認証情報を与えない限り HTTP 関数を呼び出せないように、この動作を制限できます。
Cloud Shell で、チュートリアル コードを含む Git リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/gcf-notification-forwarding
作業ディレクトリに切り替えます。
cd gcf-notification-forwarding/
HTTP トリガーを使用して Cloud Functions の関数
webhookEmulator
Webhook をデプロイします。gcloud functions deploy $WEBHOOK_NAME \ --runtime=nodejs8 \ --trigger-http \ --allow-unauthenticated \ --source=webhook/
このコマンドは完了するまでに最大 2 分かかります。
Cloud Functions の関数を作成してプッシュ通知を設定する
push モードで作成した Pub/Sub トピックにサブスクライブする Cloud Functions の関数を作成します。Cloud Logging がイベントを Pub / Sub トピックにエクスポート(またはプッシュ)するたびに、この Cloud Functions の関数がトリガーされます。関数はイベントを受信して処理し、前に作成した Webhook の HTTP エンドポイントにプッシュします。
Cloud Shell で、Cloud Functions の関数をデプロイします。
gcloud functions deploy pushEventsToWebhook \ --runtime=nodejs8 \ --trigger-topic=$PUBSUB_TOPIC \ --set-env-vars=WEBHOOK_URL=$WEBHOOK_URL \ --allow-unauthenticated \ --source=push_notification/
セットアップのテスト
この設定をテストするには、ディスク スナップショットを作成し、ディスクス ナップショットが生成したイベントログを Webhook が受信するかどうかを確認します。
Cloud Shell で、ゾーン永続ディスクを作成します。デフォルトは 500 GB の標準ハードディスク ドライブです。
gcloud compute disks create $DISK \ --zone=$(gcloud config get-value compute/zone)
前に作成したディスク スナップショットの作成をトリガーします。
gcloud compute disks snapshot $DISK \ --zone=$(gcloud config get-value compute/zone) \ --storage-location=$(gcloud config get-value compute/region)
このコマンドは完了するまでに最大 2 分かかります。スナップショットが作成されると、管理アクティビティ ログエントリが生成されます。イベントログがフィルタリングされ、Pub/Sub トピックにプッシュされます。サブスクライブされた Cloud Functions の関数がそれを選択し、フォーマットして、Webhook の HTTP エンドポイントにプッシュします。
数分後、Webhook がイベントログを受信したかどうかを確認します。
gcloud beta functions logs read $WEBHOOK_NAME \ --region=$(gcloud config get-value compute/region) \ --limit=10
出力は次のようになります。
{ data:[ { "type":'disk', "url":'https://console.cloud.google.com/compute/disksDetail/zones/us-central1-a/disks/my-disk-1?project=$PROJECT&supportedpurview=project', "name":'my-disk-1' }, { "type":'project', "project_id":'$PROJECT', "project_url":'https://console.cloud.google.com/?project=$PROJECT' }, { "zone":'us-central1-a' }, { "date_time":'2020-04-15T09:07:21.205-06:00' } ] }
出力には、Webhook がディスク スナップショットが作成されたという通知を受信したことが示されています。
クリーンアップ
課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
- Google Cloud コンソールで、[リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
次のステップ
- Google Cloud Observability について読む。
- Cloud Logging のログのルーティングについて確認する。
- Pub/Sub について読む。
- Pub/Sub のチュートリアルを確認する。
- Cloud Functions について読む。
- Cloud Functions のチュートリアルを確認する。
- Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud アーキテクチャ センターをご覧ください。
- DevOps に関するリソースを読む。
- このチュートリアルに関連する DevOps 機能の詳細については、以下をご覧ください。
- DevOps のクイック チェックで、業界における立ち位置を把握する。