Použití Azure SDK pro Go pro operace řídicí roviny

Naučte se zřizovat, konfigurovat a spravovat prostředky Azure prostřednictvím kódu programu pomocí Azure SDK pro knihovny pro správu Go. Mezi běžné pracovní postupy roviny řízení patří vytváření skupin prostředků, správa infrastruktury úložiště a sítě a zpracování operací životního cyklu virtuálních počítačů, jako je vytvoření, spuštění, zastavení, změna velikosti, aktualizace a odstranění. Pokud chcete získat úvod na vyšší úrovni o tom, jak knihovny pro správu zapadají do Azure SDK pro Go, začněte s Přehledem knihoven pro správu v Azure SDK pro Go. Tento článek se zaměřuje na vzory pro řídicí rovinu v Go (programovací jazyk), které opakovaně používáte napříč službami, a odkazuje na pokyny k datové rovině, pokud přechází cesta modulu runtime ze správy prostředků k práci s datovými službami.

Co je řídicí rovina Azure?

Řídicí rovina Azure je sada rozhraní API, která řídí životní cyklus Azure prostředků – vytváření, aktualizace, konfigurace a odstraňování. Každá operace, kterou provedete na portálu Azure, Azure CLI nebo nástroji infrastruktury jako kódu, nakonec volá tato rozhraní API řídicí roviny.

Azure SDK for Go zveřejňuje řídicí rovinu prostřednictvím řady balíčků arm* v rámci github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/. Každý balíček je přiřazen k poskytovateli prostředků Azure a následuje konzistentní vzor.

  1. Ověřte se pomocí azidentity balíčku.
  2. Vytvořte typového klienta pro prostředek, který chcete spravovat.
  3. Volání metod klienta k vytvoření, čtení, aktualizaci nebo odstranění prostředků.
  4. Řešte dlouhotrvající operace pomocí pollerů

Mezi běžné scénáře automatizace řídicí roviny v jazyce Go patří:

  • Zřizování infrastruktury pro kanály nasazení
  • Správa operací životního cyklu virtuálního počítače, jako jsou vytvoření, aktualizace, odstranění, spuštění, zastavení a změna velikosti
  • Vytváření vlastních rozhraní CLI a operátorů pro týmy platforem
  • Implementace synchronizace infrastruktury ve stylu GitOps
  • Automatizace auditování dodržování předpisů a detekce odchylek

Autentizace

Všechny operace správy vyžadují ověřené přihlašovací údaje z balíčku azidentity. Balíček poskytuje typy přihlašovacích údajů pro každé prostředí, včetně místních vývojových, kanálů CI/CD a produkčních úloh spuštěných v Azure. Všechny typy přihlašovacích údajů implementují stejné azcore.TokenCredential rozhraní, takže je můžete prohodit beze změny kódu klienta.

Po získání přihlašovacích údajů vytvořte pro balíček objekt pro vytváření klienta a pak ho požádejte o typ klienta, který potřebujete:

// 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()

Aktuální arm* dokumenty balíčků obvykle zobrazují vzor klientské továrny, protože centralizuje sdílenou konfiguraci pro související klienty. Mnoho balíčků také zveřejňuje přímé New<ResourceType>Client(subscriptionID, credential, options) konstruktory, ale NewClientFactory(...).New<ResourceType>Client() je to vzor, který nejčastěji uvidíte na pkg.go.dev. V případě místního vývoje DefaultAzureCredential obvykle přebírá vaše Azure CLI přihlášení. V CI/CD a nasazených úlohách můžete přepnout na přihlašovací údaje založené na prostředí nebo spravovanou identitu beze změny zbytku klientského kódu.

Úplnou příručku k typům přihlašovacích údajů a osvědčeným postupům najdete v tématu Authentication s Azure SDK for Go a dokumentaci k balíčku azidentity.

Klientské balíčky a typoví klienti

Balíčky pro správu jsou pod github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/<service>/arm<service>. Nainstalujte balíček identity a pouze balíčky arm*, které chcete použít. Pokud například spravujete jen virtuální počítače a skupiny prostředků, potřebujete armcompute a armresources. Každý balíček obsahuje klienty pro zdroje v dané službě. Například armcompute má klienty pro virtuální počítače, disky, obrazy a související výpočetní prostředky.

