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:
Integrasi API: Gunakan tindakan ACS::ExecuteHttpRequest untuk memanggil API layanan pihak ketiga guna menanyakan informasi, melakukan operasi, atau mengintegrasikan layanan pihak ketiga.
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.
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.
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.
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.
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": {}
}
}
]
}