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

適用対象:Azure Stack 統合システムと Azure Stack Development KitApplies to: Azure Stack integrated systems and Azure Stack Development Kit

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

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

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

パブリック名前空間Public namespaces

Azure Stack はデータセンターでホストされるため、そのサービス エンドポイントの名前空間は、Azure パブリック クラウドとは異なります。Because Azure Stack is hosted in your datacenter, it has different service endpoint namespaces than the Azure public cloud. その結果、Azure Resource Manager テンプレートでハードコーディングされたパブリック エンドポイントは、Azure Stack にデプロイしようとすると失敗します。As a result, hard-coded public endpoints in Azure Resource Manager templates fail when you try to deploy them to Azure Stack. デプロイ中にリソース プロバイダーから値を取得するために、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 で異なる場合があります。Azure service versions may differ between Azure and Azure Stack. 各リソースには、提供される機能を定義する apiVersion 属性が必要です。Each resource requires the apiVersion attribute, which defines the capabilities offered. Azure Stack での API のバージョンの互換性を確保するための各リソースプロバイダーで有効な API のバージョンは次のとおりです。To ensure API version compatibility in Azure Stack, 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
StorageStorage 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 で使用できません。These functions aren't available in Azure Stack:

  • 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 では、Azure Stack はユーザーのデータセンター内にあるため、場所の意味が異なります。In Azure Stack, locations are different because Azure Stack is in your datacenter. Azure と Azure Stack 間でテンプレートを確実に転送するには、個々のリソースをデプロイするときにリソース グループの場所を参照する必要があります。To ensure templates are transferable between Azure and Azure Stack, 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