Azure Stack Hub での Ruby による API バージョンのプロファイルの使用

Ruby と API バージョンのプロファイル

Azure Stack Hub Resource Manager 向けの Ruby SDK には、インフラストラクチャの構築と管理に役立つツールが用意されています。 SDK のリソース プロバイダーには、Ruby 言語を使用した Compute、Virtual Network、Storage があります。 Ruby SDK に含まれている API プロファイルを使用すると、グローバルな Azure リソースと Azure Stack Hub 上のリソース間を切り替えることで、ハイブリッド クラウド開発を行うことができます。

API プロファイルは、リソース プロバイダーとサービス バージョンを組み合わせたものです。 API プロファイルを使用すると、種類の異なる複数のリソースを組み合わせることができます。

  • すべてのサービスの最新バージョンを使用するには、Azure SDK ロールアップ gem の Latest プロファイルを使用します。
  • プロファイルの名前は、V2020_09_01_HybridV2019_03_01_Hybrid などの形式の日付によって指定されます。
  • サービスの最新の api-version を使用するには、特定の gem の Latest プロファイルを使用します。 たとえば、Compute サービスの最新の api-version を単独で使用する場合は、Compute gem の Latest プロファイルを使用します。
  • サービスの特定の api-version を使用するには、gem 内で定義された特定の API バージョンを使用します。

Azure Ruby SDK のインストール

  • Git のインストール。

  • Ruby をインストールします。

    • インストール時には、PATH 変数に Ruby を追加するためのオプションを選択します。

    • Ruby のインストール時にプロンプトが表示された場合は、開発キットをインストールします。

    • 次に、下記のコマンドを使用して bundler をインストールします。

      Gem install bundler
      
  • 使用できない場合は、サブスクリプションを作成し、サブスクリプション ID を保存して後で使用します。 サブスクリプションの作成手順については、「Azure Stack Hub でオファーのサブスクリプションを作成する」の記事で説明しています。

  • サービス プリンシパルを作成し、その ID とシークレットを保存します。 Azure Stack Hub 向けサービス プリンシパルの作成手順については、「アプリ ID を使用してリソースにアクセスする」の記事で説明しています。

  • サブスクリプションでサービス プリンシパルに共同作成者/所有者ロールが割り当てられていることを確認します。 サービス プリンシパルへのロールの割り当て方法に関する手順は、「アプリ ID を使用してリソースにアクセスする」の記事で説明されています。

RubyGem パッケージをインストールする

Azure RubyGem パッケージは直接インストールできます。

gem install azure_mgmt_compute
gem install azure_mgmt_storage
gem install azure_mgmt_resources
gem install azure_mgmt_network

または、Gemfile でそれらを使用します。

gem 'azure_mgmt_storage'
gem 'azure_mgmt_compute'
gem 'azure_mgmt_resources'
gem 'azure_mgmt_network'

Azure Resource Manager Ruby SDK は現在プレビュー段階であり、今後のリリースで重大なインターフェイス変更が加えられる見込みです。 マイナー バージョンの番号が上がっただけでも、重大な変更を示している可能性があります。

azure_sdk gem を使用する

azure_sdk gem は、Ruby SDK でサポートされているすべての gem をまとめたロールアップです。

azure_sdk ロールアップ gem は、次のコマンドを使用してインストールできます。

gem install 'azure_sdk'

Profiles

日付を含むプロファイルの場合、別の SDK プロファイルまたはバージョンを使用するには、V<date>_Hybrid 内の日付を置き換えます。 たとえば、2008 バージョンの場合、プロファイルは 2019_03_01 で、文字列は V2019_03_01_Hybrid になります。 SDK チームによってパッケージの名前が変更されることがあるため、文字列の日付を別の日付に置き換えるだけでは機能しない場合があることに注意してください。 プロファイルと Azure Stack バージョンの関連付けについては、次の表を参照してください。

日付の代わりに、latest を使用することもできます。

Azure Stack バージョン プロファイル
2311 2020_09_01
2301 2020_09_01
2206 2020_09_01
2108 2020_09_01
2102 2020_09_01
2008 2019_03_01

Azure Stack Hub および API プロファイルについて詳しくは、「API プロファイルの概要」をご覧ください。

Ruby SDK プロファイルに関するページを参照してください。

サブスクリプション

サブスクリプションをまだ用意していない場合は、サブスクリプションを作成し、後で使用できるようにサブスクリプション ID を保存します。 サブスクリプションの作成方法の詳細については、こちらのドキュメントを参照してください。

サービス プリンシパル

サービス プリンシパルとそれに関連付けられている環境情報を作成し、どこかに保存する必要があります。 owner ロールを持つサービス プリンシパルの使用をお勧めしますが、サンプルによっては contributor ロールで十分な場合もあります。 必要な値については、次の表を参照してください。

