A Go Azure SDK használata vezérlősík-műveletekhez

Megtudhatja, hogyan hozhat létre, konfigurálhat és kezelhet Azure erőforrásokat programozott módon a Go felügyeleti kódtárak Azure SDK használatával. A vezérlősíkok gyakori munkafolyamatai közé tartozik az erőforráscsoportok létrehozása, a tárolási és hálózati infrastruktúra kezelése, valamint a virtuális gépek életciklusának olyan műveleteinek kezelése, mint a létrehozás, az indítás, a leállítás, az átméretezés, a frissítés és a törlés. Ha szeretne magasabb szintű betekintést nyerni abba, hogyan illeszkednek a felügyeleti kódtárak az Azure SDK for Go-ba, kezdje az Azure SDK for Go felügyeleti kódtárak áttekintése-vel. Ez a cikk a szolgáltatások között újra felhasználható Go vezérlősík-mintákat, valamint az adatsík útmutatására mutató hivatkozásokat ismerteti, amikor a futtatókörnyezeti útvonal az erőforrás-kezelésről a szolgáltatásadatok kezelésére kerül.

Mi az Azure vezérlősík?

A Azure vezérlősík olyan API-k készlete, amelyek Azure erőforrások életciklusát szabályozzák – létrehozásuk, frissítésük, konfigurálásuk és törlésük. A Azure portálon, Azure CLI vagy kódként használható infrastruktúra-eszközben végrehajtott minden művelet végül ezeket a vezérlősík API-kat hívja meg.

A Go Azure SDK egy arm* csomagcsaládon keresztül teszi elérhetővé a vezérlősíkot github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/ alatt. Minden csomag leképezik egy Azure erőforrás-szolgáltatót, és konzisztens mintát követ:

  1. Hitelesítés a azidentity csomag használatával.
  2. Hozzon létre egy típusos ügyfelet a kezelni kívánt erőforráshoz.
  3. Metódusok meghívása az ügyfélen erőforrások létrehozásához, olvasásához, frissítéséhez vagy törléséhez.
  4. Hosszan futó műveletek kezelése lekérdezők használatával.

A Go vezérlősík automatizálásának gyakori forgatókönyvei a következők:

  • Telepítési folyamatok infrastruktúrájának kiépítése
  • A virtuális gépek életciklusának olyan műveleteinek kezelése, mint a létrehozás, frissítés, törlés, indítás, leállítás és átméretezés
  • Egyéni CLI-k és operátorok létrehozása platformcsapatokhoz
  • GitOps-stílusú infrastruktúra egyeztetésének megvalósítása
  • Megfelelőségi naplózás és eltérésészlelés automatizálása

Authentication

Minden felügyeleti művelethez hitelesített hitelesítő adatokra van szükség a azidentitás csomagból. A csomag hitelesítő adattípusokat biztosít minden környezethez, beleértve a helyi fejlesztést, a CI/CD csővezetékeket és az Azure környezetben futó éles munkaterheléseket. Minden hitelesítő adattípus ugyanazt azcore.TokenCredential a felületet implementálja, így az ügyfélkód módosítása nélkül is felcserélheti őket.

Miután beszerezte a hitelesítő adatokat, hozzon létre egy kliens gyárat a csomaghoz, majd kérje le a szükséges típusos ügyfelet.

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

Az aktuális arm* csomag dokumentáció általában a "client factory" mintát mutatja, mivel ez központosítja a kapcsolódó ügyfelek közös konfigurációját. Számos csomag közvetlen New<ResourceType>Client(subscriptionID, credential, options) konstruktorokat is elérhetővé tesz, de NewClientFactory(...).New<ResourceType>Client() ez a minta, amit a leggyakrabban a pkg.go.dev oldalon látni. Helyi fejlesztés esetén a DefaultAzureCredential általában felveszi a Azure CLI bejelentkezést. A CI/CD-ben és az üzembe helyezett számítási feladatokban a többi ügyfélkód módosítása nélkül válthat környezetalapú hitelesítő adatokra vagy felügyelt identitásra.

A hitelesítő adatok típusairól és ajánlott eljárásairól a Hitelesítés a Go-hoz készült Azure SDK-val és az azidentity csomag dokumentációja nyújt teljes útmutatót.

Ügyfélcsomagok és típusos ügyfelek

A felügyeleti csomagok github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/<service>/arm<service> alatt találhatók. Telepítse az identity csomagot, és csak azokat a arm* csomagokat, amelyeket használni kíván. Ha például csak virtuális gépeket és erőforráscsoportokat kezel, csak armcompute és armresources szükséges. Minden csomag az adott szolgáltatás erőforrásaihoz tartozó ügyfeleket tartalmazza. Például a armcompute rendelkezik virtuális gépek, lemezek, képek és kapcsolódó számítási erőforrások kliensprogramjaival.

