全部产品
Search
文档中心

CloudOps Orchestration Service:ACS::ExecuteHttpRequest

更新时间:Jul 06, 2025

Deskripsi

Tindakan ACS::ExecuteHttpRequest memungkinkan Anda untuk memanggil permintaan HTTP/HTTPS eksternal selama tugas operasi dan pemeliharaan (O&M) guna memfasilitasi interaksi antara tugas O&M sumber daya cloud dan layanan HTTP eksternal.

Tindakan ACS::ExecuteHttpRequest dapat digunakan dalam skenario berikut:

  1. Integrasi API: Gunakan tindakan ACS::ExecuteHttpRequest untuk memanggil API layanan pihak ketiga guna menanyakan informasi, melakukan operasi, atau mengintegrasikan layanan pihak ketiga.

  2. Notifikasi Kustom: Kirimkan notifikasi pada tahap tertentu selama eksekusi skrip dengan menggunakan tindakan ACS::ExecuteHttpRequest untuk mengirimkan permintaan HTTP ke webhook atau layanan notifikasi yang ditentukan. Notifikasi dapat dikirim melalui email, pesan teks, atau pemberitahuan push.

  3. Pengumpulan dan Pelaporan Data: Gunakan tindakan ACS::ExecuteHttpRequest untuk mengirimkan informasi tentang tugas O&M ke server jarak jauh atau platform data untuk tujuan audit, pemantauan, dan pelaporan.

  4. Pemicuan Proses Otomatis: Gunakan tindakan ACS::ExecuteHttpRequest untuk memicu eksekusi alat atau skrip otomatis lainnya saat template CloudOps Orchestration Service (OOS) sedang dieksekusi. Sebagai contoh, mulai proses penyebaran dalam sistem integrasi berkelanjutan atau penyebaran berkelanjutan (CI/CD) atau jalankan tugas O&M di sistem eksternal lainnya.

  5. Verifikasi dan Otorisasi Eksternal: Selama proses O&M, mungkin diperlukan untuk mengotentikasi identitas dan memverifikasi izin operasi. Dalam hal ini, gunakan tindakan ACS::ExecuteHttpRequest untuk mengirimkan permintaan ke sistem autentikasi eksternal guna memverifikasi identitas operator atau memeriksa izin operasi yang diperlukan.

  6. Menunggu Penyelesaian Tugas Asinkron atau Memverifikasi Hasil Panggilan: Dalam skenario di mana permintaan HTTP melibatkan tugas asinkron, Anda perlu memeriksa polling dan memverifikasi bidang tertentu dalam respons atau hasil panggilan. Gunakan bidang WaitFor/CheckFor untuk mengimplementasikan persyaratan ini.

Sintaksis