Jeden balíček pro správu často obsahuje několik klientů, přičemž každý klient se zaměřuje na jeden typ prostředku nebo skupinu operací. Zahrnuje například armcompute klienty pro virtuální počítače, disky, snímky a související prostředky. Po výběru balíčku pro službu vytvořte jednu klientskou továrnu a znovu ji použijte k vytvoření zadaných klientů, kteří odpovídají prostředkům, které chcete spravovat.

clientFactory, err := armcompute.NewClientFactory(subscriptionID, cred, nil)
if err != nil {
	return err
}
vmClient := clientFactory.NewVirtualMachinesClient()

Tento model balíčku a klientské továrny je konzistentní napříč resourcemanager moduly. Je to užitečná zkratka, když kontrolujete pkg.go.dev nebo žádáte agenta, aby našel správného klienta pro úlohu.

Dlouhotrvající operace

Mnoho operací správy, jako je vytváření clusterů, odstraňování skupin prostředků a upgrade infrastruktury, běží asynchronně. Metody s předponou Begin zahájí práci na straně serveru a okamžitě vrátí poller. Váš kód se může rozhodnout, jestli se má čekat nebo pokračovat v práci:

// 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
}

Úspěšné volání Begin* znamená pouze to, že Azure přijal požadavek. Operace může ještě selhat později, zatímco poller běží. Proto je potřeba, aby jak počáteční volání, tak PollUntilDone měly zpracování chyb. Použijte PollUntilDone , když chcete nejjednodušší tok. Použijte poller.Poll a poller.Done kdy potřebujete vlastní logiku čekání nebo generování sestav průběhu.

Další podrobnosti o vzorech najdete v Příkazy použití v Azure SDK pro Go.

Zpracování chyb

Operace správy vrací strukturované chyby, které můžete zkontrolovat u konkrétních kódů chyb:

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)
}

Většina CreateOrUpdate operací je idempotentní. Místo selhání volání na existující prostředek aktualizuje prostředek.

Příklad zřízení prostředku

Tento příklad ukazuje běžný vzor řídicí roviny: ověření, vytvoření prostředku se značkami a vypršením časového limitu a kontrola výsledku. Tento vzor použijte jako šablonu pro všechny operace správy, protože vzor ID přihlašovacích údajů, kontextu a id předplatného platí pro všechny arm* klienty.

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)
}

Skupiny zdrojů

Balíček armresources spravuje skupiny prostředků – základní kontejnery organizace v Azure. Každý Azure prostředek existuje ve skupině prostředků, což je začátek každého procesu zřizování.

Slouží k vytváření a aktualizaci skupin prostředků pomocí umístění a značek, seznamů skupin v rámci předplatného a odstraňování skupin společně se všemi obsaženými prostředky. Vytváření skupin prostředků je synchronní a idempotentní. Odstranění je asynchronní a trvalé.

Výpis skupin prostředků také představuje důležitý vzor na řídicí rovině: mnoho operací čtení používá stránkovače. Při vytváření výčtu skupin prostředků nebo jiných velkých kolekcí ARM vytvořte pager a iterujte, dokud pager.More() se nevrátí 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)
	}
}

ukázka kódu pro správu skupiny zdrojů.

Úvodní příručku najdete v dokumentaci k balíčku armresources.

Virtuální počítače

Balíček armcompute je kanonický příklad řídicí roviny, protože správa virtuálních počítačů je většinou životní cyklus: vytvoření nebo aktualizace virtuálního počítače, spuštění nebo zastavení, změna velikosti a odstranění. V Go tyto pracovní postupy používají stejný DefaultAzureCredential, context.Context a vzor klientské továrny, zobrazený v příkladu skupiny prostředků, takže jakmile je tento vzor zaveden, můžete ho použít napříč výpočetními operacemi, aniž byste museli měnit způsob ověřování.

Pokud potřebujete rychlý výchozí bod, vytvořte továrnu na výpočetní klienty a pak ji požádejte o specializovaného klienta virtuálního počítače.

clientFactory, err := armcompute.NewClientFactory(subscriptionID, cred, nil)
if err != nil {
	return err
}
vmClient := clientFactory.NewVirtualMachinesClient()

Úplné ukázky virtuálních počítačů a pokyny specifické pro provoz najdete v existujících ukázkách ukázky správy virtuálních počítačů a dokumentaci k balíčku armcompute. Tyto odkazy použijte k úplným modelům požadavků a dlouho běžícím podrobnostem operací místo duplikování velkých šablon virtuálních počítačů v tomto článku.