環境変数 説明
テナント ID AZURE_TENANT_ID Azure Stack Hub のテナント ID
クライアント ID AZURE_CLIENT_ID この記事の前のセクションでサービス プリンシパルが作成されたときに保存した、サービス プリンシパル アプリ ID。
サブスクリプション ID AZURE_SUBSCRIPTION_ID サブスクリプション ID は Azure Stack Hub 内のオファーにアクセスするために使用します。
クライアント シークレット AZURE_CLIENT_SECRET サービス プリンシパルの作成時に保存した、サービス プリンシパル アプリ シークレット。
Resource Manager エンドポイント ARM_ENDPOINT Azure Stack Hub Resource Manager エンドポイント に関する記事を参照してください。

テナント ID

Azure Stack Hub のディレクトリまたはテナント ID を確認するには、この記事の手順に従ってください。

リソース プロバイダーを登録する

こちらのドキュメントに従って、必要なリソース プロバイダーを登録してください。 実行するサンプルに応じて、これらのリソース プロバイダーが必要になります。 たとえば、VM サンプルを実行する場合は、Microsoft.Compute リソース プロバイダーの登録が必要です。

Azure Stack Resource Manager エンドポイント

Azure Resource Manager (ARM) は、管理者が Azure リソースのデプロイ、管理、監視を行えるようにするための管理フレームワークです。 Azure Resource Manager では、これらのタスクを個別に処理するのではなく、グループとして単一の操作で処理することができます。 Resource Manager エンドポイントからメタデータ情報を取得できます。 エンドポイントは、コードを実行するために必要な情報と共に、JSON ファイルを返します。

  • Azure Stack Development Kit (ASDK) の ResourceManagerEndpointUrlhttps://management.local.azurestack.external/ です。
  • 統合システムの ResourceManagerEndpointUrlhttps://management.region.<fqdn>/ です。ここで、<fqdn> は完全修飾ドメイン名です。
  • 必要なメタデータを取得するには、<ResourceManagerUrl>/metadata/endpoints?api-version=1.0 になります。 利用可能な API バージョンについては、Azure REST API の仕様を参照してください。 たとえば、プロファイル バージョン 2020-09-01 では、api-version を、リソース プロバイダー 2019-10-01 用の microsoft.resources に変更することができます。

サンプル JSON:

{
   "galleryEndpoint": "https://portal.local.azurestack.external:30015/",
   "graphEndpoint": "https://graph.windows.net/",
   "portal Endpoint": "https://portal.local.azurestack.external/",
   "authentication": 
      {
         "loginEndpoint": "https://login.windows.net/",
         "audiences": ["https://management.yourtenant.onmicrosoft.com/3cc5febd-e4b7-4a85-a2ed-1d730e2f5928"]
      }
}

環境変数の設定

Microsoft Windows

環境変数を設定するには、Windows コマンド プロンプトで次の形式を使用します。

set AZURE_TENANT_ID=<YOUR_TENANT_ID>

macOS、Linux、および Unix ベースのシステム

Unix ベースのシステムでは、次のコマンドを使用します。

export AZURE_TENANT_ID=<YOUR_TENANT_ID>

Azure Stack Hub および API プロファイルについて詳しくは、「API プロファイルの概要」をご覧ください。

Azure Ruby SDK API プロファイルの使用

次のコードを使用して、プロファイル クライアントをインスタンス化します。 このパラメーターは、Azure Stack Hub またはまたはその他のプライベート クラウドにのみ必要です。 グローバル Azure では、既定でこれらの設定が使用されます。

active_directory_settings = get_active_directory_settings(ENV['ARM_ENDPOINT'])

provider = MsRestAzure::ApplicationTokenProvider.new(
  ENV['AZURE_TENANT_ID'],
  ENV['AZURE_CLIENT_ID'],
  ENV['AZURE_CLIENT_SECRET'],
  active_directory_settings
)
credentials = MsRest::TokenCredentials.new(provider)
options = {
  credentials: credentials,
  subscription_id: subscription_id,
  active_directory_settings: active_directory_settings,
  base_url: ENV['ARM_ENDPOINT']
}

# Target profile built for Azure Stack Hub
client = Azure::Resources::Profiles::V2019_03_01_Hybrid::Mgmt::Client.new(options)

プロファイル クライアントは、個別のリソース プロバイダー (Compute、Storage、Network など) にアクセスするために使用できます。

# To access the operations associated with Compute
profile_client.compute.virtual_machines.get 'RESOURCE_GROUP_NAME', 'VIRTUAL_MACHINE_NAME'

# Option 1: To access the models associated with Compute
purchase_plan_obj = profile_client.compute.model_classes.purchase_plan.new

# Option 2: To access the models associated with Compute
# Notice Namespace: Azure::Profiles::<Profile Name>::<Service Name>::Mgmt::Models::<Model Name>
purchase_plan_obj = Azure::Profiles::V2019_03_01_Hybrid::Compute::Mgmt::Models::PurchasePlan.new

