次の方法で共有


Azure SDK for Go の管理ライブラリの操作

Azure SDK for Go とは」の記事で説明されているように、Azure SDK for Go には一連の管理ライブラリとクライアント ライブラリが含まれています。 管理ライブラリは、Azure ID のサポート、HTTP パイプライン、エラー処理など、多くの機能を共有します。 管理ライブラリの完全なリストは、Azure SDK for Go のモジュールに関するページで確認できます。

この記事では、管理ライブラリを使用して Azure リソースと対話する方法の基本的な手順について説明します。

Go パッケージのインストール

ほとんどのプロジェクトでは、バージョン管理と依存関係の管理のために Go パッケージをインストールします。

Go パッケージをインストールするには、go get コマンドを使用します。

たとえば、armcompute パッケージをインストールするには、コマンド ラインで次を実行します。

go get github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute

ほとんどの Go アプリでは、次のパッケージをインストールして認証を行います。

  • github.com/Azure/azure-sdk-for-go/sdk/azcore/to
  • github.com/Azure/azure-sdk-for-go/sdk/azidentity

Go コードへのパッケージのインポート

ダウンロードされると、import ステートメントを使用してパッケージがアプリにインポートされます。

import (
    "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/compute/armcompute"
)

Azure への認証

Azure サブスクリプションに対してコードを実行するには、Azure に対して認証する必要があります。 azidentity パッケージでは、Azure に対する認証を行うための複数のオプションがサポートされています。 これらのオプションには、クライアント/シークレット、証明書、マネージド ID が含まれます。

既定の認証オプションは DefaultAzureCredentialです。このオプションでは、この記事で先程設定した環境変数を使用します。 Go コードでは、次のように azidentity オブジェクトを作成します。

cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
  // handle error
}

リソース管理クライアントの作成

Azure ID から資格情報を取得したら、ターゲットの Azure サービスに接続するクライアントを作成します。

たとえば、Azure Compute サービスに接続するとします。 Compute パッケージは、1 つ以上のクライアントで構成されます。 クライアントは、関連する API のセットをグループ化し、指定されたサブスクリプション内の機能へのアクセスを提供します。 必要な API にアクセスするには、クライアントを 1 つ以上作成します。

次のコード スニペットでは、armcompute.NewVirtualMachinesClient 型が、仮想マシンを管理するクライアントを作成するために使用されます。

client, err := armcompute.NewVirtualMachinesClient("<subscription ID>", cred, nil)
if err != nil {
  // handle error
}

同じパターンを使用して、他の Azure サービスに接続します。 たとえば armnetwork パッケージをインストールし、仮想ネットワーク (VNET) リソースを管理する VirtualNetwork クライアントを作成します。

client, err := armnetwork.NewVirtualNetworksClient("<subscription ID>", cred, nil)
if err != nil {
  // handle error
}

コード サンプル:

package main

import (
	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute"
)

func main() {
	cred, err := azidentity.NewDefaultAzureCredential(nil)
	if err != nil {
		// handle error
	}
	client, err := armcompute.NewVirtualMachinesClient("SubID", cred, nil)
	if err != nil {
        // handle error
    }
}

Azure SDK for Go のリファレンス ドキュメントを使用する

クライアントはインスタンス化されると、Azure リソースに対して API 呼び出しを行うのに使用されます。 リソース管理シナリオの場合、ほとんどのユース ケースは CRUD (作成/読み取り/更新/削除) 操作です。

特定の型の操作を検索するには、次の手順を実行します。

  1. Azure SDK for Go のリファレンス ドキュメントに関するページを参照します。
  2. パッケージのページを検索します (<Ctrl+F> を押すと、ページ上のすべてのノードが検索のために自動的に展開されます)。
  3. パッケージを選択します。
  4. パッケージのページで型を検索します。
  5. 型の説明と Go コードでの使用方法に関する情報を読みます。

パッケージの名前を github.com/Azure/azure-sdk-for-go/sdk/ に追加して、URL を手動でビルドすることもできます。

たとえば、compute/armcomputeリファレンス ドキュメントを探している場合 、URL は github.com/Azure/azure-sdk-for-go/sdk/compute/armcompute です。

次の例は、Azure リソース グループ操作のリファレンス ドキュメントを見つける方法を示しています。

  1. pkg.go.dev で、主要な Azure SDK for Go のリファレンス ドキュメントを参照します。
  2. <Ctrl+F> をクリックし、resourcemanager/resources/armresources と入力します。 検索用語を入力すると、検索用語に近い一致としてresource/armresources パッケージが表示されます。
  3. アプリケーションに適したパッケージを SDK を選択します。
  4. 「概要」セクションを読み、特定の操作を検索します。 たとえば、「resourcegroupsclient.create」という用語 (リソース グループを作成する場合) を検索すると、CreateOrUpdate 関数 が表示されます。
  5. この時点で、API 呼び出しを行って Azure リソース グループを作成する方法を確認できます。

長時間にわたって実行される操作

一部の操作の完了には時間がかかる場合があります。管理ライブラリには、非同期呼び出しを介して実行時間の長い操作 (LRO) をサポートする関数が含まれています。 これらの関数名はBegin で始まります。 このパターンの例は、BeginCreateBeginDelete です。

これらの関数は非同期なので、関数がタスクを完了するまでコードによってブロックされません。 代わりに、関数は "ポラー" オブジェクトをすぐに返 します。 その後、コードは、元の非同期関数が完了すると返される同期ポーリング関数を呼び出します。

次のコード スニペットは、このパターンの例です。

ctx := context.Background()
// Call an asynchronous function to create a client. The return value is a poller object.
poller, err := client.BeginCreate(ctx, "resource_identifier", "additional_parameter")

if err != nil {
	// handle error...
}

// Call the poller object's PollUntilDone function that will block until the poller object
// has been updated to indicate the task has completed.
resp, err = poller.PollUntilDone(ctx, nil)
if err != nil {
	// handle error...
}

// Print the fact that the LRO completed.
fmt.Printf("LRO done")

// Work with the response ("resp") object.

重要なポイント:

  • PollUntilDone 関数には、状態の取得を試みる頻度を指定するポーリング間隔が必要です。
  • 通常、間隔は短いです。 推奨される間隔については、特定の Azure リソースに関するドキュメントを参照してください。
  • Go Azure SDK の設計ガイドライン ページの LRO セクションには、より高度な例と LRO に関する一般的なガイドラインがあります。

次の手順