Trezor klíčů

Balíček armkeyvault spravuje životní cyklus instancí Azure Key Vault. Tento balíček zpracovává řídicí úroveň pro infrastrukturu Vaultu. K čtení a zápisu tajných kódů, klíčů a certifikátů použijte samostatné balíčky roviny dat azsecrets, azkeys a azcertificates.

Tento balíček použijte ke zřízení trezorů s odpovídající SKU a bezpečnostními nastaveními, jako je měkké odstranění a ochrana před vymazáním. Můžete také spravovat zásady přístupu pro hlavní subjekty, konfigurovat přístup k síti a privátní koncové body a povolit diagnostické protokolování. Zřizování trezoru můžete integrovat do pracovních postupů onboardingu aplikací.

ukázka kódu pro správu Key Vault

Informace o klientech Key Vault přímo v prostředí běhového modulu najdete v tématu Použití Azure SDK pro operace na datové vrstvě.

Úvodní příručku najdete v dokumentaci k balíčku armkeyvault.

AKS klastry

Balíček armcontainerservice spravuje clustery Azure Kubernetes Service po celý životní cyklus.

Tento balíček slouží k vytváření clusterů s konfigurovatelnými sítěmi, verzí Kubernetes a spravovanou identitou. Můžete přidávat a škálovat fondy uzlů, upgradovat řídicí rovinu a verze uzlů, aktivovat doplňky, jako jsou Azure Policy a monitorování, a dotazovat se na stav clusteru kvůli provozním přehledům. Všechny operace clusteru jsou dlouhotrvající a řídí se vzorem poller.

ukázka kódu pro správu AKS.

Úvodní příručku najdete v dokumentaci k balíčku armcontainerservice.

RBAC a autorizace

Balíček armauthorization spravuje Azure Role-Based Access Control. Použijte ho k automatizaci zásad přístupu s nejnižšími oprávněními napříč předplatnými a skupinami prostředků.

Umožňuje vypsat a prohledávat předdefinované role, přiřazovat role k objektům zabezpečení (uživatelům, instančním objektům, spravovaným identitám nebo skupinám) v libovolném oboru, vytvářet vlastní definice rolí s jemně odstupňovanými oprávněními a přiřazovat audity pro generování sestav dodržování předpisů a detekci odchylek. Pokud je to možné, přiřaďte role skupinám místo jednotlivců a používejte předdefinované role.

Úvodní příručku najdete v dokumentaci k balíčku armauthorization.

Virtuální sítě a zabezpečení sítě

Balíček armnetwork spravuje Azure infrastrukturu virtuálních sítí.

Použijte to k vytváření virtuálních sítí a podsítí, konfiguraci skupin zabezpečení sítě s příchozími a odchozími pravidly, nastavení privátních koncových bodů pro služby PaaS, automatizaci párování sítí napříč oblastmi a programové implementaci centrálních topologií.

ukázka kódu pro správu sítě .

Úvodní příručku najdete v dokumentaci k balíčku armnetwork.

Registr kontejneru

Balíček armcontainerregistry spravuje instance Azure Container Registry.

Slouží ke zřizování registrů s příslušným SKU a geografickou replikací, konfiguraci ověřování identity (správce, instanční objekt nebo spravovaná identita), správě webhooků pro CI/CD, povolení kontroly zranitelností a použití zásad uchovávání obrazů. Container Registry často používáte společně s Azure Kubernetes Service. Nejprve zřiďte registr a pak na něj při vytváření clusteru odkazujte.

Ukázka kódu pro správu registruContainer.

Úvodní příručku najdete v dokumentaci k balíčku armcontainerregistry.

Úložné účty

Balíček armstorage spravuje účty Azure Storage.

Umožňuje vytvářet účty úložiště se správnou úrovní výkonu a redundancí, spravovat přístupové klíče a sdílené přístupové podpisy, konfigurovat zásady životního cyklu objektů blob a nastavit protokolování diagnostiky. Účty úložiště jsou běžnou závislostí pro mnoho aplikací, takže automatizace jejich zřizování a konfigurace je běžným scénářem roviny řízení.

ukázka kódu pro správu účtů Storage.

Úvodní příručku najdete v dokumentaci k balíčku armstorage.

Další kroky