記事「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 Identity から資格情報を取得したら、ターゲットの Azure サービスに接続するクライアントを作成します。
たとえば、 Azure コンピューティング サービスに接続するとします。 コンピューティング パッケージは、1 つ以上のクライアントで構成されます。 クライアントは、関連する API のセットをグループ化し、指定されたサブスクリプション内でその機能にアクセスできるようにします。 必要な API にアクセスする 1 つ以上のクライアントを作成します。
次のコードでは 、armcompute を使用します。仮想マシンを管理するクライアントを作成する NewVirtualMachinesClient の種類 :
client, err := armcompute.NewVirtualMachinesClient("<subscription ID>", cred, nil)
if err != nil {
// handle error
}
他の Azure サービスとの接続にも同じパターンが使用されます。 たとえば、 armnetwork パッケージをインストールし、 仮想ネットワーク (VNET) リソースを管理する仮想ネットワーク クライアントを作成します。
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("<subscription ID>", cred, nil)
if err != nil {
// handle error
}
}
Azure SDK for Go のリファレンス ドキュメントの使用
クライアントをインスタンス化したら、それを使用して Azure リソースへの API 呼び出しを行います。 リソース管理シナリオの場合、ほとんどのユース ケースは CRUD (作成、読み取り、更新、削除) 操作です。
特定の種類の操作を検索するには、次の手順に従います。
- Azure SDK for Go のリファレンス ドキュメントに移動します。
- パッケージを検索します。 ( <Ctrl + F> を押すと、ページ上のすべてのノードが自動的に展開され、検索が行われます)。
- パッケージを選択します。
- パッケージのページで型を検索します。
- Go コードの型の説明と使用状況の情報を読み取ります。
パッケージの名前を github.com/Azure/azure-sdk-for-go/sdk/に追加して、URL を手動でビルドすることもできます。
たとえば、 compute/armcompute リファレンス ドキュメントが必要な場合、URL は github.com/Azure/azure-sdk-for-go/sdk/compute/armcompute。
この例では、Azure リソース グループ操作のリファレンス ドキュメントを見つける方法を示します。
- pkg.go.dev に関する Azure SDK for Go のメイン リファレンス ドキュメント に移動します。
-
<Ctrl + F>を選択し、「
resourcemanager/resources/armresources」と入力します。 検索語句を入力すると、 resources/armresources パッケージと密接に一致することがわかります。 - アプリケーションに適したパッケージを選択します。
- 「はじめに」セクションを読むか、特定の操作を検索します。 たとえば、(リソース グループを作成するために) "resourcegroupsclient.create" を検索すると、 CreateOrUpdate 関数が表示されます。
- API 呼び出しを行って Azure リソース グループを作成する方法について説明します。
長時間実行される操作
一部の操作の完了には時間がかかる場合があるため、管理ライブラリには非同期呼び出しによる実行時間の長い操作 (LRO) をサポートする関数があります。 これらの関数名は、BeginCreateやBeginDeleteなどのBeginで始まります。
これらの関数は非同期であるため、関数がタスクを完了している間、コードはブロックされません。 代わりに、この関数は ポーリング オブジェクト を直ちに返します。 その後、コードは、元の非同期関数が完了すると返される同期ポーリング関数を呼び出します。
次のコード スニペットは、このパターンの例を示しています。
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 の高度な例と一般的なガイドラインが示されています。