Egy felügyeleti csomag gyakran több ügyfelet tartalmaz, és mindegyik ügyfél egy erőforrástípusra vagy műveletcsoportra összpontosít. Ide tartozik például armcompute, amely magában foglalja a virtuális gépek, lemezek, képek és a kapcsolódó erőforrások ügyfeleit. Miután kiválasztotta a szolgáltatás csomagját, hozzon létre egy ügyfélgyárat, és használja fel újra a kezelni kívánt erőforrásoknak megfelelő típusos ügyfelek létrehozásához.

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

Ez a csomag- és ügyfél-gyári minta egységes a resourcemanager modulok között. Ez egy hasznos parancsikon, amikor a pkg.go.dev oldalt vizsgálod, vagy arra kérsz egy ügynököt, hogy keresse meg a megfelelő ügyfelet egy feladathoz.

Hosszú ideig futó műveletek

Számos felügyeleti művelet, például fürtök létrehozása, erőforráscsoportok törlése és infrastruktúra frissítése aszinkron módon fut. A kiszolgálóoldali munka elindításával előtaggal Begin ellátott metódusok azonnal visszaadják a lekérdezést. A kód eldöntheti, hogy várjon vagy folytassa-e a munkát:

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

A sikeres Begin* hívás csak azt jelenti, Azure elfogadta a kérést. A művelet később is meghiúsulhat, amíg a lekérdezés fut. Ezért van szükség hibakezelésre mind a kezdeti hívás, mind a PollUntilDone esetén. Akkor használja PollUntilDone , ha a legegyszerűbb folyamatot szeretné. Használja a saját poller.Poll és poller.Done várakozási logikát vagy folyamatjelentést, amikor szükséges.

A mintákról további információkért lásd a „Gyakori használati minták az Azure SDK for Go-ban” részt.

Hibakezelés

A felügyeleti műveletek strukturált hibákat adnak vissza, amelyeket meghatározott hibakódok vizsgálatára használhat:

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

A legtöbb CreateOrUpdate művelet idempotens. Ha egy meglévő erőforrásra hívja őket, a sikertelenség helyett frissíti az erőforrást.

Az erőforráspélda előkészítése

Ez a példa a vezérlősík gyakori mintáját mutatja be: hitelesítés, erőforrás létrehozása címkékkel és időtúllépéssel, és az eredmény ellenőrzése. Ezt a mintát használja sablonként az összes felügyeleti művelethez, mert a hitelesítőadat-, a környezet- és az előfizetés-azonosító minta minden arm* ügyfélre érvényes.

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

Erőforráscsoportok

A armresources csomag kezeli az erőforráscsoportokat – a Azure alapvető szervezeti tárolóit. Minden Azure erőforrás egy erőforráscsoporton belül létezik, így ez minden kiépítési munkafolyamat kiindulópontja.

Segítségével erőforráscsoportokat hozhat létre és frissíthet helyekkel és címkékkel, listázhat csoportokat egy előfizetésen belül, és törölheti a csoportokat az összes tartalmazott erőforrással együtt. Az erőforráscsoport létrehozása szinkron és idempotens. A törlés aszinkron és állandó.

Az erőforráscsoportok felsorolása egy fontos vezérlősík-mintát is bevezet: sok olvasási művelet használ lapozókat. Erőforráscsoportok vagy más nagy ARM-gyűjtemények számbavételekor hozzon létre egy lapozót, és iterálja, amíg pager.More() vissza nem ad 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)
	}
}

Erőforráscsoport-kezelési kódminta.

Első lépésekről a armresources csomag dokumentációjában olvashat.

Virtuális gépek

A armcompute csomag egy kanonikus vezérlősík-példa, mivel a virtuális gépek kezelése többnyire életciklus-munka: virtuális gép létrehozása vagy frissítése, indítása vagy leállítása, átméretezése és törlése. A Go-ban ezek a munkafolyamatok ugyanazt a DefaultAzureCredential, context.Context az erőforráscsoport-példában látható kliens gyártó mintát használják, így a minta létrehozása után a hitelesítési módszer megváltoztatása nélkül alkalmazhatja azt a számítási műveletekre.

Ha gyors kiindulópontra van szüksége, hozza létre a számítási kliens gyár, majd kérje meg a típusos virtuálisgép-ügyfelet.

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

A teljes virtuálisgép-minták és a műveletspecifikus útmutatásért tekintse meg a meglévő virtual machine management-mintákat és a armcompute csomag dokumentációját. Ezeket a hivatkozásokat teljes kérelemmodellekhez és hosszú ideig futó műveletek részleteihez használhatja a jelen cikkben szereplő nagyméretű virtuálisgép-sablonok duplikálása helyett.

Key Vault

