Azure Resource Manager による Azure Stack Hub 用テンプレートの開発

アプリを開発するときは、Azure と Azure Stack Hub 間のテンプレートの移植性を確保することが重要です。 この記事では、Azure Resource Manager テンプレートの開発に関する考慮事項について説明します。 これらのテンプレートを使用すると、Azure Stack Hub 環境にアクセスせずに、Azure でアプリのプロトタイプを作成し、デプロイをテストできます。

リソース プロバイダーの可用性

デプロイする予定のテンプレートは、Azure Stack Hub で既に使用できるか、またはプレビューの段階にある Microsoft Azure サービスのみを使用する必要があります。

パブリック名前空間

Azure Stack Hub はデータセンターでホストされるため、そのサービス エンドポイントの名前空間は、Azure パブリック クラウドとは異なります。 その結果、Azure Resource Manager テンプレートでハードコーディングされたパブリック エンドポイントは、Azure Stack Hub にデプロイしようとすると失敗します。 デプロイ中にリソース プロバイダーから値を取得するために、reference および concatenate 関数を使用してサービス エンドポイントを動的に構築できます。 たとえば、テンプレートに blob.core.windows.net をハードコーディングする代わりに、primaryEndpoints.blob を取得して osDisk.URI エンドポイントを動的に設定します。

"osDisk": {"name": "osdisk","vhd": {"uri":
"[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), '2015-06-15').primaryEndpoints.blob, variables('vmStorageAccountContainerName'),
 '/',variables('OSDiskName'),'.vhd')]"}}

API のバージョン管理

Azure のサービス バージョンが Azure と Azure Stack Hub で異なる場合があります。 各リソースには、提供される機能を定義する apiVersion 属性が必要です。 Azure Stack Hub での API のバージョンの互換性を確保するための各リソースプロバイダーで有効な API のバージョンは次のとおりです。

リソース プロバイダー apiVersion
Compute 2015-06-15
ネットワーク 2015-06-152015-05-01-preview
ストレージ 2016-01-012015-06-152015-05-01-preview
KeyVault 2015-06-01
App Service 2015-08-01

テンプレート関数

Azure Resource Manager の関数は、動的テンプレートを構築するために必要な機能を提供します。 たとえば、次のようなタスクのために関数を使用できます。

  • 文字列の連結やトリミング。
  • その他のリソースからの値の参照。
  • 複数のインスタンスをデプロイするためのリソースの反復処理。

次の関数は、Azure Stack Hub では使用できません。

  • スキップ
  • Take

リソースの場所

Azure Resource Manager テンプレートは、デプロイ時にリソースを配置するのに location 属性を使用します。 Azure では、場所は、米国西部や南アメリカなどのリージョンを指します。 Azure Stack Hub では、Azure Stack Hub はユーザーのデータセンター内にあるため、場所の意味が異なります。 Azure と Azure Stack Hub 間でテンプレートを確実に転送するには、個々のリソースをデプロイするときにリソース グループの場所を参照する必要があります。 そのためには、[resourceGroup().Location] を使用して、すべてのリソースがリソース グループの場所を継承するようにします。 次のコードは、ストレージ アカウントのデプロイ中にこの関数を使用する例を示しています。

"resources": [
{
  "name": "[variables('storageAccountName')]",
  "type": "Microsoft.Storage/storageAccounts",
  "apiVersion": "[variables('apiVersionStorage')]",
  "location": "[resourceGroup().location]",
  "comments": "This storage account is used to store the VM disks",
  "properties": {
  "accountType": "Standard_LRS"
  }
}
]

次のステップ