Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pelajari cara menyediakan, mengonfigurasi, dan mengelola sumber daya Azure secara terprogram dengan menggunakan pustaka manajemen Azure SDK untuk Go. Alur kerja sarana kontrol umum termasuk membuat grup sumber daya, mengelola infrastruktur penyimpanan dan jaringan, dan menangani operasi siklus hidup komputer virtual (VM) seperti membuat, memulai, menghentikan, mengubah ukuran, memperbarui, dan menghapus. Jika Anda menginginkan pengenalan tingkat yang lebih tinggi tentang bagaimana pustaka manajemen cocok dengan Azure SDK untuk Go, mulailah dengan Gambaran umum Azure SDK untuk pustaka manajemen Go. Artikel ini berfokus pada pola rancangan kontrol Go yang Anda gunakan kembali di seluruh layanan, dan menghubungkan ke panduan pesawat data ketika jalur runtime beralih dari manajemen sumber daya ke penanganan data layanan.
Apa itu lapisan kontrol Azure?
Sarana kontrol Azure adalah sekumpulan API yang mengontrol siklus hidup sumber daya Azure - membuat, memperbarui, mengonfigurasi, dan menghapusnya. Setiap operasi yang Anda lakukan di portal Azure, Azure CLI, atau alat infrastruktur sebagai kode pada akhirnya memanggil API sarana kontrol ini.
Azure SDK untuk Go mengekspos sarana kontrol melalui keluarga paket arm* di bawah github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/. Setiap paket memetakan ke penyedia sumber daya Azure dan mengikuti pola yang konsisten:
- Autentikasi dengan menggunakan
azidentitypaket. - Buat klien yang ditik untuk sumber daya yang ingin Anda kelola.
- Panggil metode pada klien untuk membuat, membaca, memperbarui, atau menghapus sumber daya.
- Tangani operasi jangka panjang dengan menggunakan poller.
Skenario umum untuk otomatisasi sarana kontrol Go meliputi:
- Penyediaan infrastruktur untuk alur penyebaran
- Mengelola operasi siklus hidup VM seperti membuat, memperbarui, menghapus, memulai, menghentikan, dan mengubah ukuran
- Membangun CLI dan operator kustom untuk tim platform
- Menerapkan rekonsiliasi infrastruktur bergaya GitOps
- Mengotomatiskan audit kepatuhan dan deteksi penyimpangan
Authentication
Semua operasi manajemen memerlukan kredensial terautentikasi dari paket azidentity. Paket ini menyediakan jenis kredensial untuk setiap lingkungan termasuk pengembangan lokal, alur CI/CD, dan beban kerja produksi yang berjalan di Azure. Semua jenis kredensial menerapkan antarmuka yang sama azcore.TokenCredential , sehingga Anda dapat menukarnya tanpa mengubah kode klien.
Setelah Anda mendapatkan kredensial, buat fabrikasi klien untuk paket tersebut lalu tanyakan kepada klien bertipe yang Anda butuhkan.
// Create credential that auto-discovers authentication (Azure CLI, env vars, managed identity)
cred, err := azidentity.NewDefaultAzureCredential(nil)
// Construct a client factory, then the typed client for management operations
clientFactory, err := armresources.NewClientFactory(subscriptionID, cred, nil)
rgClient := clientFactory.NewResourceGroupsClient()
Dokumen paket saat ini arm* biasanya menunjukkan pola pabrik klien karena mempusatkan konfigurasi bersama untuk klien terkait. Banyak paket juga mengekspos konstruktor langsung New<ResourceType>Client(subscriptionID, credential, options) , tetapi NewClientFactory(...).New<ResourceType>Client() adalah pola yang paling sering Anda lihat di pkg.go.dev. Untuk pengembangan lokal, DefaultAzureCredential biasanya mendeteksi kredensial masuk Azure CLI Anda. Di CI/CD dan beban kerja yang disebarkan, Anda dapat beralih ke kredensial berbasis lingkungan atau identitas terkelola tanpa mengubah sisa kode klien Anda.
Untuk panduan lengkap tentang jenis kredensial dan praktik terbaik, lihat Authentication dengan Azure SDK untuk Go dan dokumentasi paket azidentity.
Paket klien dan klien bertipe
Paket manajemen berada di bawah github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/<service>/arm<service>. Pasang paket identitas dan hanya paket arm* yang Anda rencanakan untuk dipakai. Misalnya, jika Anda hanya mengelola VM dan grup sumber daya, Anda hanya perlu armcompute dan armresources. Setiap paket berisi klien untuk sumber daya dalam layanan tersebut. Misalnya, armcompute memiliki klien untuk komputer virtual, disk, gambar, dan sumber daya komputasi terkait.
Satu paket manajemen sering berisi beberapa klien, dengan setiap klien berfokus pada satu jenis sumber daya atau grup operasi. Misalnya, armcompute mencakup klien untuk komputer virtual, disk, gambar, dan sumber daya terkait. Setelah Anda memilih paket untuk layanan, buat satu pabrik klien dan gunakan kembali untuk membuat klien berjenis yang cocok dengan sumber daya yang ingin Anda kelola.
clientFactory, err := armcompute.NewClientFactory(subscriptionID, cred, nil)
if err != nil {
return err
}
vmClient := clientFactory.NewVirtualMachinesClient()
Pola paket dan fabrik klien ini konsisten di semua modul resourcemanager. Ini adalah pintasan yang berguna saat Anda memindai pkg.go.dev atau meminta agen untuk menemukan klien yang tepat untuk tugas.
Operasi jangka panjang
Banyak operasi manajemen, seperti membuat kluster, menghapus grup sumber daya, dan meningkatkan infrastruktur, berjalan secara asinkron. Metode yang diawali dengan Begin memulai pekerjaan sisi server dan segera mengembalikan poller. Kode Anda dapat memutuskan apakah akan menunggu atau terus melakukan pekerjaan lain:
// Start an asynchronous operation (returns immediately)
poller, err := client.BeginCreateOrUpdate(ctx, resourceGroupName, parameters, nil)
if err != nil {
return err
}
// Block until the operation completes or fails
result, err := poller.PollUntilDone(ctx, nil)
if err != nil {
return err
}
Panggilan Begin* yang berhasil hanya berarti Azure menerima permintaan. Operasi masih dapat gagal nanti saat poller berfungsi. Itulah sebabnya panggilan awal dan PollUntilDone memerlukan penanganan kesalahan. Gunakan PollUntilDone saat Anda menginginkan alur paling sederhana. Gunakan poller.Poll dan poller.Done saat Anda memerlukan logika tunggu kustom atau pelaporan kemajuan.
Untuk detail selengkapnya tentang pola, lihat pola penggunaan Common di Azure SDK untuk Go.
Penanganan kesalahan
Operasi manajemen mengembalikan kesalahan terstruktur yang dapat Anda periksa untuk kode kesalahan tertentu:
import "github.com/Azure/azure-sdk-for-go/sdk/azcore"
// Check if the error is an Azure service error with structured details
var respErr *azcore.ResponseError
if errors.As(err, &respErr) {
fmt.Printf("Error code: %s\n", respErr.ErrorCode)
fmt.Printf("Status code: %d\n", respErr.StatusCode)
}
Sebagian besar operasi CreateOrUpdate adalah idempoten. Menggunakan sumber daya yang ada akan memperbarui sumber daya tersebut daripada menyebabkan kegagalan.
Menyediakan contoh sumber daya
Contoh ini menunjukkan pola sarana kontrol umum: mengautentikasi, membuat sumber daya dengan tag dan batas waktu, dan memeriksa hasilnya. Gunakan pola ini sebagai templat untuk semua operasi manajemen karena pola KREDENSIAL, konteks, dan ID langganan berlaku untuk semua arm* klien.
package main
import (
"context"
"fmt"
"log"
"os"
"time"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
)
func main() {
// Read subscription ID from environment (avoid hardcoding)
subscriptionID := os.Getenv("AZURE_SUBSCRIPTION_ID")
if subscriptionID == "" {
log.Fatal("AZURE_SUBSCRIPTION_ID not set")
}
// Create credential that auto-discovers authentication
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to create credential: %v", err)
}
// Set a timeout for the entire operation (prevents hanging indefinitely)
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
defer cancel()
// Create a client factory for this management package
clientFactory, err := armresources.NewClientFactory(subscriptionID, cred, nil)
if err != nil {
log.Fatalf("failed to create client factory: %v", err)
}
// Create the typed client for resource groups
rgClient := clientFactory.NewResourceGroupsClient()
// Many ARM models use pointer fields for optional values.
resp, err := rgClient.CreateOrUpdate(ctx, "example-rg", armresources.ResourceGroup{
Location: to.Ptr("eastus"),
Tags: map[string]*string{
"env": to.Ptr("dev"),
"team": to.Ptr("platform"),
},
}, nil)
if err != nil {
log.Fatalf("failed to create or update resource group: %v", err)
}
fmt.Printf("resource group %s ready in %s\n", *resp.Name, *resp.Location)
}
Grup sumber daya
Paket armresources mengelola grup sumber daya - kontainer organisasi dasar dalam Azure. Setiap sumber daya Azure ada dalam grup sumber daya, menjadikan ini titik awal untuk alur kerja provisi apa pun.
Gunakan untuk membuat dan memperbarui grup sumber daya dengan lokasi dan tag, mencantumkan grup di seluruh langganan, dan menghapus grup bersama dengan semua sumber daya yang terkandung. Pembuatan grup sumber daya sinkron dan idempoten. Penghapusan bersifat asinkron dan permanen.
Mencantumkan grup sumber daya juga memperkenalkan pola sarana kontrol penting: banyak operasi baca menggunakan pager. Saat Anda menghitung grup sumber daya atau koleksi ARM besar lainnya, buat pager dan iterasi hingga pager.More() mengembalikan false.
pager := rgClient.NewListPager(nil)
for pager.More() {
page, err := pager.NextPage(ctx)
if err != nil {
return err
}
for _, group := range page.ResourceGroupListResult.Value {
fmt.Println(*group.Name)
}
}
Sampel kode manajemen grup sumber daya.
Untuk panduan memulai, lihat dokumentasi paket armresources.
Mesin virtual
Paket armcompute adalah contoh sarana kontrol kanonis karena manajemen VM sebagian besar adalah pekerjaan siklus hidup: membuat atau memperbarui VM, memulai atau menghentikannya, mengubah ukurannya, dan menghapusnya. Di Go, alur kerja ini menggunakan pola pabrik klien yang sama, DefaultAzureCredential, dan context.Context seperti yang ditunjukkan dalam contoh grup sumber daya. Setelah pola tersebut diterapkan, Anda dapat menerapkannya di seluruh operasi komputasi tanpa mengubah pendekatan autentikasi Anda.
Jika Anda memerlukan titik awal yang cepat, buat faktori klien komputasi lalu minta klien VM bertipe.
clientFactory, err := armcompute.NewClientFactory(subscriptionID, cred, nil)
if err != nil {
return err
}
vmClient := clientFactory.NewVirtualMachinesClient()
Untuk sampel VM lengkap dan panduan khusus operasi, lihat sampel manajemen mesin virtual yang ada dan dokumentasi paket armcompute. Gunakan referensi tersebut untuk model permintaan lengkap dan detail operasi yang berjalan lama alih-alih menduplikasi templat VM besar dalam artikel ini.
Key Vault
Paket armkeyvault mengelola siklus hidup instans Azure Key Vault. Paket ini menangani sarana kontrol untuk infrastruktur brankas. Gunakan paket azsecrets, azkeys, dan azcertificates bidang data terpisah untuk membaca dan menulis rahasia, kunci, dan sertifikat.
Gunakan paket ini untuk mengatur vault dengan SKU dan pengaturan keamanan yang sesuai, seperti penghapusan sementara dan perlindungan penghapusan menyeluruh. Anda juga dapat mengelola kebijakan akses untuk prinsipal, mengonfigurasi akses jaringan dan titik akhir privat, dan mengaktifkan pembuatan log diagnostik. Anda dapat mengintegrasikan penyediaan vault ke dalam alur kerja penerimaan aplikasi.
Contoh kode manajemen Key Vault.
Untuk klien Key Vault pada sisi runtime, lihat Gunakan Azure SDK untuk Go untuk operasi pada lapisan data.
Untuk panduan memulai, lihat dokumentasi paket armkeyvault.
Kluster AKS
Paket armcontainerservice mengelola kluster Azure Kubernetes Service di seluruh siklus hidup penuhnya.
Gunakan paket ini untuk membuat kluster dengan jaringan yang dapat dikonfigurasi, versi Kubernetes, dan identitas terkelola. Anda dapat menambahkan dan menskalakan kumpulan simpul, memperbarui versi sarana kontrol dan node, mengaktifkan add-on seperti Azure Policy dan pemantauan, serta memeriksa kesehatan kluster untuk dasbor operasional. Semua operasi kluster berjalan lama dan mengikuti pola poller.
sampel kode manajemen AKS.
Untuk panduan memulai, lihat dokumen paket armcontainerservice.
RBAC dan otorisasi
Paket armauthorization mengelola Kontrol Akses Berbasis Peran (Role-Based Access Control) dari Azure. Gunakan untuk mengotomatiskan kebijakan akses hak istimewa terkecil di seluruh langganan dan grup sumber daya.
Gunakan untuk mencantumkan dan mencari peran bawaan, menetapkan peran kepada prinsipal (pengguna, perwakilan layanan, identitas terkelola, atau grup) di cakupan apa pun, membuat definisi peran kustom dengan izin mendetail, dan tugas audit untuk pelaporan kepatuhan dan deteksi penyimpangan. Tetapkan peran ke grup daripada individu, dan gunakan peran bawaan jika memungkinkan.
Untuk panduan memulai, lihat dokumentasi paket armauthorization.
Jaringan virtual dan keamanan jaringan
Paket armnetwork mengelola infrastruktur jaringan virtual Azure.
Gunakan untuk membuat jaringan virtual dan subnet, mengonfigurasi grup keamanan jaringan dengan aturan masuk dan keluar, menyiapkan titik akhir privat untuk layanan PaaS, mengotomatiskan peering jaringan di seluruh wilayah, dan menerapkan topologi hub-and-spoke secara terprogram.
kode sampel manajemen jaringan.
Untuk panduan memulai, lihat dokumentasi paket armnetwork.
Registri kontainer
Paket armcontainerregistry mengelola instans Azure Container Registry.
Gunakan untuk menyediakan registri dengan SKU dan replikasi geografis yang sesuai, mengonfigurasi autentikasi (admin, perwakilan layanan, atau identitas terkelola), mengelola webhook untuk CI/CD, mengaktifkan pemindaian kerentanan, dan menerapkan kebijakan penyimpanan ke gambar. Anda sering menggunakan Container Registry bersama Azure Kubernetes Service. Pertama, provisikan registri, lalu referensikan selama pembuatan kluster.
sampel kode manajemen Container Registry.
Untuk panduan memulai, lihat dokumentasi paket armcontainerregistry.
akun penyimpanan
Paket armstorage mengelola akun Azure Storage.
Gunakan untuk membuat akun penyimpanan dengan tingkat performa dan redundansi yang tepat, mengelola kunci akses dan tanda tangan akses bersama, mengonfigurasi kebijakan siklus hidup blob, dan menyiapkan pembuatan log diagnostik. Akun penyimpanan adalah dependensi umum untuk banyak aplikasi, jadi mengotomatiskan provisi dan konfigurasinya adalah skenario lapisan kontrol umum.
sampel kode manajemen akun Storage.
Untuk panduan memulai, lihat dokumentasi paket armstorage.