すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Simple Message Queue (旧称:MNS) を使用したワークフローのトリガー

最終更新日:Sep 17, 2026

ワークフロークラスターを Alibaba Cloud Simple Message Queue (旧 MNS) と統合できます。Simple Message Queue (旧 MNS) をメッセージブローカーとして使用してさまざまなイベントソースに接続することで、イベント駆動型でワークフローをトリガーできます。Object Storage Service (OSS) や EventBridge からのイベントなど、新しいイベントが発生すると、Simple Message Queue (旧 MNS) はメッセージを受信します。メッセージが定義されたイベントトリガー条件を満たす場合、Argo は自動的にワークフローを実行します。

前提条件

ステップ 1:EventBus の作成

EventBus は、名前空間内のイベント駆動型のワークフローで共有できます。NATS または Simple Message Queue (旧称:MNS) を使用して EventBus を作成できます。すでに EventBus を作成している場合は、「ステップ 2:EventSource の作成」に進んでください。

NATS

  1. event-bus.yaml ファイルを作成します。設定例:

    apiVersion: argoproj.io/v1alpha1
    kind: EventBus
    metadata:
      name: default
    spec:
      nats:
        native:
          replicas: 3
          auth: token
  2. 次のコマンドを実行して EventBus を作成します:

    kubectl apply -f event-bus.yaml
    説明

    コマンドが成功すると、default 名前空間に EventBus Pod が作成されます。以降の操作は同じ名前空間で実行する必要があります。

  3. 次のコマンドを実行して EventBus Pod が起動したことを確認します:

    kubectl get pod

MNS

  1. MNS コンソールにログインします。
  2. [トピック] ページで、argoeventbus という名前のトピックを作成します。次に、[トピック詳細] ページで、エンドポイント セクションからエンドポイントを取得します。

  3. 管理者権限を持つ RAM ユーザーとして RAM コンソールにログオンします。

  4. RAM ユーザーを作成し、AliyunMNSFullAccess 権限を付与して、RAM ユーザーのアクセスキー ID とアクセスキーシークレットを取得します。

    詳細については、「RAM ユーザーの作成」、「RAM ユーザーの権限管理」、「AccessKey の作成」、および「RAM ユーザーの AccessKey 情報を表示」をご参照ください。

  5. 次のコマンドを実行して、AccessKey ID と AccessKey secret を格納する Secret を作成します。

    kubectl create secret generic mns-secret\
      --from-literal=accesskey=*** \
      --from-literal=secretkey=***
  6. event-bus-mns.yaml ファイルを作成し、例のプレースホルダー値を独自の値に置き換えます。

    • topic: この値を ステップ 2 で作成した Simple Message Queue (旧 MNS) トピックの名前に置き換えます。

    • endpoint: ステップ 2 で取得したエンドポイントに置き換えます。

    apiVersion: argoproj.io/v1alpha1
    kind: EventBus
    metadata:
      name: default
    spec:
      alimns:
        accessKey:
          key: accesskey
          name: mns-secret
        secretKey:
          key: secretkey
          name: mns-secret
        topic: argoeventbus  # Simple Message Queue (旧称:MNS) のトピック名。
        endpoint: http://165***368.mns.<region>.aliyuncs.com  # Simple Message Queue (旧称:MNS) のエンドポイント。
  7. 次のコマンドを実行して、event-bus-mns.yaml ファイルを適用し、EventBus リソースを作成します。

    kubectl apply -f event-bus-mns.yaml

ステップ 2:EventSource の作成

  1. MNS コンソールにログインします。
  2. キュー ページで、test-event-queue という名前のキューを作成します。次に、キューの詳細 ページで、エンドポイント セクションからエンドポイントを取得します。

    説明

    Simple Message Queue (旧称:MNS) で EventBus を作成した場合は、ステップ 3 から 5 をスキップして ステップ 6 に進むことができます。

  3. 管理権限を持つ RAM ユーザーとして、RAM コンソールにログインします。

  4. RAM ユーザーを作成し、その RAM ユーザーに AliyunMNSFullAccess 権限を付与し、RAM ユーザーの AccessKey ID と AccessKey secret を取得します。

    詳細については、「RAM ユーザーの作成」、「RAM ユーザーの権限管理」、「AccessKey の作成」、および「RAM ユーザーの AccessKey 情報を表示」をご参照ください。

  5. 次のコマンドを実行して、AccessKey ID と AccessKey secret を格納する Secret を作成します。

    kubectl create secret generic mns-secret\
      --from-literal=accesskey=*** \
      --from-literal=secretkey=***
  6. event-source.yaml ファイルを作成し、サンプル内のプレースホルダー値を独自の値に置き換えます。

    • queue: この値は、ステップ 2 で作成した Simple Message Queue (旧 MNS) キューの名前に置き換えます。

    • endpoint: この値を、ステップ 2 で取得したエンドポイントに置き換えます。

    apiVersion: argoproj.io/v1alpha1
    kind: EventSource
    metadata:
      name: ali-mns
    spec:
      mns:
        example:
          jsonBody: true
          accessKey:
            key: accesskey
            name: mns-secret
          secretKey:
            key: secretkey
            name: mns-secret
          queue: test-event-queue # Simple Message Queue (旧称:MNS) のキュー名。
          waitTimeSeconds: 20
          endpoint: http://165***368.mns.<region>.aliyuncs.com # Simple Message Queue (旧称:MNS) のエンドポイント。
  7. 次のコマンドを実行して、event-source.yaml ファイルを適用し、EventSource リソースを作成します。

    kubectl apply -f event-source.yaml
  8. 次のコマンドを実行して、EventSource Pod が正常に起動したことを確認します。

    kubectl get pod

