Azure SDK for Go を使用してリソース グループを管理する
この記事では、Azure SDK for Go の管理ライブラリを使用してリソース グループを作成する方法について説明します。
1. 環境を構成する
Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
サービス プリンシパルを作成します。 サービス プリンシパルのアプリケーション (クライアント) ID とシークレットをメモします。
重要
Azure リソース管理ライブラリの現在のバージョンのパッケージは、sdk/**/arm**
にあります。 以前のバージョンの管理ライブラリのパッケージは、/services
の下に置かれています。 以前のバージョンを使用している場合は、こちらの Azure SDK for Go 移行ガイドを参照してください。
2. Azure に対して認証する
Azure 認証情報を使用して、コードが Azure に対して認証できるように、適切な環境変数を設定します。
次の環境変数を追加して、
~/.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>"
~/.bashrc
スクリプトを実行するために、source ~/.bashrc
(または同等の省略形である. ~/.bashrc
) を実行します。. ~/.bashrc
環境変数を設定したら、次のように値を確認できます。
printenv | grep ^AZURE*
3. リソース グループを作成する
サンプル Go コードをテストして実行するディレクトリを作成し、それを現在のディレクトリにします。
go mod init を実行して、現在のディレクトリ内にモジュールを作成します。
go mod init <module_path>
重要なポイント:
<module_path>
パラメーターは通常、GitHub リポジトリ内の場所です (github.com/<your_github_account_name>/<directory>
など)。- テストとしてコマンド ライン アプリを作成し、アプリを公開しない場合は、
<module_path>
は存在する必要はありません。
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
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
環境変数から取得されます。location
とresourceGroupName
の文字列には、テスト値が指定されています。 必要に応じて、これらの値を環境に適した値に変更してください。
go mod tidy を実行して、ソース コードに基づいて
go.mod
ファイル内の依存関係をクリーンアップします。go mod tidy
go run
を実行して、アプリをビルドして実行します。go run .
4. 結果を確認する
Azure ポータルにアクセスします。
サインインして、使用する Azure サブスクリプションを選択します。
左側のメニューの [リソース グループ] を選択します。
新しいリソース グループが、Azure サブスクリプションのリソース グループの一覧に表示されます。
5. リソース グループを更新する
main.go
ファイルに戻ります。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 サブスクリプションのリソース グループを一覧表示する
main.go
ファイルに戻ります。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. リソース グループを削除する
main.go
ファイルに戻ります。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")
}
トラブルシューティング
- Stack Overflow に投稿された前の質問を確認するか、
Azure
とGo
のタグを使用して新しい質問をしてください。 - 発生したエラーについては、GitHub の問題を送信してください。
次のステップ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示