カスタム イベントの受信

curl コマンドライン ツールを使用してカスタム イベントを生成し、生成したイベントを Cloud Run for Anthos on Google Cloud のサービスに送信する方法を学習します。

始める前に

このタスクを完了するには、イベント ブローカーを使用し、それが実行されている名前空間を把握する必要があります。Cloud Run for Anthos 用にイベントを構成し、イベント ブローカーを作成する方法を学習します。

イベント ブローカーが実行されている場合は、次のコマンドを実行して Kubernetes Namespace を表示できます。

kubectl get brokers -n NAMESPACE

Cloud Run for Anthos on Google Cloud イベント レシーバー サービスをデプロイする

イベント ブローカーからイベントを受信する Cloud Run for Anthos on Google Cloud サービスをデプロイします。

Cloud Run for Anthos on Google Cloud サービスをデプロイするには:

  1. リポジトリのクローンを作成します。

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/eventarc/audit-storage
    

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    cd java-docs-samples/eventarc/audit-storage
    

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
    cd golang-samples/eventarc/audit_storage
    

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    cd nodejs-docs-samples/eventarc/audit-storage
    

    C#

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    cd dotnet-docs-samples/eventarc/audit-storage
    
  2. コンテナをビルドして、Cloud Build にアップロードします。

    gcloud builds submit \
      --tag gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
    
  3. コンテナ イメージを Cloud Run for Anthos on Google Cloud にデプロイします。

    gcloud run deploy CLOUD_RUN_SERVICE_NAME \
        --namespace=NAMESPACE \
        --image gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
    

サービスの URL が表示されたら、デプロイが正常に完了しています。

cURL を使用したイベントの生成

Google Kubernetes Engine Pod で実行している curl を使用してイベントを生成できます。

  1. イベント ブローカーの名前空間に Google Kubernetes Engine Pod を作成します。

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        run: curl
      name: curl
      namespace: NAMESPACE
    spec:
      containers:
      - image: radial/busyboxplus:curl
        imagePullPolicy: IfNotPresent
        name: curl
        stdin: true
        tty: true
    EOF
    

    ここで、NAMESPACE はイベント ブローカーと同じ名前空間です。

  2. 次のコマンドを実行して、Pod が正しく機能していることを確認します。

    kubectl get pod curl -n NAMESPACE
    

    ここで、NAMESPACE はイベント ブローカーと同じ名前空間です。

    curl という Pod が稼働中(Status=Running)であることが表示されます。

イベント ブローカーのトリガーを作成する

  1. alpha-type イベントをフィルタするトリガーを作成します。

    gcloud beta events triggers create TRIGGER_NAME \
        --namespace NAMESPACE \
        --target-service=CLOUD_RUN_SERVICE_NAME \
        --type=alpha-type \
        --custom-type
    

    ここで、NAMESPACE はイベント ブローカーと同じ名前空間です。

    フィルタを指定しない場合、すべてのイベントが Cloud Run for Anthos on Google Cloud サービスに送信されます。任意の数の CloudEvents 属性と拡張機能に完全一致フィルタリングを使用できます。フィルタで複数の属性を設定する場合、イベントがすべての属性に一致する必要があります。

  2. トリガーが設定されていることを確認します。

    gcloud beta events triggers list \
        --target-service 'CLOUD_RUN_SERVICE_NAME' \
        --namespace NAMESPACE
    

    ここで、NAMESPACE はイベント ブローカーと同じ名前空間です。

    出力は次のようになります。

    TRIGGER                  EVENT TYPE           TARGET
    trigger-name           alpha-type           cloud-run-service
    

トリガー [TRIGGER-NAME] が稼働中であることが表示されます。

イベントを作成する

イベントを生成するには、Google Kubernetes Engine Pod からイベント ブローカーに HTTP リクエストを送信します。

  1. HTTP リクエストを送信するイベント ブローカーの URL を取得します。

    kubectl get brokers default \
        --namespace NAMESPACE \
        --output jsonpath="{.status.address.url}"
    

    HTTP リクエストを送信するときに使用するため、ブローカーの URL をメモします。

  2. Pod に SSH で接続します。

    kubectl --namespace NAMESPACE attach curl -it
    
  3. HTTP ヘッダー Ce-Type: alpha-type を指定して curl を使用して HTTP リクエストを送信し、トリガーのフィルタとイベント ブローカーを照合します。この例では、send-cloudevents-to-broker がメッセージです。

    curl -v "EVENT_BROKER_URL" \
        -X POST \
        -H "Ce-Id: my-id" \
        -H "Ce-Specversion: 1.0" \
        -H "Ce-Type: alpha-type" \
        -H "Ce-Subject: custom event" \
        -H "Ce-Source: my-source" \
        -H "Content-Type: application/json" \
        -d '{"msg":"send-cloudevents-to-broker"}'
    

    これによりイベントが生成され、ブローカーが HTTP 202 レスポンスを返します。

イベントを表示する

Cloud Run for Anthos on Google Cloud レシーバー サービスのログでイベントを確認します。

  1. ログを表示するには、次のように入力します。

    gcloud logging read "resource.type=k8s_container \
        resource.labels.namespace_name=events \
        resource.labels.container_name=user-container"
    

クリーンアップ

定期的な課金が発生しないように、このチュートリアルで作成したリソースを削除します。

  1. Pod を削除します。

    kubectl delete pod curl --namespace >NAMESPACE
    
  2. トリガーを削除します。

    gcloud beta events triggers delete TRIGGER_NAME \
        --namespace >NAMESPACE