ワークフロークラスターを Alibaba Cloud Simple Message Queue (旧 MNS) と統合できます。Simple Message Queue (旧 MNS) をメッセージブローカーとして使用してさまざまなイベントソースに接続することで、イベント駆動型でワークフローをトリガーできます。Object Storage Service (OSS) や EventBridge からのイベントなど、新しいイベントが発生すると、Simple Message Queue (旧 MNS) はメッセージを受信します。メッセージが定義されたイベントトリガー条件を満たす場合、Argo は自動的にワークフローを実行します。
前提条件
次のサービスと機能が有効になっている必要があります。
Simple Message Queue (旧称:MNS) のアクティブ化と権限の付与。この機能では、Simple Message Queue (旧称:MNS) の料金が発生します。詳細については、「課金」をご参照ください。
ワークフロークラスターを作成し、Alibaba Cloud Argo CLI をダウンロードしておく必要があります。
ステップ 1:EventBus の作成
EventBus は、名前空間内のイベント駆動型のワークフローで共有できます。NATS または Simple Message Queue (旧称:MNS) を使用して EventBus を作成できます。すでに EventBus を作成している場合は、「ステップ 2:EventSource の作成」に進んでください。
NATS
-
event-bus.yamlファイルを作成します。設定例:apiVersion: argoproj.io/v1alpha1 kind: EventBus metadata: name: default spec: nats: native: replicas: 3 auth: token -
次のコマンドを実行して EventBus を作成します:
kubectl apply -f event-bus.yaml説明コマンドが成功すると、
default名前空間に EventBus Pod が作成されます。以降の操作は同じ名前空間で実行する必要があります。 -
次のコマンドを実行して EventBus Pod が起動したことを確認します:
kubectl get pod
MNS
- MNS コンソールにログインします。
[トピック] ページで、argoeventbus という名前のトピックを作成します。次に、[トピック詳細] ページで、エンドポイント セクションからエンドポイントを取得します。
管理者権限を持つ RAM ユーザーとして RAM コンソールにログオンします。
RAM ユーザーを作成し、
AliyunMNSFullAccess権限を付与して、RAM ユーザーのアクセスキー ID とアクセスキーシークレットを取得します。詳細については、「RAM ユーザーの作成」、「RAM ユーザーの権限管理」、「AccessKey の作成」、および「RAM ユーザーの AccessKey 情報を表示」をご参照ください。
次のコマンドを実行して、AccessKey ID と AccessKey secret を格納する Secret を作成します。
kubectl create secret generic mns-secret\ --from-literal=accesskey=*** \ --from-literal=secretkey=***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) のエンドポイント。次のコマンドを実行して、
event-bus-mns.yamlファイルを適用し、EventBus リソースを作成します。kubectl apply -f event-bus-mns.yaml
ステップ 2:EventSource の作成
- MNS コンソールにログインします。
キュー ページで、test-event-queue という名前のキューを作成します。次に、キューの詳細 ページで、エンドポイント セクションからエンドポイントを取得します。
説明Simple Message Queue (旧称:MNS) で EventBus を作成した場合は、ステップ 3 から 5 をスキップして ステップ 6 に進むことができます。
管理権限を持つ RAM ユーザーとして、RAM コンソールにログインします。
RAM ユーザーを作成し、その RAM ユーザーに
AliyunMNSFullAccess権限を付与し、RAM ユーザーの AccessKey ID と AccessKey secret を取得します。詳細については、「RAM ユーザーの作成」、「RAM ユーザーの権限管理」、「AccessKey の作成」、および「RAM ユーザーの AccessKey 情報を表示」をご参照ください。
次のコマンドを実行して、AccessKey ID と AccessKey secret を格納する Secret を作成します。
kubectl create secret generic mns-secret\ --from-literal=accesskey=*** \ --from-literal=secretkey=***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) のエンドポイント。次のコマンドを実行して、
event-source.yamlファイルを適用し、EventSource リソースを作成します。kubectl apply -f event-source.yaml次のコマンドを実行して、EventSource Pod が正常に起動したことを確認します。
kubectl get pod
ステップ 3:Sensor の作成
event-sensor.yamlファイルを作成し、イベントセンサー内にワークフロー定義を埋め込みます。以下にイベントセンサーの設定例を示します。event-sensor.yamlファイルを適用して Sensor リソースを作成します。kubectl apply -f event-sensor.yaml次のコマンドを実行して、Sensor Pod が正常に起動したことを確認します。
kubectl get pod
Simple Message Queue (旧称:MNS) を使用して EventBus を作成した場合、Sensor の作成後に、対応する Simple Message Queue (旧称:MNS) キューが自動的に作成されます。キューの命名形式は ackone-argowf-<namespace>-<sensor-name>-<sensor-uid> です。
ステップ 4:ワークフローのトリガーテスト
- MNS コンソールにログインします。
キュー ページで、test-event-queue という名前のキューを見つけ、アクション 列の メッセージの送受信 をクリックします。
「メッセージの送信」ページで、メッセージ内容に
test trigger argo workflowを入力し、メッセージの送信 をクリックします。クラスター内のワークフローのステータスを確認します。
argo list期待される出力は次のとおりです。
NAME STATUS AGE DURATION PRIORITY ali-mns-workflow-5prz7 Running 6s 6s 0ワークフローのログを表示して、メッセージの内容を確認します。
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:リソースのクリーンアップ
リソースをクリーンアップします。
Sensor を削除します。
kubectl delete sensor ali-mnsEventSource を削除します。
kubectl delete eventsource ali-mnsEventBus を削除します。
kubectl delete eventbus default
Pod のステータスを確認し、関連するすべての Pod が終了したことを確認します。
kubectl get pod