Cloud Run for Anthos サービスが Eventarc を使用して Pub/Sub イベントを受信できるように、イベント トリガーを移行できます。このガイドでは、既存の Cloud Run for Anthos のトリガーを移行し、Cloud Run for Anthos サービスが Google Kubernetes Engine(GKE)クラスタで実行されていることを前提としています。移行はクラスタごとに行う必要があります。
この移行パスにより、イベントの損失を最小限に抑えながら、重複を最小限にできます。
移行の手順は次のとおりです。
- Eventarc が GKE クラスタ内のリソースを管理できるようにするには、GKE の宛先を有効にします。
- 必要に応じて、ターゲット Cloud Run for Anthos サービスを実行している GKE クラスタの Workload Identity を有効にします。
- 既存の Events for Cloud Run for Anthos トリガーを特定します。
- 既存のトリガーと同じ Cloud Run for Anthos サービスを参照する Eventarc トリガーを作成します。
- Eventarc トリガーによってイベントが想定どおり配信されていることを確認します。
- 元のイベント トリガーを削除し、移行後にクリーンアップします。
始める前に
このガイドでは、次のものが用意されていることを前提としています。
コマンドライン環境を設定する
gcloud
および kubectl
コマンドライン ツールを設定するには:
Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。
Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
自分のアカウントでログインします。
gcloud auth login
gcloud CLI のデフォルトの設定を構成します。
gcloud config set project PROJECT_ID gcloud config set run/cluster CLUSTER_NAME gcloud config set run/cluster_location CLUSTER_LOCATION gcloud config set run/platform gke gcloud config set eventarc/location LOCATION
次のように置き換えます。
プロジェクトで次の API を有効にします。
gcloud services enable cloudapis.googleapis.com gcloud services enable cloudbuild.googleapis.com gcloud services enable cloudresourcemanager.googleapis.com gcloud services enable container.googleapis.com gcloud services enable containerregistry.googleapis.com gcloud services enable eventarc.googleapis.com
kubectl
コマンドライン ツールをインストールします。gcloud components install kubectl
インストール済みの gcloud CLI コンポーネントを更新します。
gcloud components update
GKE の宛先を有効にする
Eventarc が GKE クラスタ内のリソースを管理できるようにするには、GKE の宛先を有効にし、Eventarc サービス アカウントを必要なロールにバインドします。
Eventarc 用に GKE の宛先を有効にします。
gcloud eventarc gke-destinations init
必要なロールをバインドするよう求められたら、「
y
」と入力します。次のロールがバインドされます。
roles/compute.viewer
roles/container.developer
roles/iam.serviceAccountAdmin
クラスタで Workload Identity を有効にする
クラスタで Workload Identity がすでに有効になっている場合、この手順は省略できます。
Google Kubernetes Engine(GKE)内で実行しているアプリケーションから Google Cloud サービスにアクセスするには、セキュリティのプロパティと管理性が優れているため、Workload Identity を使用することをおすすめします。Eventarc を使用して Cloud Run for Anthos イベントを転送する必要もあります。
既存のクラスタで Workload Identity を有効にするには、Workload Identity の使用をご覧ください。
既存の Events for Cloud Run for Anthos のトリガーを特定する
既存の Events for Cloud Run for Anthos のトリガーを移行する前に、トリガーの詳細を取得する必要があります。
クラスタの既存の Cloud Run for Anthos のトリガーを一覧表示します。
gcloud beta events triggers list --namespace EVENTS_NAMESPACE
EVENTS_NAMESPACE
は、イベント ブローカーの名前空間に置き換えます。出力は次のようになります。
TRIGGER EVENT TYPE TARGET ✔ trigger-id google.cloud.pubsub.topic.v1.messagePublished cloud-run-service-name
Eventarc トリガーを作成するには、トピック ID が必要になります。既存の Events for Cloud Run for Anthos トリガーのトピック ID を取得します。
gcloud beta events triggers describe TRIGGER_ID \ --platform gke --namespace EVENTS_NAMESPACE \ --format="flattened(serialized_source.spec.topic,serialized_trigger.spec.filter.attributes.type,serialized_trigger.spec.subscriber.ref.name,serialized_trigger.spec.subscriber.ref.namespace)"
TRIGGER_ID
は、既存の Events for Cloud Run for Anthos の ID または完全修飾 ID に置き換えます。出力は次のようになります。
topic: topic-id type: google.cloud.pubsub.topic.v1.messagePublished name: cloud-run-service-name namespace: events
Eventarc トリガーを作成して既存のトリガーを置き換える
Eventarc トリガーを作成する前に、ユーザー管理のサービス アカウントを設定して特定のロールを付与し、Eventarc が Cloud Run for Anthos の宛先のイベントを管理できるようにします。
Google Cloud サービス アカウント(GSA)を作成します。
TRIGGER_GSA=SERVICE_ACCOUNT_NAME gcloud iam service-accounts create $TRIGGER_GSA
SERVICE_ACCOUNT_NAME
は、6~30 文字の名前に置き換えます。小文字の英数字とハイフンを使用できます。サービス アカウントに
pubsub.subscriber
ロールとmonitoring.metricWriter
ロールを付与します。PROJECT_ID=$(gcloud config get-value project) gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/pubsub.subscriber" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/monitoring.metricWriter"
Cloud Run for Anthos の既存のトリガーの構成に基づいて、新しい Eventarc トリガーを作成します。宛先サービス、クラスタ、トピック ID を含むすべての引数が、既存の Events for Cloud Run for Anthos トリガーと一致している必要があります。
gcloud eventarc triggers create EVENTARC_TRIGGER_NAME \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location LOCATION \ --destination-gke-service=DESTINATION_SERVICE \ --destination-gke-cluster=CLUSTER_NAME \ --destination-gke-location=CLUSTER_LOCATION \ --destination-gke-namespace=EVENTS_NAMESPACE \ --destination-gke-path=/ \ --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
EVENTARC_TRIGGER_NAME
は、新しい Eventarc トリガーの名前に置き換えます。TOPIC_ID は、以前に取得した Pub/Sub トピック ID に置き換えます。これにより、Pub/Sub トピック ID の Eventarc トリガーが作成されます。
トリガーが正常に作成されたことを確認します。
gcloud eventarc triggers list
出力は次のようになります。
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE eventarc-trigger-name google.cloud.pubsub.topic.v1.messagePublished Yes
移行をテストして出力を確認する
移行をテストするには、Pub/Sub トピックに公開してテストイベントをトリガーし、既存の Events for Cloud Run for Anthos トリガーと Eventarc トリガーのそれぞれに、少なくとも 1 つのイベントが配信されていることを確認します。
たとえば、Pub/Sub からイベントを受信するのチュートリアルを完了し、そのイベントを Events for Cloud Run for Anthos トリガーしている場合は、テストイベントのトリガー後の出力が重複し、次のようになります。
Hello, World! ID: 2896291125947199 Hello, World! ID: 2896291125947199
次のシナリオは、イベント レシーバがイベントデータを表示するためのガイダンスとして使用できます。
Pub/Sub トピックにメッセージを公開します。
gcloud pubsub topics publish TOPIC_ID \ --message "Hello, World!"
イベントとその配信が成功したことを確認します。たとえば、受信側の Cloud Run for Anthos サービスのログを確認します。
kubectl logs \ --selector serving.knative.dev/service=DESTINATION_SERVICE \ -c user-container \ -n EVENTS_NAMESPACE \ --tail=100
2 つのトリガーの出力は次のようになります。違いは
Context Attributes
とExtensions
のみです。Eventarc に移行した後にイベント レシーバを変更する必要がないように、subscription
データを除き、実際のメッセージ データは同一にする必要があります。Eventarc イベント:
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: google.cloud.pubsub.topic.v1.messagePublished source: //pubsub.googleapis.com/projects/project-id/topics/topic-name id: 2759155988927083 time: 2021-07-22T17:47:19.964Z datacontenttype: application/json Data, { "subscription": "projects/project-id/subscriptions/eventarc-us-central1-eventarc-trigger-name-sub-567", "message": { "data": "V29ybGQ=", "messageId": "2759155988927083", "publishTime": "2021-07-22T17:47:19.964Z" } }
Events for Cloud Run for Anthos のイベント:
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: google.cloud.pubsub.topic.v1.messagePublished source: //pubsub.googleapis.com/projects/project-id/topics/topic-name id: 2759155988927083 time: 2021-07-22T17:47:19.964Z dataschema: https://raw.githubusercontent.com/googleapis/google-cloudevents/master/proto/google/events/cloud/pubsub/v1/data.proto datacontenttype: application/json Extensions, knativearrivaltime: 2021-07-22T17:47:20.723302362Z knsourcetrigger: link0.09767362059083662 traceparent: 00-f3cc6d754d361a0e49e83e5973fa3565-b4a20ef4ecffe96b-00 Data, { "subscription": "cre-src_events_source-for-trigger-name_5ffa9638-8cab-4010-900a-2edb275d9eaf", "message": { "messageId": "2759155988927083", "data": "V29ybGQ=", "publishTime": "2021-07-22T17:47:19.964Z" } }
移行後のクリーンアップ
Eventarc へのトリガーの移行をテストして検証したら、元の Event for Cloud Run for Anthos トリガーを削除できます。
Events for Cloud Run for Anthos トリガーを削除します。
gcloud beta events triggers delete TRIGGER_NAME \ --platform gke \ --namespace EVENTS_NAMESPACE \ --quiet
既存の Events for Cloud Run for Anthos がトリガーを Eventarc に移行されました。