Tasks:
  - Name: executeHttpRequestExample
    Action: ACS::ExecuteHttpRequest
    Properties:
      Method: POST # Opsional. Metode HTTP yang digunakan untuk mengirimkan permintaan. Nilai valid: POST dan GET. Nilai default: POST.
      URL: 'https://example.com' # Wajib. URL HTTP yang digunakan untuk menentukan lokasi sumber daya tertentu.
      Headers: # Opsional. Header permintaan HTTP.
        Content-Type: 'application/json'
      Query: # Opsional. Parameter permintaan HTTP.
        Parameter1: value1
        Parameter2: value2
      Body: # Opsional. Badan permintaan HTTP. Parameter ini hanya valid jika metode HTTP adalah POST.
        Parameter3: value3
        Parameter4: value4
      CheckFor: # Opsional. Memverifikasi hasil respons HTTP.
        # Anda dapat menambahkan beberapa kelompok perbandingan di bawah Rules. Hubungan antar kelompok adalah "AND".
        Rules:
          - PropertySelector: "jq selector" # Sintaksis JQ
            Operator: "Equals" # Operator perbandingan. Nilai valid: "Equals", "In", "NotIn"
            Value: "1" # Nilai yang diharapkan
      WaitFor: # Opsional. Melakukan polling dan memverifikasi hasil respons HTTP.
        # Aturan sama seperti di atas
        Rules:
          - PropertySelector: "jq selector" 
            Operator: "Equals"
            Value: "1"
        FailRules:
        # Ketika kondisi terpenuhi, tugas gagal segera
          - PropertySelector: "jq selector" 
            Operator: "Equals"
            Value: "1"
        # Modul Retry mengonfigurasi parameter terkait retry
        Retry:
          Retries: # Opsional. Jumlah maksimum percobaan ulang. Nilainya harus bilangan bulat positif, seperti 5. Nilai valid: 0 hingga 300. Nilai default: 10.
          DelayType: # Eksponensial(Default), Konstan, Linier. Untuk jenis Eksponensial, interval retry adalah: 2 ^ kali(jumlah retry); Untuk jenis Konstan, interval retry tetap pada Delay; Untuk jenis Linier, interval retry adalah: Delay + BackOff * kali(jumlah retry).
          Delay: # Interval retry. Nilainya harus bilangan bulat positif, seperti 10. Nilai 10 menunjukkan bahwa interval retry adalah 10 detik. Nilai valid: 1 hingga 3600. Nilai default: 2. Parameter ini wajib jika atribut DelayType disetel ke Konstan atau Linier.
          BackOff: # Kompensasi interval retry. Nilainya harus bilangan bulat positif. Nilai valid: 1 hingga 3600. Nilai default: 2. Parameter ini wajib jika atribut DelayType disetel ke Linier.
          MaxRetryInterval: # Interval retry maksimum. Nilainya harus bilangan bulat positif. Nilai valid: 1 hingga 1800. Nilai default: 1800. Satuan: detik.
    Outputs:
      OutputParameter1:
        ValueSelector: 'jq selector' # Pemilih jQuery untuk memilih data yang akan dikembalikan. Pemilih jQuery mengekstrak informasi dari data JSON yang dikembalikan oleh operasi API. Untuk informasi lebih lanjut tentang sintaksis jq, kunjungi https://stedolan.github.io/jq/.
        Type: String/Boolean/List/Number/Object
{
  "Tasks": [
    {
      "Name": "executeHttpRequestExample",
      "Action": "ACS::ExecuteHttpRequest",
      "Properties": {
        "Method": "POST",
        "URL": "https://example.com",
        "Headers": {
          "Content-Type": "application/json"
        },
        "Query": {
          "Parameter1": "value1",
          "Parameter2": "value2"
        },
        "Body": {
          "Parameter3": "value3",
          "Parameter4": "value4"
        },
        "CheckFor": {
          "Rules": [
            {
              "PropertySelector": "jq selector",
              "Operator": "Equals",
              "Value": "1"
            }
          ]
        },
        "WaitFor": {
          "Rules": [
            {
              "PropertySelector": "jq selector",
              "Operator": "Equals",
              "Value": "1"
            }
          ],
          "FailRules": [
            {
              "PropertySelector": "jq selector",
              "Operator": "Equals",
              "Value": "1"
            }
          ],
          "Retry": {
            "Retries": null,
            "DelayType": null,
            "Delay": null,
            "BackOff": null,
            "MaxRetryInterval": null
          }
        }
      },
      "Outputs": {
        "OutputParameter1": {
          "ValueSelector": "jq selector",
          "Type": "String/Boolean/List/Number/Object"
        }
      }
    }
  ]
}

Contoh

Kode sampel berikut menunjukkan cara mengirimkan permintaan HTTP untuk menentukan cabang kode yang akan digunakan dalam template OOS yang digunakan untuk menyebarkan instance Elastic Compute Service (ECS) tertentu dengan memicu GitHub Actions:

FormatVersion: OOS-2019-06-01
Description: 
    en: Template OOS untuk menyebarkan instance ECS menggunakan GitHub Actions.
     
