All Products
Search
Document Center

Container Service for Kubernetes:Memicu alur kerja dengan mengunggah file ke OSS

Last Updated:Nov 11, 2025

Topik ini menjelaskan cara mengintegrasikan Alibaba Cloud Object Storage Service (OSS) dengan Simple Message Queue (formerly MNS) Alibaba Cloud. Anda dapat mengunggah file ke OSS untuk secara otomatis memicu alur kerja yang memproses file tersebut dan menghasilkan output.

Prasyarat

Langkah 1: Buat Event Bus

Alur kerja berbasis event dalam sebuah namespace dapat berbagi satu Event Bus. Jika Anda telah membuat Event Bus, Anda dapat melewati langkah ini dan melanjutkan ke Langkah 2: Buat Sumber Event.

Catatan
  • Saat Anda membuat Event Bus dengan Simple Message Queue (formerly MNS), Pod tidak akan dibuat.

  • Untuk menggunakan fitur Pemicu, Anda harus membuat EventBus menggunakan NATS. Metode Simple Message Queue (formerly MNS) tidak mendukung Pemicu Sensor Argo Events open source.

Metode 1: Gunakan NATS

  1. Buat file event-bus.yaml. Kode berikut merupakan contoh:

    apiVersion: argoproj.io/v1alpha1
    kind: EventBus
    metadata:
      name: default
    spec:
      nats:
        native:
          replicas: 3
          auth: token
  2. Jalankan perintah berikut untuk membuat EventBus.

    kubectl apply -f event-bus.yaml
    Catatan

    Setelah perintah berhasil dijalankan, sebuah Pod Event Bus akan dibuat di namespace default. Anda harus melakukan semua operasi selanjutnya di namespace yang sama.

  3. Jalankan perintah berikut untuk memverifikasi bahwa Pod Event Bus telah dimulai.

    kubectl get pod

Metode 2: Gunakan Simple Message Queue (formerly MNS)

  1. Masuk ke Konsol Simple Message Queue (formerly MNS).

  2. Pada halaman Topic List, buat topik bernama argoeventbus. Pada halaman Topic Details, peroleh Titik akhir dari bagian Endpoint.

  3. Buat Pengguna RAM, berikan izin AliyunMNSFullAccess kepada pengguna tersebut, lalu peroleh ID AccessKey dan Rahasia AccessKey pengguna tersebut.

  4. Jalankan perintah berikut untuk membuat Secret guna menyimpan ID AccessKey dan Rahasia AccessKey.

    kubectl create secret generic mns-secret\
      --from-literal=accesskey=*** \
      --from-literal=secretkey=***
  5. Buat file event-bus-mns.yaml. Kode berikut merupakan contoh:

    • topic: Ganti ini dengan nama topik Simple Message Queue (formerly MNS) yang telah Anda buat di Langkah 2.

    • endpoint: Ganti ini dengan Titik akhir yang telah Anda peroleh di Langkah 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  # Nama topik di Simple Message Queue (formerly MNS).
        endpoint: http://165***368.mns.<region>.aliyuncs.com
  6. Jalankan perintah berikut untuk menerapkan file event-bus-mns.yaml.

    kubectl apply -f event-bus-mns.yaml

Langkah 2: Buat Sumber Event

  1. Buat Pengguna RAM, berikan izin AliyunMNSFullAccess kepada pengguna tersebut, lalu peroleh ID AccessKey dan Rahasia AccessKey pengguna tersebut. Untuk informasi selengkapnya, lihat Buat Pengguna RAM, Berikan izin kepada Pengguna RAM, Buat Pasangan Kunci Akses, dan Lihat Informasi AccessKey Pengguna RAM.

  2. Buat file event-source.yaml. Kode berikut merupakan contoh:

    • queue: Ganti ini dengan nama antrian Simple Message Queue (formerly MNS).

    • endpoint: Ganti ini dengan titik akhir Simple Message Queue (formerly MNS).

    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: oss-event-queue # Nama antrian Simple Message Queue (formerly MNS).
          waitTimeSeconds: 20
          endpoint: http://165***368.mns.<region>.aliyuncs.com # Titik akhir Simple Message Queue (formerly MNS).
  3. Jalankan perintah berikut untuk membuat Sumber Event.

    kubectl apply -f event-source.yaml
  4. Jalankan perintah berikut untuk memverifikasi bahwa Pod Sumber Event telah dimulai.

    kubectl get pod

