Aracılığıyla paylaş


Go için Azure SDK ile kaynak gruplarını yönetme

Bu makalede, Go için Azure SDK yönetim kitaplığı ile kaynak grubu oluşturmayı ve yönetmeyi öğreneceksiniz.

1. Azure kaynaklarını ayarlama

Bu makaledeki adımları tamamlamak için aşağıdaki Azure kaynaklarına ve tanımlayıcılarına ihtiyacınız vardır:

  • Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

  • Azure abonelik kimliğini alın.

  • Microsoft Entra kiracı kimliğini alın.

  • Hizmet sorumlusu oluşturma. Hizmet sorumlusunun uygulama (istemci) kimliğini ve gizli dizisini not edin. Ayrıca, aboneliğinizdeki Katkıda Bulunan rolünü uygulamaya atamak için yönergeleri izlediğinizden emin olun. Katkıda Bulunan rolü, aboneliğinizdeki tüm kaynakları yönetme izni veren ayrıcalıklı bir yönetici rolüdür.

Sonraki bölüme geçmeden önce abonelik kimliğinizi (Guid), kiracı kimliğinizi (Guid) ve hizmet sorumlunuzun istemci/uygulama kimliğini (Guid) ve gizli dizisini not edin.

2. Kimlik doğrulama ortamı değişkenlerini ayarlama

Azure kimlik doğrulama bilgilerinizi kullanarak kodunuzun Azure'da kimlik doğrulaması gerçekleştirebilmesi için uygun ortam değişkenlerini ayarlayın.

Aşağıdaki ortam değişkenlerini ayarlayın. Yer tutucuları önceki bölümdeki uygun değerlerle değiştirin.

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. Kaynak grubu oluşturma

  1. Örnek Go kodunu test edip çalıştırmak ve geçerli dizin yapmak için bir dizin oluşturun.

  2. Geçerli dizinde bir modül oluşturmak için go mod init komutunu çalıştırın.

    go mod init <module_path>
    

    Önemli noktalar:

    • <module_path> parametresi genellikle GitHub deposundaki bir konumdur; örneğingithub.com/<your_github_account_name>/<directory>.
    • Test olarak bir komut satırı uygulaması oluştururken ve uygulamayı yayımlamazsanız, öğesinin <module_path> gerçek bir konuma başvurması gerekmez.
  3. go komutunu çalıştırarak gerekli Go için Azure SDK modüllerini indirin, derleyin ve yükleyin.

    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
    

    Önemli

    Azure kaynak yönetimi kitaplıklarının geçerli sürümünün paketleri içinde sdk/**/arm**bulunur. Yönetim kitaplıklarının önceki sürümünün paketleri altında /servicesbulunur. Eski sürümü kullanıyorsanız Bkz . Go için Azure SDK Geçiş Kılavuzu.

  4. adlı main.go bir dosya oluşturun ve aşağıdaki kodu ekleyin. Kodun her bölümü amacını açıklamak için yorumlanır.

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

    Önemli noktalar:

    • subscriptionId Değer ortam değişkeninden AZURE_SUBSCRIPTION_ID alınır.
    • location ve resourceGroupName dizeleri, değerleri test etmek için ayarlanır. Gerekirse bu değerleri konumunuza ve aboneliğinize uygun bir değerle değiştirin.
  5. Kaynak kodunuz temelinde dosyadaki go.mod bağımlılıkları temizlemek için go mod tidy komutunu çalıştırın.

    go mod tidy
    
  6. go run Uygulamayı derlemek ve çalıştırmak için komutunu çalıştırın.

    go run .
    

4. Sonuçları doğrulayın

  1. Azure portala gidin.

  2. Oturum açın ve Azure aboneliğinizi seçin.

  3. Soldaki menüden Kaynak grupları'nı seçin.

  4. Yeni kaynak grubu, Azure aboneliğinizin kaynak grupları arasında listelenir.

5. Kaynak grubunu güncelleştirme

  1. Dosyanıza main.go dönün.

  2. Aşağıdaki kodu işlevin main hemen üstüne ekleyin.

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

Kodu ekledikten sonra sonraki bölüme geçin. Kodu sonraki bir bölümde çalıştıracaksınız.

6. Azure aboneliğinin kaynak gruplarını listeleme

  1. Dosyanıza main.go dönün.

  2. Aşağıdaki kodu işlevin main hemen üstüne ekleyin.

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

Kodu ekledikten sonra sonraki bölüme geçin. Kodu sonraki bir bölümde çalıştıracaksınız.

7. Kaynak grubunu silme

  1. Dosyanıza main.go dönün.

  2. Aşağıdaki kodu işlevin main hemen üstüne ekleyin.

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

Kodu ekledikten sonra sonraki bölüme geçin. Kodu sonraki bir bölümde çalıştıracaksınız.

8. Ana işlevi güncelleştirin

Önceki bölümlerde, bir kaynak grubu oluşturmak, güncelleştirmek ve silmek için 'a main.go kod eklediniz. Ayrıca bir Azure aboneliğindeki tüm kaynak gruplarını listelemek için kod eklediniz. Tüm bu işlevleri sırayla çalıştırmak için:

  1. içinde main.goişlevini aşağıdaki kodla değiştirin main :

    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")
    }
    
  2. Kodu çalıştırın ve çıkışı gözlemleyin.

    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
    

    Not

    Kaynak grubunun silinmesi birkaç dakika sürebilir.

Sorun giderme

Sonraki adımlar