メールで通知を受け取るようにクラスタを構成する


このチュートリアルでは、Google Kubernetes Engine(GKE)のクラスタ通知をメールで受信するように アプリケーション統合を構成する方法について説明します。

Pub/Sub トリガーを含む統合を作成して、GKE クラスタから通知を受信する既存のトピックをリッスンします。次に、データ マッピング タスクと Data Transformer タスクを使用して Pub/Sub メッセージを変換し、プレーンテキストのメール本文を作成します。

目標

  • GKE から外部通知を受信して変換するアプリケーション インテグレーション アプリケーションを作成します。
  • Pub/Sub 通知をメールに送信する Send Email タスクを作成します。

料金

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the GKE, Application Integration and Pub/Sub APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the GKE, Application Integration and Pub/Sub APIs.

    Enable the APIs

  8. GKE クラスタ通知を有効にします。
  9. プロジェクトで Application Integration を初めて使用する場合は、Application Integration を設定していることを確認してください。

必要なロール

service-PROJECT_NUMBER@gcp-sa-integrations.iam.gserviceaccount.com にクラスタ通知のメール通知を設定するために必要な権限を付与するには、service-PROJECT_NUMBER@gcp-sa-integrations.iam.gserviceaccount.com にプロジェクトに対する次の IAM ロールを付与するよう管理者に依頼します。

GKE クラスタのクラスタ通知を設定する

Pub/Sub を使用して GKE クラスタに関する通知を受信するには、クラスタ通知を受信するをご覧ください。

新しい統合を作成する

新しい統合を作成するには、次の手順を行います。

  1. Google Cloud コンソールで [Application Integration] ページに移動します。

    Application Integration に移動

  2. ナビゲーション メニューで [統合] をクリックします。[Integrations] ページが表示されます。

  3. [統合を作成] をクリックします。

  4. [Integration name] に、作成する統合の名前を入力します。

  5. 複数のリージョンが有効になっている場合は、統合のリージョンを選択するためのプルダウン オプションが表示されます。有効にしたリージョンが 1 つだけの場合、そのリージョンがデフォルトになり、プルダウンは表示されません。

    注: [リージョン] プルダウンには、Google Cloud プロジェクトにプロビジョニングされたリージョンのみが表示されます。新しいリージョンをプロビジョニングするには、ボックスの下部にある [リージョンを有効にする] をクリックします。

  6. [作成] をクリックして統合エディタを開きます。

Pub/Sub トリガーを追加して構成する

統合に Pub/Sub トリガーを追加する手順は次のとおりです。

  1. 統合エディタで [Triggers] を選択し、使用可能なトリガーのリストを表示します。

  2. [Pub/Sub] トリガー要素をクリックして、デザイナーに配置します。

  3. 統合エディタの [Pub/Sub trigger] 要素をクリックして、トリガー構成ペインを表示します。

  4. トリガーがリッスンするトピックを [Pub/Sub トピック] フィールドに次の形式で指定します。

    projects/PROJECT_ID/topics/TOPIC_ID
    

    次のように置き換えます。

  • PROJECT_ID: トピックが作成された Google Cloud プロジェクト。

  • TOPIC_ID: 環境を設定で作成した Pub/Sub トピックの ID。

    たとえば、プロジェクトの名前が my-project であり、トピックに gke-notifications という名前を付けた場合は、次のように入力します。

    projects/my-project/topics/gke-notifications
    

    Google Cloud プロジェクトで使用可能なすべてのトピックを表示するには、[トピック] の [トピックの名前] 列をご覧ください。[Pub/Sub] トリガーの構成ペインの [Trigger Output] フィールドに、Pub/Sub メッセージを保持する変数が自動的に入力されます。

データ マッピング タスクを追加して構成する

データ マッピング タスクは、Pub/Sub 通知から関連する変数を抽出するために役立ちます。Pub/Sub メッセージ JSON ファイルを入力として受け取り、変数を出力として抽出します。