Azure Stack Hub 環境設定関数の定義

サービス プリンシパルを Azure Stack Hub 環境に対して認証するには、get_active_directory_settings() を使用してエンドポイントを定義します。 このメソッドでは、前に設定した ARM_Endpoint環境変数を使用します。

# Get Authentication endpoints using Arm Metadata Endpoints
def get_active_directory_settings(armEndpoint)
  settings = MsRestAzure::ActiveDirectoryServiceSettings.new
  response = Net::HTTP.get_response(URI("#{armEndpoint}/metadata/endpoints?api-version=1.0"))
  status_code = response.code
  response_content = response.body
  unless status_code == "200"
    error_model = JSON.load(response_content)
    fail MsRestAzure::AzureOperationError.new("Getting Azure Stack Hub Metadata Endpoints", response, error_model)
  end
  result = JSON.load(response_content)
  settings.authentication_endpoint = result['authentication']['loginEndpoint'] unless result['authentication']['loginEndpoint'].nil?
  settings.token_audience = result['authentication']['audiences'][0] unless result['authentication']['audiences'][0].nil?
  settings
end

サンプル

Ruby と Azure Stack Hub の API のプロファイルを使用してソリューションを作成する場合は、GitHub の次のサンプルを参考資料として使用します。

Resource Manager とグループのサンプル

このサンプルを実行するには、Ruby がインストールされていることを確認してください。 Visual Studio Code を使用している場合は、Ruby SDK 拡張機能もダウンロードしてください。

Note

サンプルのリポジトリは、Hybrid-Resource-Manager-Ruby-Resources-And-Groupsです。

  1. リポジトリを複製します。

    git clone https://github.com/Azure-Samples/Hybrid-Resource-Manager-Ruby-Resources-And-Groups.git
    
  2. bundle を使用して依存関係をインストールします。

    cd Hybrid-Resource-Manager-Ruby-Resources-And-Groups
    bundle install
    
  3. PowerShell を使用して Azure サービス プリンシパルを作成し、必要な値を取得します。

    サービス プリンシパルの作成方法については、「Azure PowerShell を使用して資格情報でのサービス プリンシパルを作成する」をご覧ください。

    必要な値は次のとおりです。

    • テナント ID
    • クライアント ID
    • クライアント シークレット
    • サブスクリプション ID
    • Resource Manager エンドポイント

    作成したサービス プリンシパルから取得した情報を使用して、次の環境変数を設定します。

    • export AZURE_TENANT_ID={your tenant ID}
    • export AZURE_CLIENT_ID={your client ID}
    • export AZURE_CLIENT_SECRET={your client secret}
    • export AZURE_SUBSCRIPTION_ID={your subscription ID}
    • export ARM_ENDPOINT={your Azure Stack Hub Resource Manager URL}

    Note

    Windows では、exportではなく、setを使用します。

  4. location 変数が、たとえば LOCAL="local" のように確実に Azure Stack Hub の場所に設定されているようにします。

  5. Azure Stack Hub またはその他のプライベート クラウドを使用している場合は、次のコード行を追加して、適切な Active Directory エンドポイントをターゲットにします。

    active_directory_settings = get_active_directory_settings(ENV['ARM_ENDPOINT'])
    
  6. options 変数内で、Azure Stack Hub と連携するための Active Directory 設定とベース URL を追加します。

    options = {
    credentials: credentials,
    subscription_id: subscription_id,
    active_directory_settings: active_directory_settings,
    base_url: ENV['ARM_ENDPOINT']
    }
    
  7. Azure Stack Hub プロファイルをターゲットとするプロファイル クライアントを作成します。

    client = Azure::Resources::Profiles::V2019_03_01_Hybrid::Mgmt::Client.new(options)
    
  8. サービス プリンシパルを Azure Stack Hub に対して認証するには、get_active_directory_settings() を使用してエンドポイントを定義します。 このメソッドでは、前に設定した ARM_Endpoint環境変数を使用します。

    def get_active_directory_settings(armEndpoint)
      settings = MsRestAzure::ActiveDirectoryServiceSettings.new
      response = Net::HTTP.get_response(URI("#{armEndpoint}/metadata/endpoints?api-version=1.0"))
      status_code = response.code
      response_content = response.body
      unless status_code == "200"
        error_model = JSON.load(response_content)
        fail MsRestAzure::AzureOperationError.new("Getting Azure Stack Hub Metadata Endpoints", response, error_model)
      end
      result = JSON.load(response_content)
      settings.authentication_endpoint = result['authentication']['loginEndpoint'] unless result['authentication']['loginEndpoint'].nil?
      settings.token_audience = result['authentication']['audiences'][0] unless result['authentication']['audiences'][0].nil?
      settings
    end
    
  9. サンプルを実行します。

    bundle exec ruby example.rb
    

次のステップ