A armkeyvault csomag kezeli Azure Key Vault példányok életciklusát. Ez a csomag kezeli a Vault infrastruktúra vezérlősíkját. A titkos kulcsok, kulcsok és tanúsítványok olvasásához és írásához használja a különálló azsecrets, azkeysvalamint azcertificates az adatsík-csomagokat.

Ezzel a csomaggal boltozatokat hozhat létre a megfelelő SKU-val és biztonsági beállításokkal, például helyreállítható törléssel és végleges törlés elleni védelemmel. Kezelheti az egyszerű felhasználók hozzáférési szabályzatait, konfigurálhatja a hálózati hozzáférést és a privát végpontokat, és engedélyezheti a diagnosztikai naplózást. Az tároló előállítást integrálhatja az alkalmazás átvételi munkafolyamataiba.

Key Vault felügyeleti kódminta.

Futtatókörnyezeti Key Vault-ügyfelek esetén lásd: A Go Azure SDK használata adatsík-műveletekhez.

Első lépésekről a armkeyvault csomag dokumentációjában olvashat.

AKS klaszterek

A armcontainerservice csomag a teljes életciklusuk során kezeli Azure Kubernetes Service fürtöket.

Ezzel a csomaggal konfigurálható hálózatkezeléssel, Kubernetes-verzióval és felügyelt identitással rendelkező fürtöket hozhat létre. Hozzáadhat és skálázhat csomópontkészleteket, frissítheti a vezérlősíkot és a csomópontverziókat, engedélyezheti az olyan bővítményeket, mint a Azure Policy és a monitorozás, valamint lekérdezheti a fürt állapotát az operatív irányítópultokhoz. Minden fürtművelet hosszú ideig tartó végrehajtást igényel, és követi a lekérdező mintázatot.

AKS felügyeleti kódminta.

Első lépésekről a armcontainerservice csomag dokumentációjában olvashat.

RBAC és engedélyezés

A armauthorization csomag kezeli a Azure Role-Based Access Control. Ezzel automatizálhatja a minimális jogosultságú hozzáférési szabályzatokat az előfizetések és erőforráscsoportok között.

Segítségével listázhatja és keresheti a beépített szerepköröket, szerepköröket rendelhet hozzá a főbb személyekhez (felhasználókhoz, szolgáltatási főszemélyekhez, felügyelt identitásokhoz vagy csoportokhoz) bármilyen hatókörben, egyéni szerepkördefiníciókat hozhat létre részletes engedélyekkel, és ellenőrizheti a hozzárendeléseket a megfelelőségi jelentésekhez és az eltérésészleléshez. Szerepkörök hozzárendelése csoportokhoz, nem egyénekhez, és ahol lehetséges, beépített szerepkörök használata.

Első lépésekről a armauthorization csomag dokumentációjában olvashat.

Virtuális hálózatok és hálózati biztonság

A armnetwork csomag kezeli Azure virtuális hálózati infrastruktúrát.

Használatával virtuális hálózatokat és alhálózatokat hozhat létre, hálózati biztonsági csoportokat konfigurálhat bejövő és kimenő szabályokkal, privát végpontokat állíthat be a PaaS-szolgáltatásokhoz, automatizálhatja a régiók közötti hálózati társviszonyt, és programozott módon implementálhatja a küllős topológiákat.

Network felügyeleti kódminta.

Első lépésekről a armnetwork csomag dokumentációjában olvashat.

Konténer-regisztráció

A armcontainerregistry csomag kezeli Azure Container Registry példányokat.

Használatával adatbázisokat építhet ki a megfelelő termékváltozattal és georeplikációval, konfigurálhatja a hitelesítést (rendszergazda, szolgáltatásnév vagy felügyelt identitás), kezelheti a CI/CD webhookjait, engedélyezheti a biztonsági rések vizsgálatát, és adatmegőrzési szabályzatokat alkalmazhat a képekre. Gyakran használja a Tárolóregisztrációs adatbázist a Azure Kubernetes Service mellett. Először állítsa be a beállításjegyzéket, majd a fürt létrehozása során hivatkozzon rá.

Tárolónyilvántartás-kezelési kódaminta.

Első lépésekről a armcontainerregistry csomag dokumentációjában olvashat.

Tárolási fiókok

A armstorage csomag kezeli Azure Storage fiókokat.

Segítségével a megfelelő teljesítményszinttel és redundanciával rendelkező tárfiókokat hozhat létre, kezelheti a hozzáférési kulcsokat és a közös hozzáférésű jogosultságkódokat, konfigurálhatja a blobéletciklus-szabályzatokat, és diagnosztikai naplózást állíthat be. A tárfiókok számos alkalmazás gyakori függőségei, ezért a kiépítés és a konfiguráció automatizálása gyakori vezérlősík-forgatókönyv.

Storage fiókkezelési kódminta.

Első lépésekről a armstorage csomag dokumentációjában olvashat.

Következő lépések