Azure SDK for Go を使用してリソース グループを管理する

この記事では、Azure SDK for Go の管理ライブラリを使用してリソース グループを作成する方法について説明します。

1. 環境を構成する

重要

Azure リソース管理ライブラリの現在のバージョンのパッケージは、sdk/**/arm** にあります。 以前のバージョンの管理ライブラリのパッケージは、/services の下に置かれています。 以前のバージョンを使用している場合は、こちらの Azure SDK for Go 移行ガイドを参照してください。

2. Azure に対して認証する

Azure 認証情報を使用して、コードが Azure に対して認証できるように、適切な環境変数を設定します。

  1. 次の環境変数を追加して、~/.bashrc ファイルを編集します。 プレースホルダーは、前のセクションからの適切な値に置き換えてください。

    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>"
    
  2. ~/.bashrc スクリプトを実行するために、source ~/.bashrc (または同等の省略形である . ~/.bashrc) を実行します。

    . ~/.bashrc
    
  3. 環境変数を設定したら、次のように値を確認できます。

    printenv | grep ^AZURE*
    

3. リソース グループを作成する

  1. サンプル Go コードをテストして実行するディレクトリを作成し、それを現在のディレクトリにします。

  2. go mod init を実行して、現在のディレクトリ内にモジュールを作成します。

    go mod init <module_path>
    

    重要なポイント:

    • <module_path> パラメーターは通常、GitHub リポジトリ内の場所です (github.com/<your_github_account_name>/<directory> など)。
    • テストとしてコマンド ライン アプリを作成し、アプリを公開しない場合は、<module_path> は存在する必要はありません。
  3. go get を実行して、必要な Azure SDK for 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
    
  4. main.go という名前のファイルを作成し、次のコードを挿入します。 コードの各セクションには、その目的を説明するためのコメントが付けられています。

    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.StringPtr(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)
    }
    

    重要なポイント:

    • subscriptionId の値は、AZURE_SUBSCRIPTION_ID 環境変数から取得されます。
    • locationresourceGroupName の文字列には、テスト値が指定されています。 必要に応じて、これらの値を環境に適した値に変更してください。
  5. go mod tidy を実行して、ソース コードに基づいて go.mod ファイル内の依存関係をクリーンアップします。

    go mod tidy
    
  6. go run を実行して、アプリをビルドして実行します。

    go run .
    

4. 結果を確認する

  1. Azure ポータルにアクセスします。

  2. サインインして、使用する Azure サブスクリプションを選択します。

  3. 左側のメニューの [リソース グループ] を選択します。

  4. 新しいリソース グループが、Azure サブスクリプションのリソース グループの一覧に表示されます。

5. リソース グループを更新する

  1. main.go ファイルに戻ります。

  2. 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.StringPtr("tag"),
            },
        }
        return rgClient.Update(ctx, resourceGroupName, update, nil)
    }
    

6. Azure サブスクリプションのリソース グループを一覧表示する

  1. main.go ファイルに戻ります。

  2. 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.List(nil)
    
        var resourceGroups []*armresources.ResourceGroup
        for pager.NextPage(ctx) {
            resp := pager.PageResponse()
            if resp.ResourceGroupListResult.Value != nil {
                resourceGroups = append(resourceGroups, resp.ResourceGroupListResult.Value...)
            }
        }
        return resourceGroups, pager.Err()
    }
    

7. リソース グループを削除する

  1. main.go ファイルに戻ります。

  2. 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
    }
    

8. main 関数を更新する

この記事では、リソース グループを作成、更新、および削除する方法について確認しました。 また、Azure サブスクリプションのすべてのリソース グループを一覧表示する方法についても確認しました。 これらの関数を順番に実行するには、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")
}

トラブルシューティング

次のステップ