ステップ 3:Sensor の作成

  1. event-sensor.yaml ファイルを作成し、イベントセンサー内にワークフロー定義を埋め込みます。以下にイベントセンサーの設定例を示します。

    サンプルコード

    apiVersion: argoproj.io/v1alpha1
    kind: Sensor
    metadata:
      name: ali-mns
    spec:
      template:
        serviceAccountName: default
      dependencies:
        - name: test-dep
          eventSourceName: ali-mns    # EventSource 名と一致させます。
          eventName: example          # EventSource で定義されたイベント名と一致させます。
      triggers:
        - template:
            name: mns-workflow
            k8s:
              operation: create
              source:
                resource:
                  apiVersion: argoproj.io/v1alpha1    # ワークフロー定義を埋め込みます。
                  kind: Workflow
                  metadata:
                    generateName: ali-mns-workflow-
                  spec:
                    entrypoint: whalesay
                    arguments:
                      parameters:        # イベントの内容を渡します。
                        - name: message
                          # この値は上書きされます
                          value: hello world
                    templates:
                      - name: whalesay
                        inputs:
                          parameters:
                            - name: message
                        container:
                          image: docker/whalesay:latest
                          command: [cowsay]
                          args: ["{{inputs.parameters.message}}"]
              parameters:
                - src:        # イベントの内容を解析し、ワークフローに渡します。
                    dependencyName: test-dep
                    dataKey: body
                  dest: spec.arguments.parameters.0.value
  2. event-sensor.yaml ファイルを適用して Sensor リソースを作成します。

    kubectl apply -f event-sensor.yaml
  3. 次のコマンドを実行して、Sensor Pod が正常に起動したことを確認します。

    kubectl get pod
説明

Simple Message Queue (旧称:MNS) を使用して EventBus を作成した場合、Sensor の作成後に、対応する Simple Message Queue (旧称:MNS) キューが自動的に作成されます。キューの命名形式は ackone-argowf-<namespace>-<sensor-name>-<sensor-uid> です。

ステップ 4:ワークフローのトリガーテスト

  1. MNS コンソールにログインします。
  2. キュー ページで、test-event-queue という名前のキューを見つけ、アクション 列の メッセージの送受信 をクリックします。

  3. 「メッセージの送信」ページで、メッセージ内容に test trigger argo workflow を入力し、メッセージの送信 をクリックします。

  4. クラスター内のワークフローのステータスを確認します。

    argo list

    期待される出力は次のとおりです。

    NAME                     STATUS    AGE   DURATION   PRIORITY
    ali-mns-workflow-5prz7   Running   6s    6s         0
  5. ワークフローのログを表示して、メッセージの内容を確認します。

    argo logs ali-mns-workflow-5prz7
    重要
    • コマンド内のワークフロー名は、前の手順で返された名前と同じである必要があります。ali-mns-workflow-5prz7 は一例です。実際の環境の名前に置き換えてください。

    • メッセージの内容は Base64 エンコードされています。

    期待される出力は次のとおりです。

    ali-mns-workflow-5prz7-whalesay-2429203954: time="2023-12-14T08:33:37.964Z" level=info msg="capturing logs" argo=true
    ali-mns-workflow-5prz7-whalesay-2429203954:
    ali-mns-workflow-5prz7-whalesay-2429203954:  < dGVzdCB0cmlnZ2VyIGFyZ28gd29ya2Zsb3c= >
    ali-mns-workflow-5prz7-whalesay-2429203954:  -----------------------------------------
    ali-mns-workflow-5prz7-whalesay-2429203954:     \
    ali-mns-workflow-5prz7-whalesay-2429203954:      \
    ali-mns-workflow-5prz7-whalesay-2429203954:       \
    ali-mns-workflow-5prz7-whalesay-2429203954:                     ##        .
    ali-mns-workflow-5prz7-whalesay-2429203954:               ## ## ##       ==
    ali-mns-workflow-5prz7-whalesay-2429203954:            ## ## ## ##      ===
    ali-mns-workflow-5prz7-whalesay-2429203954:        /""""""""""""""""___/ ===
    ali-mns-workflow-5prz7-whalesay-2429203954:   ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
    ali-mns-workflow-5prz7-whalesay-2429203954:        \______ o          __/
    ali-mns-workflow-5prz7-whalesay-2429203954:         \    \        __/
    ali-mns-workflow-5prz7-whalesay-2429203954:           \____\______/
    ali-mns-workflow-5prz7-whalesay-2429203954: time="2023-12-14T08:33:38.979Z" level=info msg="sub-process exited" argo=true error="<nil>"

ステップ 5:リソースのクリーンアップ

  1. リソースをクリーンアップします。

    • Sensor を削除します。

      kubectl delete sensor ali-mns
    • EventSource を削除します。

      kubectl delete eventsource ali-mns
    • EventBus を削除します。

      kubectl delete eventbus default
  2. Pod のステータスを確認し、関連するすべての Pod が終了したことを確認します。

    kubectl get pod