データ マッピング タスクを構成するには:

  1. [Tasks] を選択して、使用可能なタスクのリストを表示します。

  2. 統合エディタで [Data Mapping] 要素をクリックして配置します。

  3. デザイナーで [Data Mapping] タスクをクリックして、タスクの構成ペインを開きます。

  4. Pub/Sub トリガーからデータ マッピングにエッジ接続を追加するには、Pub/Sub トリガーのコントロール ポイントにポインタを合わせ、データ マッピング タスクのコントロール ポイントまで線をドラッグします。エッジは、Pub/Sub トリガーからデータ マッピング タスクへの制御フローを意味します。

  5. [Open Data Mapping Editor] をクリックします。データ マッピング エディタを使用すると、使用可能な変換関数を使用して、入力変数を選択した出力変数にマッピングできます。出力は、他の統合タスクまたはトリガーの変数として使用できます。Application Integration の変数の詳細については、変数をご覧ください。

    このチュートリアルでは、次の手順で CloudPubSubMessage を入力として使用し、マッピングを作成します。

    1. [Variables] リストで CloudPubSubMessage JSON 変数を開き、CloudPubSubMessage.data 変数を最初の [Input] 行にドラッグします。
    2. 変換されたデータの値を保持する新しい出力変数を作成するには、[出力] 列の最初の行をクリックします。次に、以下の操作を行います。
      1. [名前] フィールドに「message_data」と入力します。
      2. [変数の型] のリストから [統合からの出力] を選択します。
      3. [データの種類] リストで [文字列] を選択します。
      4. [作成] をクリックします。message_data 変数が [出力] に表示されます。
    3. CloudPubSubMessage.attributes 変数を [変数] リストから [入力] 列の 2 番目の行にドラッグします。
    4. [出力] 列の 2 番目の行をクリックして、クラスタ属性を含む JSON ペイロードの値を保持する新しい出力変数を作成します。次のフィールドに入力します。

      1. [名前] フィールドに「attributes」と入力します。
      2. [変数の型] のリストから [なし] を選択します。
      3. [データ型] リストから [JSON] を選択します。
      4. [JSON スキーマ オプション] から [JSON スキーマを入力] を選択し、次のペイロードを貼り付けます。

        {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "cluster_name": {
              "type": "string"
            },
            "payload": {
              "type": "string"
            },
            "project_id": {
              "type": "string"
            },
            "cluster_location": {
              "type": "string"
            },
            "type_url": {
              "type": "string"
            }
          }
        }
        
      5. [作成] をクリックします。attributes 変数が [出力] に表示されます。attributes 変数が次のようになっていることを確認します。

        Application Integration のローカル変数

    5. [入力] 列の 3 行目をクリックし、[変数] ペインから attributes.cluster_name を選択します。前の手順で入力したスキーマから定義された 5 つの属性をすべて表示するには、[attributes] と入力する必要があります。

    6. [Output] 列の対応する行をクリックして、クラスタ名属性の値を保持する新しい出力変数を作成します。次のフィールドに入力します。

      1. [名前] フィールドに「cluster_name」と入力します。
      2. [変数の型] のリストから [統合からの出力] を選択します。
      3. [データの種類] リストで [文字列] を選択します。
      4. [作成] をクリックします。cluster_name 変数が [出力] に表示されます。
    7. project_idcluster_locationtype_urlpayload について、手順 ef を繰り返します。

    8. マッピングが完了したら、データ マッピング エディタを閉じます。変更は自動的に保存されます。

Data Transformer(スクリプト)タスクを追加して構成する

Data Transformer タスクは、データ マッピング タスクから抽出された変数を入力として受け取り、エンドユーザーが使用できるメッセージ本文に変換します。

