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_Hybrid
やV2019_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) の ResourceManagerEndpointUrl は
https://management.local.azurestack.external/
です。 - 統合システムの ResourceManagerEndpointUrl は
https://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です。
リポジトリを複製します。
git clone https://github.com/Azure-Samples/Hybrid-Resource-Manager-Ruby-Resources-And-Groups.git
bundle を使用して依存関係をインストールします。
cd Hybrid-Resource-Manager-Ruby-Resources-And-Groups bundle install
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
を使用します。location 変数が、たとえば
LOCAL="local"
のように確実に Azure Stack Hub の場所に設定されているようにします。Azure Stack Hub またはその他のプライベート クラウドを使用している場合は、次のコード行を追加して、適切な Active Directory エンドポイントをターゲットにします。
active_directory_settings = get_active_directory_settings(ENV['ARM_ENDPOINT'])
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'] }
Azure Stack Hub プロファイルをターゲットとするプロファイル クライアントを作成します。
client = Azure::Resources::Profiles::V2019_03_01_Hybrid::Mgmt::Client.new(options)
サービス プリンシパルを 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
サンプルを実行します。
bundle exec ruby example.rb
次のステップ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示