Langkah 3: Buat Sensor Event

  1. Buat file event-sensor.yaml dan sematkan definisi alur kerja ke dalam Sensor Event. Kode berikut merupakan contoh:

    Klik untuk melihat kode contoh

    apiVersion: argoproj.io/v1alpha1
    kind: Sensor
    metadata:
      name: process-oss-file
    spec:
      template:
        serviceAccountName: default
      dependencies:
        - name: dep1
          eventSourceName: ali-mns
          eventName: example
      triggers:
        - template:
            name: process-oss-file-workflow
            k8s:
              operation: create
              source:
                resource:
                  apiVersion: argoproj.io/v1alpha1
                  kind: Workflow
                  metadata:
                    generateName: process-oss-file-
                    namespace: default
                  spec:
                    entrypoint: process-oss-file
                    volumes:
                    - name: workdir
                      persistentVolumeClaim:
                        claimName: pvc-oss
                    arguments:
                      parameters:
                      - name: message
                        # this is the value that should be overridden
                        value: event message
                    templates:
                    - name: process-oss-file
                      steps:
                      - - name: parse-event-body
                          template: parse-event-body
                      - - name: process-file
                          template: process-file
                          arguments:
                            parameters:
                            - name: file-name
                              value: "{{steps.parse-event-body.outputs.parameters.file-name}}"
                    - name: parse-event-body
                      container:
                        image: acr-multiple-clusters-registry.cn-hangzhou.cr.aliyuncs.com/ack-multiple-clusters/jq-alpine
                        command: [sh, -c]
                        args:
                        - echo "Event body:";
                          echo {{workflow.parameters.message}} | base64 -d;
                          TriggerFileName=$(echo {{workflow.parameters.message}} | base64 -d | jq .events[0].oss.object.key | cut -c2- | rev | cut -c2- |rev);
                          echo "" && echo "TriggerFileName from event is $TriggerFileName";
                          Tmp=${TriggerFileName%%.complete} && DataFileName=${Tmp##*/};
                          echo "DataFileName after cutting .complete is $DataFileName, and pass file name to next step";
                          echo $DataFileName > /tmp/file-name.txt
                      outputs:
                        parameters:
                        - name: file-name
                          valueFrom:
                            path: /tmp/file-name.txt
                    - name: process-file
                      inputs:
                        parameters:
                          - name: file-name
                      container:
                        image: acr-multiple-clusters-registry.cn-hangzhou.cr.aliyuncs.com/ack-multiple-clusters/jq-alpine
                        imagePullPolicy: Always
                        command: [sh, -c]
                        args:
                        - echo "Show data-file:" && echo "";
                          ls -l /mnt/vol/{{inputs.parameters.file-name}};
                          echo "Content of data file:" && echo "";
                          cat /mnt/vol/{{inputs.parameters.file-name}} ;
                          echo "" && echo "Finished" ;
                        volumeMounts:
                        - name: workdir
                          mountPath: /mnt/vol
              parameters:
                - src:
                    dependencyName: dep1
                    dataKey: body
                  dest: spec.arguments.parameters.0.value
  2. Jalankan perintah berikut untuk membuat Sensor Event.

    kubectl apply -f event-sensor.yaml
  3. Jalankan perintah berikut untuk memverifikasi bahwa Pod Sensor Event telah dimulai.

    kubectl get pod
Catatan

Saat Anda membuat EventBus menggunakan Simple Message Queue (formerly MNS), sebuah antrian Simple Message Queue (formerly MNS) yang sesuai akan dibuat secara otomatis setelah Sensor Event dibuat. Antrian tersebut diberi nama dengan format berikut: ackone-argowf-<namespace>-<sensor-name>-<sensor-uid>.

Langkah 4: Verifikasi bahwa mengunggah file ke OSS memicu alur kerja

  1. Masuk ke Konsol OSS.

  2. Unggah dua file berikut ke bucket OSS untuk memicu alur kerja. Anda harus menyiapkan file-file ini terlebih dahulu.

    • datafile: File data dalam format teks dengan konten kustom.

    • datafile.complete: File pemicu. File ini bisa berupa file kosong.

  3. Jalankan perintah berikut di kluster alur kerja untuk melihat status alur kerja.

    argo list

    Output yang diharapkan adalah sebagai berikut:

    NAME STATUS AGE DURATION PRIORITY
    process-oss-file-kmb4k Running 13s 13s 0
  4. Jalankan perintah berikut untuk mengambil log alur kerja.

    argo logs process-oss-file-kmb4k
    Penting
    • Nama alur kerja dalam perintah harus sesuai dengan nama yang dikembalikan pada langkah sebelumnya. Nama ali-mns-workflow-5prz7 hanyalah contoh. Gantilah dengan nama aktual dari lingkungan Anda.

    • Konten pesan dikodekan dalam Base64.

    Output yang diharapkan adalah sebagai berikut:

    image.png

Langkah 5: Bersihkan sumber daya terkait event

  1. Jalankan perintah berikut untuk membersihkan sumber daya terkait event.

    kubectl delete sensor process-oss-file
    kubectl delete eventsource ali-mns
    kubectl delete eventbus default
  2. Jalankan perintah berikut untuk melihat Pod dan memastikan semua sumber daya telah dihapus.

    kubectl get pod