Data Transformer タスクを構成するには:

  1. [Tasks] を選択して、使用可能なタスクのリストを表示します。
  2. [Data Transformer (Script)] 要素をクリックして、統合エディタに配置します。
  3. デザイナーで [Data Transformer] タスクをクリックして、タスクの構成ペインを開きます。
  4. データ マッピング タスクからデータ変換タスクにエッジ接続を追加するには、データ マッピングのコントロール ポイントにポインタを合わせ、データ変換タスクのコントロール ポイントに線をドラッグします。エッジは、データ マッピング タスクからデータ変換タスクへの制御フローを意味します。
  5. [Open Data Transformer Editor] をクリックします。Data Transformer エディタを使用すると、カスタム Jsonnet テンプレートを作成、編集、評価して、統合でデータ マッピングを実行できます。出力は、他の統合タスクまたはトリガーの変数として使用できます。この変換タスクの詳細については、Data Transformer タスクをご覧ください。このクイックスタートでは、次の手順でスクリプトを作成します。

    1. [変数] の左側のパネルで [作成] をクリックします。右側に [変数の作成] パネルが開きます。次のフィールドに入力します。

      • 名前:full_message」と入力します。
      • [変数タイプ] プルダウン ボックスで [Output from integration] を選択します。
      • [データ型] プルダウン ボックスで [String] を選択します。
      • [作成] をクリックして変数を作成し、ペインを閉じます。新しい full_message 変数が [変数] リストに表示されます。
    2. [スクリプト] を選択します。

    3. クラスタから通知を送信する場合は、次のサンプル スクリプトをメッセージ本文のテンプレートとして使用します。

      local message_data = std.extVar("message_data");
      local cluster_name = std.extVar("cluster_name");
      local project_id = std.extVar("project_id");
      local cluster_location = std.extVar("cluster_location");
      local type_url = std.extVar("type_url");
      local payload = std.extVar("payload");
      
      {full_message: "Project ID: " + project_id + "\n" +
                    "Cluster Name: " + cluster_name + "\n" +
                    "Location: " + cluster_location + "\n" +
                    "Event Type: " + type_url + "\n" +
                    "Message: " + message_data + "\n" +
                    "Payload: " + std.manifestJson(std.parseJson(payload))}
      
    4. マッピングが完了したら、データ マッピング エディタを閉じます。変更は自動的に保存されます。

メール送信タスクを追加して構成する

Send Email タスクを構成するには:

  1. 統合エディタで [タスク] を選択して、使用可能なタスクのリストを表示します。
  2. 統合エディタで [Send Email] 要素をクリックして配置します。
  3. Data Transformer タスクからメール送信タスクにエッジ接続を追加するには、Data Transformer タスクのコントロール ポイントにポインタを合わせ、メール送信タスクのコントロール ポイントに線をドラッグします。エッジは、Data Transformer タスクからメール送信タスクへの制御フローを意味します。
  4. デザイナーで [Send Email] 要素をクリックして、タスクの構成ペインを開きます。次のプロパティを設定します。
    1. 送信先: メールアドレスを入力します。このメールアドレスを使用して、統合が正常に完了したことを確認します。
    2. 件名: 「GKE Notifications」と入力します。
    3. Body in Plain Text: データ変換タスクで前に作成した full_message 変数を選択します。
    4. 残りのオプションはデフォルト構成のままにします。

プロパティへの変更は自動的に保存され、キャンバスは次のようになります。

Application Integration キャンバス

テスト統合

新しい統合をテストするには、統合図の上部にあるナビゲーション バーに移動し、[テスト] をクリックします。右側にパネルが開きます。[JSON 値を追加] セクションでは、次の Pub/Sub メッセージのサンプルを使用できます。

{
  "data": "Node pool projects/my-project/locations/us-central1-c/clusters/cluster-1/nodePools/default-pool is upgrading to version 1.29.1-gke.1589017.",
  "attributes": {
    "cluster_location": "us-central1-c",
    "cluster_name": "cluster-1",
    "payload": "{\"resourceType\":\"NODE_POOL\",\"operation\":\"operation-upgrade\",\"operationStartTime\":\"2024-05-07T20:09:35.528855756Z\",\"currentVersion\":\"1.28.7-gke.1026000\",\"targetVersion\":\"1.29.1-gke.1589017\",\"resource\":\"projects/my-project/locations/us-central1-c/clusters/cluster-1/nodePools/default-pool\"}",
    "project_id": "my-project",
    "type_url": "type.googleapis.com/google.container.v1beta1.UpgradeEvent"
  }
}

[Test Integration] ボタンをクリックすると、メール送信タスクで構成したメールアドレスにメールが送信されます。

統合を公開する

この統合を正常にテストしたら、統合の [公開] をクリックしてメッセージの処理を開始します。

統合の DRAFT バージョンのみを編集でき、統合の ACTIVE バージョンのみを実行できます。統合を編集する場合は、統合デザイナー ページで [編集を有効にする] をクリックし、下書きバージョンを作成します。詳細については、統合の編集ロックをご覧ください。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトを削除する

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

リソースを個別に削除する

  1. Application Integration を削除します

  2. Pub/Sub トピックを削除します

次のステップ