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

アプリを開発するときは、Azure と Azure Stack Hub 間のテンプレートの移植性を確保することが重要です。As you develop your app, it is important to have template portability between Azure and Azure Stack Hub. この記事では、Azure Resource Manager テンプレートの開発に関する考慮事項について説明します。This article provides considerations for developing Azure Resource Manager templates. これらのテンプレートを使用すると、Azure Stack Hub 環境にアクセスせずに、Azure でアプリのプロトタイプを作成し、デプロイをテストできます。With these templates, you can prototype your app and test deployment in Azure without access to an Azure Stack Hub environment.

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

デプロイする予定のテンプレートは、Azure Stack Hub で既に使用できるか、またはプレビューの段階にある Microsoft Azure サービスのみを使用する必要があります。The template you plan to deploy must only use Microsoft Azure services that are already available, or in preview, in Azure Stack Hub.

パブリック名前空間Public namespaces

Azure Stack Hub はデータセンターでホストされるため、そのサービス エンドポイントの名前空間は、Azure パブリック クラウドとは異なります。Because Azure Stack Hub is hosted in your datacenter, it has different service endpoint namespaces than the Azure public cloud. その結果、Azure Resource Manager テンプレートでハードコーディングされたパブリック エンドポイントは、Azure Stack Hub にデプロイしようとすると失敗します。As a result, hard-coded public endpoints in Azure Resource Manager templates fail when you try to deploy them to Azure Stack Hub. デプロイ中にリソース プロバイダーから値を取得するために、reference および concatenate 関数を使用してサービス エンドポイントを動的に構築できます。You can dynamically build service endpoints using the reference and concatenate functions to retrieve values from the resource provider during deployment. たとえば、テンプレートに blob.core.windows.net をハードコーディングする代わりに、primaryEndpoints.blob を取得して osDisk.URI エンドポイントを動的に設定します。For example, instead of hard-coding blob.core.windows.net in your template, retrieve the primaryEndpoints.blob to dynamically set the osDisk.URI endpoint:

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

API のバージョン管理API versioning

Azure のサービス バージョンが Azure と Azure Stack Hub で異なる場合があります。Azure service versions may differ between Azure and Azure Stack Hub. 各リソースには、提供される機能を定義する apiVersion 属性が必要です。Each resource requires the apiVersion attribute, which defines the capabilities offered. Azure Stack Hub での API のバージョンの互換性を確保するための各リソースプロバイダーで有効な API のバージョンは次のとおりです。To ensure API version compatibility in Azure Stack Hub, the following API versions are valid for each resource provider:

リソース プロバイダーResource Provider apiVersionapiVersion
ComputeCompute 2015-06-152015-06-15
ネットワークNetwork 2015-06-152015-05-01-preview2015-06-15, 2015-05-01-preview
ストレージStorage 2016-01-012015-06-152015-05-01-preview2016-01-01, 2015-06-15, 2015-05-01-preview
KeyVaultKeyVault 2015-06-012015-06-01
App ServiceApp Service 2015-08-012015-08-01

テンプレート関数Template functions

Azure Resource Manager の関数は、動的テンプレートを構築するために必要な機能を提供します。Azure Resource Manager functions provide the capabilities required to build dynamic templates. たとえば、次のようなタスクのために関数を使用できます。As an example, you can use functions for tasks such as:

  • 文字列の連結やトリミング。Concatenating or trimming strings.
  • その他のリソースからの値の参照。Referencing values from other resources.
  • 複数のインスタンスをデプロイするためのリソースの反復処理。Iterating on resources to deploy multiple instances.

次の関数は、Azure Stack Hub では使用できません。These functions are not available in Azure Stack Hub:

  • SkipSkip
  • TakeTake

リソースの場所Resource location

Azure Resource Manager テンプレートは、デプロイ時にリソースを配置するのに location 属性を使用します。Azure Resource Manager templates use a location attribute to place resources during deployment. Azure では、場所は、米国西部や南アメリカなどのリージョンを指します。In Azure, locations refer to a region such as West US or South America. Azure Stack Hub では、Azure Stack Hub はユーザーのデータセンター内にあるため、場所の意味が異なります。In Azure Stack Hub, locations are different because Azure Stack Hub is in your datacenter. Azure と Azure Stack Hub 間でテンプレートを確実に転送するには、個々のリソースをデプロイするときにリソース グループの場所を参照する必要があります。To ensure templates are transferable between Azure and Azure Stack Hub, you should reference the resource group location as you deploy individual resources. そのためには、[resourceGroup().Location] を使用して、すべてのリソースがリソース グループの場所を継承するようにします。You can do this using [resourceGroup().Location] to ensure all resources inherit the resource group location. 次のコードは、ストレージ アカウントのデプロイ中にこの関数を使用する例を示しています。The following code is an example of using this function while deploying a storage account:

"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_GRS"
  }
}
]

次のステップNext steps