次の方法で共有


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

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

1. Azure リソースを設定する

この記事の手順を完了するには、次の Azure リソースと識別子が必要です。

次のセクションに進む前に、サービス プリンシパルのサブスクリプション ID (Guid)、テナント ID (Guid)、クライアント/アプリケーション ID (Guid) とシークレットをメモしておいてください。

2. 認証を設定する

ニーズに合った認証方法を選択します。 サーバー環境とローカル環境でホストされているアプリに対して、資格情報のない認証方法が複数用意されています。 Azure SDK for Go の記事を使用して Azure サービスに対して Go アプリを認証 すると、シナリオに最適な認証メカニズムを決定するのに役立ちます。

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 を実行して、必要な 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
    

    Important

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

  4. main.goという名前のファイルを作成し、次のコードを追加します。 コードの各セクションは、その目的を説明するためにコメントされます。

    package main
    
    // Import key modules.
    import (
        "context"
        "log"
    
        "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    = "<your_subscription_id>"
        location          = "<your_region>"
        resourceGroupName = "<your_resource_group_name>" // !! 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)
    }
    

    location文字列とresourceGroupName文字列は、テスト値に設定されます。 必要に応じて、これらの値を自分の場所とサブスクリプションに適した値に変更します。

  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.Ptr("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.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
    }
    

コードを追加したら、次のセクションに進みます。 このコードは、後のセクションで実行します。

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 関数を更新する

前のセクションでは、リソース グループを作成、更新、削除するためのコードを main.go に追加しました。 また、Azure サブスクリプション内のすべてのリソース グループを一覧表示するコードも追加しました。 これらすべての関数を順番に実行するには:

  1. main.goで、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. コードを実行し、出力を確認します。

    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
    

    リソース グループの削除には数分かかる場合があります。

トラブルシューティング

次のステップ