Parameters:
  regionId:
    Type: String
    Label:
      en: RegionId
       
    AssociationProperty: RegionId
    Default: '{{ ACS::RegionId }}'
  targets:
    Type: Json
    Label:
      en: TargetInstance
       
    AssociationProperty: Targets
    AssociationPropertyMetadata:
      ResourceType: ALIYUN::ECS::Instance
      RegionId: regionId
      Status: Running
  gitHubBranch:
    Type: String
    Description:
        en: Cabang tempat penyebaran akan dilakukan.
         
Tasks:
  - Name: getInstance
    Description:
      en: Menampilkan instance ECS
       
    Action: ACS::SelectTargets
    Properties:
      ResourceType: ALIYUN::ECS::Instance
      RegionId: '{{ regionId }}'
      Filters:
        - '{{ targets }}'
    Outputs:
      instanceIds:
        Type: List
        ValueSelector: Instances.Instance[].InstanceId
  - Name: DeployCodeByGitHubAction
    Action: ACS::ExecuteHttpRequest
    Properties:
      Method: POST
      URL: "https://api.github.com/repos/<YOUR-GITHUB-ACCOUNT>/<YOUR-GITHUB-REPO>/actions/workflows/<YOUR-WORKFLOW-ID>/dispatches"
      Headers:
        Accept: application/vnd.github+json
        Authorization: "Bearer <YOUR-TOKEN>"
        X-GitHub-Api-Version: 2022-11-28
      Body: 
        ref: "{{gitHubBranch}}"
        inputs:
          instance_ids: "{{getInstance.instanceIds}}"
{
  "FormatVersion": "OOS-2019-06-01",
  "Description": {
    "en": "Template OOS untuk menyebarkan instance ECS menggunakan GitHub Actions.",
     
  },
  "Parameters": {
    "regionId": {
      "Type": "String",
      "Label": {
        "en": "RegionId",
         
      },
      "AssociationProperty": "RegionId",
      "Default": "{{ ACS::RegionId }}"
    },
    "targets": {
      "Type": "Json",
      "Label": {
        "en": "TargetInstance",
         
      },
      "AssociationProperty": "Targets",
      "AssociationPropertyMetadata": {
        "ResourceType": "ALIYUN::ECS::Instance",
        "RegionId": "regionId",
        "Status": "Running"
      }
    },
    "gitHubBranch": {
      "Type": "String",
      "Description": {
        "en": "Cabang tempat penyebaran akan dilakukan.",
         
      }
    }
  },
  "Tasks": [
    {
      "Name": "getInstance",
      "Description": {
        "en": "Menampilkan instance ECS",
         
      },
      "Action": "ACS::SelectTargets",
      "Properties": {
        "ResourceType": "ALIYUN::ECS::Instance",
        "RegionId": "{{ regionId }}",
        "Filters": [
          "{{ targets }}"
        ]
      },
      "Outputs": {
        "instanceIds": {
          "Type": "List",
          "ValueSelector": "Instances.Instance[].InstanceId"
        }
      }
    },
    {
      "Name": "DeployCodeByGitHubAction",
      "Action": "ACS::ExecuteHttpRequest",
      "Properties": {
        "Method": "POST",
        "URL": "https://api.github.com/repos/<YOUR-GITHUB-ACCOUNT>/<YOUR-GITHUB-REPO>/actions/workflows/<YOUR-WORKFLOW-ID>/dispatches",
        "Headers": {
          "Accept": "application/vnd.github+json",
          "Authorization": "Bearer <YOUR-TOKEN>",
          "X-GitHub-Api-Version": "2022-11-28T00:00:00.000Z"
        },
        "Body": {
          "ref": "{{gitHubBranch}}",
          "inputs": {
            "instance_ids": "{{getInstance.instanceIds}}"
          }
        },
        "Query": {}
      }
    }
  ]
}