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


このチュートリアルでは、Application Integration を構成し、Google Kubernetes Engine(GKE)のクラスタ通知をメールで受信する方法について説明します。

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

目標

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

費用

このドキュメントでは、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. ナビゲーション メニューで [統合] をクリックします。[統合] のページが表示されます。

  3. [Create integration] をクリックします。

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

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

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

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

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

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

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

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

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

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

    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] をクリックします。Data Mapping Editor を使用すると、使用可能な変換関数を使用して、入力変数を目的の出力変数にマッピングできます。出力は、他の統合タスクまたはトリガーの変数として使用できます。Application Integration の変数の詳細については、変数をご覧ください。

    このチュートリアルは、次のように、CloudPubSubMessage を入力としてマッピングを作成します。

    1. [変数] リストで CloudPubSubMessage JSON 変数を開き、CloudPubSubMessage.data 変数を最初の [入力] 行にドラッグします。
    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. [出力] 列の対応する行をクリックして、クラスタ名属性の値を保持する新しい出力変数を作成します。次のフィールドに値を入力します。

      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 Editor を使用すると、カスタム Jsonnet テンプレートを作成、編集、評価して、統合でデータ マッピングを実行できます。出力は、他の統合タスクまたはトリガーの変数として使用できます。この変換タスクの詳細については、データ変換タスクをご覧ください。このクイックスタートでは、次の手順でスクリプトを作成します。

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

      • 名前:full_message」と入力します。
      • [変数の型] プルダウン ボックスで [Output from integration] を選択します。
      • [データの種類] プルダウン ボックスで [String] を選択します。
      • [Create] をクリックして変数を作成し、ペインを閉じます。新しい 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. マッピングが完了したら、データ マッピング エディタを閉じます。変更は自動的に保存されます。

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

メール送信タスクを構成するには:

  1. 統合エディタで [タスク] を選択して、使用可能なタスクのリストを表示します。
  2. 統合エディタで [メールを送信] 要素をクリックして配置します。
  3. データ変換タスクからメール送信タスクにエッジ接続を追加するには、データ変換タスクのコントロール ポイントにポインタを合わせ、メール送信タスクのコントロール ポイントに線を引きます。エッジは、データ マッピング タスクからメール送信タスクへの制御フローを示します。
  4. デザイナーで [メールを送信] 要素をクリックして、タスクの構成ペインを開きます。次のプロパティ値を設定します。
    1. 送信先: メールアドレスを入力します。このメールアドレスを使用して、統合が正常に完了していることを確認します。
    2. 件名:GKE Notifications」と入力します。
    3. 書式なしテキストの本文: データ マッピング タスクで前に作成した 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"
  }
}

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

統合を公開する

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

統合の 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 トピックを削除する

次のステップ