Lacak operasi Azure asinkron
Beberapa operasi Azure REST berjalan secara asinkron karena operasi tidak dapat diselesaikan dengan cepat. Artikel ini menjelaskan cara melacak status operasi asinkron melalui nilai yang dikembalikan dengan respons.
Kode status untuk operasi asinkron
Operasi asinkron awalnya mengembalikan kode status HTTP baik itu:
- 201 (Dibuat)
- 202 (Diterima)
Namun, kode status itu tidak berarti operasinya adalah asinkron. Operasi asinkron juga mengembalikan nilai untuk provisioningState
yang menunjukkan operasi belum selesai. Nilai dapat bervariasi menurut operasi tetapi tidak menyertakan Berhasil, Gagal, atau Dibatalkan. Ketiga nilai tersebut menunjukkan operasi selesai. Jika tidak ada nilai yang dikembalikan untuk provisioningState
, operasi selesai dan berhasil.
Ketika operasi berhasil diselesaikan, operasi akan kembali baik itu:
- 200 (OK)
- 204 (Tidak Ada Konten)
Lihat dokumentasi REST API untuk melihat respons atas operasi yang Anda jalankan.
Setelah mendapatkan kode respons 201 atau 202, Anda siap untuk memantau status operasi.
URL untuk memantau status
Ada dua cara berbeda untuk memantau status operasi asinkron. Anda menentukan pendekatan yang benar dengan memeriksa nilai header yang dikembalikan dari permintaan asli Anda. Pertama, cari:
Azure-AsyncOperation
- URL untuk memeriksa status operasi yang sedang berlangsung. Jika operasi Anda mengembalikan nilai ini, gunakan untuk melacak status operasi.Retry-After
- Jumlah detik untuk menunggu sebelum memeriksa status operasi asinkron.
Jika Azure-AsyncOperation
bukan salah satu nilai header, lalu cari:
Location
- URL untuk menentukan kapan operasi selesai. Gunakan nilai ini hanya jikaAzure-AsyncOperation
tidak dikembalikan.Retry-After
- Jumlah detik untuk menunggu sebelum memeriksa status operasi asinkron.
Retry-after
Saat header tidak dikembalikan, terapkan logika coba lagi Anda sendiri.
Catatan
Klien REST Anda harus menerima ukuran URL minimum 4 KB untuk Azure-AsyncOperation
dan Location
.
Izin untuk melacak status asinkron
Untuk melacak status operasi asinkron, Anda memerlukan izin yang memadai di tingkat grup sumber daya. Jika Anda hanya memiliki izin di tingkat sumber daya, Anda dapat memulai operasi tetapi Anda tidak dapat melacak statusnya. Izin di tingkat grup sumber daya diperlukan karena URL untuk status pelacakan tidak terlingkup ke sumber daya.
Misalnya, untuk memulai komputer virtual, Anda memerlukan peran Kontributor Komputer Virtual untuk grup sumber daya yang berisi komputer virtual. URL untuk melacak permintaan mulai tidak menyertakan komputer virtual di jalurnya.
GET
https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Compute/locations/{region}/operations/{operation-id}?api-version=2019-12-01
Permintaan dan respons Azure-AsyncOperation
Jika Anda memiliki URL dari nilai Azure-AsyncOperation
header, kirim permintaan GET ke URL tersebut. Gunakan nilai dari Retry-After
untuk menjadwalkan seberapa sering memeriksa status. Anda mendapatkan objek respons yang menunjukkan status operasi. Respons yang berbeda kembali saat memeriksa status operasi dengan Location
URL. Untuk informasi selengkapnya tentang respons dari URL lokasi, lihat Buat akun penyimpanan (202 dengan Lokasi dan Coba Lagi Setelahnya).
Properti respons dapat bervariasi tetapi selalu menyertakan status operasi asinkron.
{
"status": "{status-value}"
}
Contoh berikut ini memperlihatkan nilai lain yang mungkin kembali dari operasi:
{
"id": "{resource path from GET operation}",
"name": "{operation-id}",
"status" : "Succeeded | Failed | Canceled | {resource provider values}",
"startTime": "2017-01-06T20:56:36.002812+00:00",
"endTime": "2017-01-06T20:56:56.002812+00:00",
"percentComplete": {double between 0 and 100 },
"properties": {
/* Specific resource provider values for successful operations */
},
"error" : {
"code": "{error code}",
"message": "{error description}"
}
}
Objek kesalahan kembali ketika status Gagal atau Dibatalkan. Semua nilai lain bersifat opsional. Respons yang Anda terima mungkin terlihat berbeda dari contoh.
nilai provisioningState
Operasi yang membuat, memperbarui, atau menghapus (PUT, PATCH, DELETE) sumber daya biasanya mengembalikan nilai provisioningState
. Saat operasi selesai, salah satu dari tiga nilai berikut dikembalikan:
- Berhasil
- Gagal
- Dibatalkan
Semua nilai lain mengindikasikan operasi masih berjalan. Penyedia sumber daya dapat mengembalikan nilai yang dikustomisasi yang menunjukkan statusnya. Misalnya, Anda menerima Diterima saat permintaan diterima dan berjalan.
Contoh permintaan dan respons
Jalankan komputer virtual (202 dengan Azure-AsyncOperation)
Contoh ini menunjukkan cara menentukan status operasi mulai untuk komputer virtual. Permintaan awal dalam format berikut:
POST
https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Compute/virtualMachines/{vm-name}/start?api-version=2019-12-01
Ini mengembalikan kode status 202. Di antara nilai header, Anda akan melihat:
Azure-AsyncOperation : https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Compute/locations/{region}/operations/{operation-id}?api-version=2019-12-01
Untuk memeriksa status operasi asinkron, kirim permintaan lain ke URL tersebut.
GET
https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Compute/locations/{region}/operations/{operation-id}?api-version=2019-12-01
Isi respons memuat status operasi:
{
"startTime": "2017-01-06T18:58:24.7596323+00:00",
"status": "InProgress",
"name": "9a062a88-e463-4697-bef2-fe039df73a02"
}
Terapkan sumber daya (201 dengan Azure-AsyncOperation)
Contoh ini menunjukkan cara menentukan status operasi penyebaran untuk menerapkan sumber daya ke Azure. Permintaan awal dalam format berikut:
PUT
https://management.azure.com/subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/microsoft.resources/deployments/{deployment-name}?api-version=2020-06-01
Ini mengembalikan kode status 201. Isi respons meliputi:
"provisioningState":"Accepted",
Di antara nilai header, Anda akan melihat:
Azure-AsyncOperation: https://management.azure.com/subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/Microsoft.Resources/deployments/{deployment-name}/operationStatuses/{operation-id}?api-version=2020-06-01
Untuk memeriksa status operasi asinkron, kirim permintaan lain ke URL tersebut.
GET
https://management.azure.com/subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/Microsoft.Resources/deployments/{deployment-name}/operationStatuses/{operation-id}?api-version=2020-06-01
Isi respons memuat status operasi:
{
"status": "Running"
}
Setelah penyebaran selesai, respons berisi:
{
"status": "Succeeded"
}
Buat akun penyimpanan (202 dengan Lokasi dan Coba Lagi-Setelah)
Contoh ini menunjukkan cara menentukan status operasi buat untuk akun penyimpanan. Permintaan awal dalam format berikut:
PUT
https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Storage/storageAccounts/{storage-name}?api-version=2019-06-01
Dan isi permintaan memuat properti untuk akun penyimpanan:
{
"location": "South Central US",
"properties": {},
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage"
}
Ini mengembalikan kode status 202. Di antara nilai header, Anda akan melihat dua nilai berikut ini:
Location: https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Storage/operations/{operation-id}?monitor=true&api-version=2019-06-01
Retry-After: 17
Setelah menunggu jumlah detik yang ditentukan dalam Coba Lagi-Setelah, periksa status operasi asinkron dengan mengirim permintaan lain ke URL tersebut.
GET
https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Storage/operations/{operation-id}?monitor=true&api-version=2019-06-01
Jika permintaan masih berjalan, Anda akan menerima kode status 202. Jika permintaan selesai, Anda akan menerima kode status 200. Isi respons berisi properti akun penyimpanan yang dibuat.
Langkah berikutnya
- Untuk dokumentasi tentang setiap operasi REST, lihat dokumentasi REST API.
- Untuk informasi tentang menerapkan templat melalui Resource Manager REST API, lihat Terapkan sumber daya dengan templat Resource Manager dan Resource Manager REST API.