Go ライブラリのAzure SDKの概要

go のAzure SDKには、管理ライブラリとデータ プレーン クライアント ライブラリの両方が含まれています。 この記事では、ライブラリの概要、ライブラリがAzureワークフローにどのように適合するか、Go 固有のパターンについて次に進む場所を理解できるようにします。

管理ライブラリ

管理ライブラリを使用して、Azure リソースをプロビジョニング、構成、管理します。 リソース内に格納されているデータではなく、リソース自体の管理に重点を置いて取り組みます。 管理ライブラリは control plane 操作を実行し、Azureリソースとサービス構成を管理します。 一般的なタスクは次のとおりです。

  • リソース グループ、仮想ネットワーク、または仮想マシンの作成または更新。
  • セキュリティ設定、ID、アクセス ポリシー、診断の構成。
  • サブスクリプション全体のリソースAzure一覧表示、タグ付け、削除。
  • デプロイ、クリーンアップ、コンプライアンス、プラットフォーム操作の自動化。

管理ライブラリ パッケージには、 armcomputearmnetworkarmkeyvaultなどの名前があります。 アプリケーション ライフサイクルのセットアップ、構成、ガバナンスの各フェーズで管理ライブラリを使用します。 パッケージの詳細なドキュメントについては、 pkg.go.dev でパッケージを検索します。

クライアント ライブラリ

Go アプリケーションが既にプロビジョニングされているAzure サービス内のデータまたはランタイム サーフェスを操作する必要がある場合は、クライアント ライブラリを使用します。 クライアント ライブラリは データ プレーン 操作を実行します。データ プレーン操作は、サービスに格納されているデータまたはサービス内を流れるデータと連携します。 一般的なタスクは次のとおりです。

  • ストレージ アカウントからの BLOB のアップロードとダウンロード。
  • Service Busまたは Event Hubs を使用したメッセージの送受信。
  • データベース内のレコードの読み取り、書き込み、または削除。
  • Key Vaultからシークレットを取得しています。
  • プロビジョニングされたリソースに対するクエリまたは操作の実行。

クライアント ライブラリ パッケージには、 azblobazstorageazsecretsazservicebusazeventhubsなどの名前があります。 管理ライブラリを使用して基になるAzure サービスを既にプロビジョニングした後で、クライアント ライブラリを使用します。 パッケージの詳細なドキュメントについては、 pkg.go.dev でパッケージを検索します。

管理ライブラリとクライアント ライブラリの両方を使用する

単一の Go ソリューションでは、コントロール プレーンとデータ プレーン間で管理ライブラリとクライアント ライブラリの両方を使用できます。 たとえば、セットアップ時に管理ライブラリを使用してストレージ アカウント (コントロール プレーン) を作成し、アプリケーションのクライアント ライブラリを使用して BLOB (データ プレーン) をアップロードおよびダウンロードできます。 区別を理解することは、ワークフロー内の各タスクに適したライブラリを選択するのに役立ちます。

各平面の Go 固有のパターンと例については、次の記事を参照してください。

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 SDK ライブラリを使用する Go アプリは、Azure Id ライブラリでMicrosoft Entra IDを使用して認証する必要があります。 トークンベースの認証は、接続文字列やキーよりも安全で管理しやすいです。 推奨される資格情報は、アプリの実行場所によって異なります。Azureホスト型アプリにはマネージド ID を使用し、ローカル開発には開発者の資格情報またはサービス プリンシパルを使用し、ほとんどのオンプレミス シナリオではサービス プリンシパルを使用します。

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

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

認証の詳細については、「Go 認証のAzure SDK」を参照してください。

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

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

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

次のコードでは、armcompute を使用します。NewVirtualMachinesClient type 仮想マシンを管理するクライアントを作成します。

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

Go を使用したAzure リソースの管理の詳細については、「コントロール プレーン操作の Go のAzure SDKを使用する」を参照してください。

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

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 サービスで Go のAzure SDKを使用する方法の詳細については、「データ プレーン操作で Go のAzure SDKを使用するを参照してください。

go リポジトリのAzure SDKの使用

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

特定の種類の操作を検索するには、go GitHub リポジトリのAzure SDKでソースを参照します。 SDK ソースは sdk/ ディレクトリに編成され、管理ライブラリは sdk/resourcemanager/ の下にあり、クライアント ライブラリは sdk/storage/sdk/security/keyvault/ などのサービス固有のフォルダーにあります。

特定の種類のソースを見つけるには、次の手順に従います。

  1. GitHubのAzure SDK for Goリポジトリに移動します。
  2. 管理ライブラリの sdk/resourcemanager/ に移動するか、クライアント ライブラリの sdk/ に移動します。
  3. サービス フォルダーを開き、パッケージ フォルダーを開きます。 たとえば、「 sdk/resourcemanager/compute/armcompute/ 」のように入力します。
  4. 必要な種類を含むソース ファイルを見つけます。 通常、クライアントの種類とそのメソッドは、 virtualmachines_client.goなど、クライアントの名前が付けられたファイル内にあります。
  5. 使用情報を得るために、型のコメントとメソッドシグネチャを読みます。

URL を直接ビルドすることもできます。 たとえば、リソース グループの操作ソースを検索するには、https://github.com/Azure/azure-sdk-for-go/tree/main/sdk/resourcemanager/resources/armresources に移動します。

この例では、Azure リソース グループ操作のソースを検索する方法を示します。

  1. GitHubのAzure SDK for Go リポジトリに移動します。
  2. sdk/resourcemanager/resources/armresources/ に移動します。
  3. resource_groups_client.go を開き、ResourceGroupsClient 型とそのCreateOrUpdate メソッドを検索します。
  4. メソッドのコメントとパラメーターを読み、API 呼び出しの方法を理解します。

生成されたリファレンス ドキュメントについては、pkg.go.dev でパッケージを検索します。

長時間実行される操作

一部の操作の完了には長い時間がかかります。 これらの操作を処理するために、管理ライブラリには、非同期呼び出しによる実行時間の長い操作 (LRO) をサポートする関数が用意されています。 これらの関数名は、BeginBeginCreateなどのBeginDeleteで始まります。

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

次のコード スニペットは、このパターンの例を示しています。

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関数には、状態の取得を試行する頻度を指定するポーリング間隔が必要です。 options パラメーターに nil を渡す場合、interval の既定値は 30 秒になります が、ニーズに応じて調整できます。
  • 通常、間隔は短くなります。 推奨される間隔については、特定のAzure リソースのドキュメントを参照してください。
  • [Go Azure SDK Design Guidelines]\(デザイン ガイドライン\) ページの LRO セクションには、LRO のより高度な例と一般的なガイドラインがあります。

パターンの詳細については、「Azure SDK for Go の共通使用パターン」を参照してください。

次のステップ

認証、クライアント構築、実行時間の長い操作、サービスのチュートリアル パターンの詳細については、プレーン固有の記事を参照してください。

例については、GitHub の Go サンプルの Azure SDK を参照してください。