curl
コマンドライン ツールを使用してカスタム イベントを生成し、生成したイベントを Cloud Run for Anthos on Google Cloud のサービスに送信する方法を学習します。
始める前に
このタスクを完了するには、イベント ブローカーを使用し、それが実行されている名前空間を把握する必要があります。Cloud Run for Anthos 用にイベントを構成し、イベント ブローカーを作成する方法を学習します。
イベント ブローカーが実行されている場合は、次のコマンドを実行して Kubernetes Namespace を表示できます。
kubectl get brokers -n NAMESPACE
Cloud Run for Anthos イベント レシーバー サービスをデプロイする
イベント ブローカーからイベントを受信する Cloud Run for Anthos サービスをデプロイします。
Cloud Run for Anthos サービスをデプロイするには:
リポジトリのクローンを作成します。
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
コンテナをビルドして、Cloud Build にアップロードします。
gcloud builds submit \ --tag gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
コンテナ イメージを Cloud Run for Anthos にデプロイします。
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
を使用してイベントを生成できます。
イベント ブローカーの名前空間に 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 はイベント ブローカーと同じ名前空間です。
次のコマンドを実行して、Pod が正しく機能していることを確認します。
kubectl get pod curl -n NAMESPACE
ここで、NAMESPACE はイベント ブローカーと同じ名前空間です。
curl という Pod が稼働中(Status=Running)であることが表示されます。
イベント ブローカーのトリガーを作成する
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 サービスに送信されます。任意の数の CloudEvents 属性と拡張機能に完全一致フィルタリングを使用できます。フィルタで複数の属性を設定する場合、イベントがすべての属性に一致する必要があります。
トリガーが設定されていることを確認します。
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 リクエストを送信します。
HTTP リクエストを送信するイベント ブローカーの URL を取得します。
kubectl get brokers default \ --namespace NAMESPACE \ --output jsonpath="{.status.address.url}"
HTTP リクエストを送信するときに使用するため、ブローカーの URL をメモします。
Pod に SSH で接続します。
kubectl --namespace NAMESPACE attach curl -it
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 レシーバー サービスのログでイベントを確認します。
ログを表示するには、次のように入力します。
gcloud logging read "resource.type=k8s_container \ resource.labels.namespace_name=events \ resource.labels.container_name=user-container"
クリーンアップ
定期的な課金が発生しないように、このチュートリアルで作成したリソースを削除します。
Pod を削除します。
kubectl delete pod curl --namespace >NAMESPACE
トリガーを削除します。
gcloud beta events triggers delete TRIGGER_NAME \ --namespace >NAMESPACE