Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Lernprogramm verwenden Sie das Azure SDK for Go, um eine Azure Resource Manager-Vorlage bereitzustellen.
Azure Resource Manager ist der Bereitstellungs- und Verwaltungsdienst für Azure. Es ermöglicht Ihnen, Ressourcen in Ihrem Azure-Konto zu erstellen, zu aktualisieren und zu löschen. Azure Resource Manager-Vorlagen beschreiben Ihre Infrastruktur deklarativ als Code in JSON-Dokumenten.
Am Ende dieses Lernprogramms schreiben und bereitstellen Sie mithilfe von Go eine Azure Resource Manager-Vorlage.
Voraussetzungen
- Azure-Abonnement: Wenn Sie nicht über ein Azure-Abonnement verfügen, erstellen Sie ein kostenloses Konto , bevor Sie beginnen.
Erstellen eines neuen Moduls
In diesem Abschnitt erstellen Sie ein neues Go-Modul und installieren die erforderlichen Azure SDK-Pakete. Anschließend erstellen Sie die Hauptanwendungsdatei und fügen Code hinzu, der eine Azure Resource Manager-Vorlage bereitstellt.
Erstellen Sie ein neues Verzeichnis mit dem Namen
deployARM-how-to. Wechseln Sie dann in dieses Verzeichnis.mkdir deployARM-how-to cd deployARM-how-toFühren Sie den
go mod initBefehl aus, um diego.modundgo.sumDateien zu erstellen.go mod init deployARM-how-toDas Azure SDK for Go enthält mehrere Pakete für die Arbeit mit Azure. Für dieses Tutorial benötigen Sie die Pakete
azcore/to,azidentityundarmresources.Führen Sie den
go getBefehl aus, um diese Pakete herunterzuladen:go get github.com/Azure/azure-sdk-for-go/sdk/azcore/to go get github.com/Azure/azure-sdk-for-go/sdk/azidentity go get github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresourcesErstellen Sie eine Datei mit dem Namen
main.go.touch main.goÖffnen Sie
main.goIhren Editor, und fügen Sie den folgenden Code hinzu, der sich bei Azure authentifiziert, eine Ressourcengruppe erstellt und eine Azure Resource Manager-Vorlage bereitstellt.package main import ( "context" "encoding/json" "fmt" "log" "os" "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" ) const ( resourceGroupName = "deployARM-how-to" resourceGroupLocation = "eastus" deploymentName = "deployARM-how-to" templateFile = "template.json" ) var ( ctx = context.Background() ) // Read a JSON file from the given path. func readJSON(path string) (map[string]interface{}, error) { data, err := os.ReadFile(path) if err != nil { log.Fatalf("failed to read file: %v", err) } contents := make(map[string]interface{}) _ = json.Unmarshal(data, &contents) return contents, nil } func main() { subscriptionId := os.Getenv("AZURE_SUBSCRIPTION_ID") // Authenticate to Azure cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { log.Fatalf("failed to obtain a credential: %v", err) } // Create a resource group. client, err := armresources.NewResourceGroupsClient(subscriptionId, cred, nil) if err != nil { log.Fatalf("failed to create client: %v", err) } resp, err := client.CreateOrUpdate(context.Background(), resourceGroupName, armresources.ResourceGroup{ Location: to.Ptr(resourceGroupLocation), }, nil) if err != nil { log.Fatalf("failed to obtain a response: %v", err) } log.Printf("resource group ID: %s\n", *resp.ResourceGroup.ID) // Read the template file. template, err := readJSON(templateFile) if err != nil { return } // Deploy the Azure Resource Manager template. deploymentsClient, err := armresources.NewDeploymentsClient(subscriptionId, cred, nil) if err != nil { log.Fatalf("failed to create client: %v", err) } deploy, err := deploymentsClient.BeginCreateOrUpdate( ctx, resourceGroupName, deploymentName, armresources.Deployment{ Properties: &armresources.DeploymentProperties{ Template: template, Mode: to.Ptr(armresources.DeploymentModeIncremental), }, }, nil, ) if err != nil { log.Fatalf("failed to deploy template: %v", err) } fmt.Println(deploy) }
Erstellen der Azure Resource Manager-Vorlage
Erstellen Sie im
deployARM-how-to-Verzeichnis eine Datei mit dem Namentemplate.json.Öffnen Sie die
template.jsonDatei, und fügen Sie den folgenden Azure Resource Manager-Vorlagencode hinzu, der ein Azure-Speicherkonto erstellt:{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { }, "functions": [], "variables": {}, "resources": [{ "name": "<StorageAccountName>", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2021-04-01", "tags": { "displayName": "<StorageAccountDisplayName>" }, "location": "EastUS", "kind": "StorageV2", "sku": { "name": "Premium_LRS", "tier": "Premium" } }], "outputs": {} }Ersetzen Sie
<StorageAccountName>und<StorageAccountDisplayName>durch einen gültigen Speichernamenwert.
Weitere Informationen zu Azure Resource Manager-Vorlagen finden Sie in der Übersicht über Azure Resource Manager-Vorlagen.
Anmelden bei Azure
Der Code in diesem Artikel verwendet den DefaultAzureCredential-Typ aus dem Azure Identity-Modul für Go, um sich bei Azure zu authentifizieren.
DefaultAzureCredential unterstützt viele Anmeldeinformationstypen für die Authentifizierung bei Azure via OAuth mit Microsoft Entra ID. In diesem Artikel verwenden Sie die Benutzeranmeldeinformationen, mit denen Sie sich bei der Azure CLI anmelden.
Falls noch nicht geschehen, melden Sie sich bei der Azure CLI an:
az login
Wenn Ihrem Konto mehrere Abonnements zugeordnet sind, verwenden Sie den Befehl "az-Kontoliste ", um eine Liste dieser Abonnements abzurufen. Verwenden Sie den Befehl "az account set ", um das aktive Abonnement festzulegen. Durch Festlegen des aktiven Abonnements stellen Sie sicher, dass alle CLI-Befehle, die Sie im rest dieses Artikels ausführen, für Ihr beabsichtigtes Abonnement ausgeführt werden.
Hinweis
Wenn Sie lokal die Anwendung ausführen, unterstützt DefaultAzureCredential auch Anmeldeinformationen der Azure Developer CLI (AZD) oder eines Azure-Dienstprinzipals, den Sie in Umgebungsvariablen konfigurieren. Weitere Informationen zu allen unterstützten Anmeldeinformationstypen finden Sie unter Azure-Authentifizierung mit dem Azure Identity-Modul für Go.
Ausführen der Anwendung
Bevor Sie die Vorlage bereitstellen können, müssen Sie Ihre Azure-Abonnement-ID als Umgebungsvariable definieren.
Führen Sie zum Abrufen der Abonnement-ID den folgenden Befehl "az account show" aus .
az account show --query id --output tsvLegen Sie die
AZURE_SUBSCRIPTION_IDUmgebungsvariable mit Ihrer Abonnement-ID fest. Ersetzen Sie<AzureSubscriptionId>durch Ihre Abonnement-ID.export AZURE_SUBSCRIPTION_ID=<AzureSubscriptionId>Führen Sie den
go runBefehl aus, um die Vorlage bereitzustellen:go run main.go
Troubleshoot
Wenn die Bereitstellung des Speicherkontos fehlschlägt, überprüfen Sie, ob Sie einen gültigen Speichernamenwert verwendet haben. Speicherkontonamen müssen zwischen 3 und 24 Zeichen lang sein und dürfen nur Kleinbuchstaben und Zahlen enthalten.
Wenn das Programm einen Fehler im Zusammenhang mit der Authentifizierung oder Autorisierung zurückgibt, überprüfen Sie die folgenden Elemente:
Wenn der Fehler mit einem Zeitstempel und dem folgenden Text beginnt: "Fehler beim Abrufen einer Antwort: DefaultAzureCredential: Fehler beim Abrufen eines Tokens.", stellen Sie sicher, dass Sie sich wie zuvor bei der Azure CLI angemeldet haben.
Wenn es sich bei dem Fehler um einen Autorisierungs- oder unzulässigen Fehler handelt (Statuscode 401 oder 403), stellen Sie sicher, dass sich Ihr Benutzerkonto in einer Azure-Rolle befindet, mit der es Rechte zum Erstellen von Ressourcengruppen und zum Hinzufügen von Ressourcen zu Ihrem Abonnement erhält. Beispiele sind die integrierten Azure-Rollen"Mitwirkender" oder "Besitzer". Informationen zum Zuweisen von Azure-Rollen zu Ihrem Benutzer finden Sie unter Zuweisen von Azure-Rollen mithilfe der Azure CLI.
Ausführlichere Anleitungen zur Problembehandlung finden Sie unter "Behandeln von Problemen bei der Azure Identity-Authentifizierung".
Überprüfen der Ressourcen in Azure
Sie können mehrere Azure CLI-Befehle verwenden, um zu überprüfen, ob die Ressourcen erfolgreich in Azure erstellt wurden. Die folgenden Befehle sind einige Beispiele.
Um zu überprüfen, ob die Ressourcengruppe vorhanden ist, führen Sie den Befehl az group exists aus.
az group exists --name deployARM-how-to
Sie können die Ressourcen in der Gruppe mithilfe des Befehls "az-Ressourcenliste " auflisten.
az resource list --resource-group deployARM-how-to
Sie können die Bereitstellungsergebnisse (outputResources) und Eigenschaften mithilfe des Befehls "az deployment group show" untersuchen.
az deployment group show -g deployARM-how-to -n deployARM-how-to
Bereinigen von Ressourcen
Ressourcen in Azure können laufende Gebühren verursachen. Achten Sie darauf, die in diesem Artikel erstellten Ressourcen aufzuräumen.
Durch die Bereitstellung einer leeren Vorlage im vollständigen Modus werden alle Ressourcen innerhalb einer Ressourcengruppe gelöscht. Es ist eine ordentliche Möglichkeit, Ressourcen zu bereinigen, ohne die Ressourcengruppe selbst zu löschen.
Erstellen Sie eine neue leere Vorlage mit dem Namen
empty-template.json.Öffnen Sie
empty-template.jsonin Ihrem Editor, und fügen Sie den folgenden Code hinzu:{ "$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": {}, "variables": {}, "resources": [], "outputs": {} }Öffnen Sie erneut Ihre Datei
main.go.Aktualisieren Sie den
templateFileKonstantenwert aufempty-template.json.const ( resourceGroupName = "deployARM-how-to" resourceGroupLocation = "eastus" deploymentName = "deployARM-how-to" templateFile = "empty-template.json" )Ändern Sie die Bereitstellungszeit von inkrementell auf vollständig, indem Sie die Eigenschaften des Bereitstellungsmodus zu
DeploymentModeCompleteändern. Weitere Informationen zu Bereitstellungsmodi finden Sie unter Azure Resource Manager-Bereitstellungsmodi.deploy, err = deploymentsClient.BeginCreateOrUpdate( ctx, resourceGroupName, deploymentName, armresources.Deployment{ Properties: &armresources.DeploymentProperties{ Template: template, Mode: to.Ptr(armresources.DeploymentModeComplete), //Deployment Mode is here }, }, nil, )Führen Sie den
go runBefehl aus, um die leere Vorlage bereitzustellen, und löschen Sie das zuvor erstellte Speicherkonto.go run main.go
Anstatt eine Bereitstellung zu verwenden, können Sie die Ressourcengruppe und alle zugehörigen Ressourcen löschen, indem Sie den folgenden Azure CLI-Befehl ausführen:
az group delete --resource-group deployARM-how-to