Zarządzanie grupami zasobów za pomocą zestawu Azure SDK dla języka Go
Z tego artykułu dowiesz się, jak utworzyć grupę zasobów i zarządzać nią za pomocą biblioteki zarządzania zestawu Azure SDK for Go.
1. Konfigurowanie zasobów platformy Azure
Aby wykonać kroki opisane w tym artykule, potrzebne są następujące zasoby i identyfikatory platformy Azure:
Subskrypcja platformy Azure: jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Pobierz identyfikator subskrypcji platformy Azure.
Pobierz identyfikator dzierżawy firmy Microsoft Entra.
Utwórz jednostkę usługi. Zanotuj identyfikator aplikacji (klienta) i wpis tajny jednostki usługi. Upewnij się również, że postępuj zgodnie z instrukcjami, aby przypisać rolę Współautor w subskrypcji do aplikacji. Rola Współautor to rola uprzywilejowanego administratora, która przyznaje uprawnienia do zarządzania wszystkimi zasobami w ramach subskrypcji.
Przed przejściem do następnej sekcji upewnij się, że zanotowano identyfikator subskrypcji (Guid), identyfikator dzierżawy (Guid) oraz identyfikator klienta/aplikacji (Guid) i wpis tajny dla jednostki usługi.
2. Ustawianie zmiennych środowiskowych uwierzytelniania
Korzystając z informacji o uwierzytelnianiu platformy Azure, ustaw odpowiednie zmienne środowiskowe, aby kod mógł uwierzytelniać się na platformie Azure.
Ustaw następujące zmienne środowiskowe. Zastąp symbole zastępcze odpowiednimi wartościami z poprzedniej sekcji.
export AZURE_SUBSCRIPTION_ID="<azure_subscription_id>"
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"
3. Tworzenie grupy zasobów
Utwórz katalog, w którym chcesz przetestować i uruchomić przykładowy kod języka Go, i utwórz go jako bieżący katalog.
Uruchom polecenie go mod init , aby utworzyć moduł w bieżącym katalogu.
go mod init <module_path>
Kluczowe punkty:
- Parametr
<module_path>
jest zazwyczaj lokalizacją w repozytorium GitHub — takim jakgithub.com/<your_github_account_name>/<directory>
. - Gdy tworzysz aplikację wiersza polecenia jako test i nie opublikujesz aplikacji,
<module_path>
nie trzeba odwoływać się do rzeczywistej lokalizacji.
- Parametr
Uruchom polecenie Przejdź , aby pobrać, skompilować i zainstalować niezbędny zestaw Azure SDK dla modułów języka Go.
go get github.com/Azure/azure-sdk-for-go/sdk/azcore 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/armresources
Ważne
Pakiety dla bieżącej wersji bibliotek zarządzania zasobami platformy Azure znajdują się w
sdk/**/arm**
lokalizacji . Pakiety dla poprzedniej wersji bibliotek zarządzania znajdują się w obszarze/services
. Jeśli używasz starszej wersji, zobacz Przewodnik po migracji zestawu Azure SDK dla języka Go.Utwórz plik o nazwie
main.go
i dodaj następujący kod. Każda sekcja kodu jest komentowana, aby wyjaśnić jego przeznaczenie.package main // Import key modules. import ( "context" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/azcore" "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" ) // Define key global variables. var ( subscriptionId = os.Getenv("AZURE_SUBSCRIPTION_ID") location = "eastus" resourceGroupName = "myResourceGroup" // !! IMPORTANT: Change this to a unique name in your subscription. ctx = context.Background() ) // Define the function to create a resource group. func createResourceGroup(subscriptionId string, credential azcore.TokenCredential) (armresources.ResourceGroupsClientCreateOrUpdateResponse, error) { rgClient, _ := armresources.NewResourceGroupsClient(subscriptionId, credential, nil) param := armresources.ResourceGroup{ Location: to.Ptr(location), } return rgClient.CreateOrUpdate(ctx, resourceGroupName, param, nil) } // Define the standard 'main' function for an app that is called from the command line. func main() { // Create a credentials object. cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { log.Fatalf("Authentication failure: %+v", err) } // Call your function to create an Azure resource group. resourceGroup, err := createResourceGroup(subscriptionId, cred) if err != nil { log.Fatalf("Creation of resource group failed: %+v", err) } // Print the name of the new resource group. log.Printf("Resource group %s created", *resourceGroup.ResourceGroup.ID) }
Kluczowe punkty:
- Wartość
subscriptionId
jest pobierana ze zmiennej środowiskowejAZURE_SUBSCRIPTION_ID
. - Ciągi
location
iresourceGroupName
są ustawione na wartości testowe. W razie potrzeby zmień te wartości na odpowiednie dla Twojej lokalizacji i subskrypcji.
- Wartość
Uruchom polecenie go mod tidy , aby wyczyścić zależności w
go.mod
pliku na podstawie kodu źródłowego.go mod tidy
Uruchom polecenie
go run
, aby skompilować i uruchomić aplikację.go run .
4. Sprawdź wyniki
Przejdź do witryny Azure Portal.
Zaloguj się i wybierz subskrypcję platformy Azure.
W menu po lewej stronie wybierz pozycję Grupy zasobów.
Nowa grupa zasobów jest wymieniona wśród grup zasobów subskrypcji platformy Azure.
5. Aktualizowanie grupy zasobów
Wróć do
main.go
pliku.Wstaw następujący kod tuż nad funkcją
main
.// Update the resource group by adding a tag to it. func updateResourceGroup(subscriptionId string, credential azcore.TokenCredential) (armresources.ResourceGroupsClientUpdateResponse, error) { rgClient, _ := armresources.NewResourceGroupsClient(subscriptionId, credential, nil) update := armresources.ResourceGroupPatchable{ Tags: map[string]*string{ "new": to.Ptr("tag"), }, } return rgClient.Update(ctx, resourceGroupName, update, nil) }
Po dodaniu kodu przejdź do następnej sekcji. Kod jest uruchamiany w późniejszej sekcji.
6. Wyświetlanie listy grup zasobów subskrypcji platformy Azure
Wróć do
main.go
pliku.Wstaw następujący kod tuż nad funkcją
main
.// List all the resource groups of an Azure subscription. func listResourceGroups(subscriptionId string, credential azcore.TokenCredential) ([]*armresources.ResourceGroup, error) { rgClient, _ := armresources.NewResourceGroupsClient(subscriptionId, credential, nil) pager := rgClient.NewListPager(nil) var resourceGroups []*armresources.ResourceGroup for pager.More() { resp, err := pager.NextPage(ctx) if err != nil { return nil, err } if resp.ResourceGroupListResult.Value != nil { resourceGroups = append(resourceGroups, resp.ResourceGroupListResult.Value...) } } return resourceGroups, nil }
Po dodaniu kodu przejdź do następnej sekcji. Kod jest uruchamiany w późniejszej sekcji.
7. Usuwanie grupy zasobów
Wróć do
main.go
pliku.Wstaw następujący kod tuż nad funkcją
main
.// Delete a resource group. func deleteResourceGroup(subscriptionId string, credential azcore.TokenCredential) error { rgClient := armresources.NewResourceGroupsClient(subscriptionId, credential, nil) poller, err := rgClient.BeginDelete(ctx, resourceGroupName, nil) if err != nil { return err } if _, err := poller.PollUntilDone(ctx, nil); err != nil { return err } return nil }
Po dodaniu kodu przejdź do następnej sekcji. Kod jest uruchamiany w późniejszej sekcji.
8. Aktualizowanie funkcji main
W poprzednich sekcjach dodano kod umożliwiający main.go
tworzenie, aktualizowanie i usuwanie grupy zasobów. Dodano również kod, aby wyświetlić listę wszystkich grup zasobów w subskrypcji platformy Azure. Aby uruchomić wszystkie te funkcje sekwencyjnie:
W
main.go
pliku zastąpmain
funkcję następującym kodem:func main() { // Create a credentials object. cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { log.Fatalf("Authentication failure: %+v", err) } // Call your function to create an Azure resource group. resourceGroup, err := createResourceGroup(subscriptionId, cred) if err != nil { log.Fatalf("Creation of resource group failed: %+v", err) } // Print the name of the new resource group. log.Printf("Resource group %s created", *resourceGroup.ResourceGroup.ID) // Call your function to add a tag to your new resource group. updatedRG, err := updateResourceGroup(subscriptionId, cred) if err != nil { log.Fatalf("Update of resource group failed: %+v", err) } log.Printf("Resource Group %s updated", *updatedRG.ResourceGroup.ID) // Call your function to list all the resource groups. rgList, err := listResourceGroups(subscriptionId, cred) if err != nil { log.Fatalf("Listing of resource groups failed: %+v", err) } log.Printf("Your Azure subscription has a total of %d resource groups", len(rgList)) // Call your function to delete the resource group you created. if err := deleteResourceGroup(subscriptionId, cred); err != nil { log.Fatalf("Deletion of resource group failed: %+v", err) } log.Printf("Resource group deleted") }
Uruchom kod i obserwuj dane wyjściowe.
go run .
2024/07/31 15:29:06 Resource group /subscriptions/<subscription ID>/resourceGroups/myResourceGroup created 2024/07/31 15:29:07 Resource Group /subscriptions/<subscription ID>/resourceGroups/myResourceGroup updated 2024/07/31 15:29:07 Your Azure subscription has a total of 8 resource groups 2024/07/31 15:30:25 Resource group deleted
Uwaga
Usunięcie grupy zasobów może potrwać kilka minut.
Rozwiązywanie problemów
- Sprawdź poprzednie pytania opublikowane w witrynie Stack Overflow lub zadaj nowe pytania przy użyciu
Azure
tagów i .Go
- W przypadku napotkanych błędów zgłoś problem z usługą GitHub