Azure Resource Manager テンプレートを使用した Web アプリのデプロイに関するガイダンス

この記事では、Azure App Service ソリューションをデプロイするための Azure Resource Manager テンプレートの作成に関する推奨事項を示します。 これらの推奨事項は、一般的な問題を回避するために役立ちます。

依存関係を定義する

Web アプリの依存関係を定義するには、Web アプリ内のリソースがどのように連係しているかを理解する必要があります。 依存関係を間違った順序で指定すると、デプロイ エラーが発生するか、デプロイを停止させる競合状態が発生する場合があります。

警告

テンプレートに MSDeploy サイト拡張機能を含める場合は、すべての構成リソースを、MSDeploy リソースに依存するように設定する必要があります。 構成を変更すると、サイトが非同期で再起動されます。 構成リソースを MSDeploy に依存させることで、サイトの再起動前に MSDeploy を確実に終了させることができます。 これらの依存関係がない場合は、MSDeploy のデプロイ プロセス中にサイトが再起動されることがあります。 テンプレートの例については、「WordPress Template with Web Deploy Dependency (Web 配置依存関係を持つ WordPress テンプレート)」を参照してください。

次の図は、さまざまな App Service リソースの依存関係の順序を示しています。

Web アプリの依存関係

次の順序でリソースをデプロイします。

レベル 1

  • App Service プラン。
  • データベースやストレージ アカウントなどの他の関連リソース。

レベル 2

  • Web アプリ - App Service プランに依存。
  • サーバー ファームを対象とする Azure Application Insights インスタンス - App Service プランに依存。

レベル 3

  • ソース管理 - Web アプリに依存。
  • MSDeploy サイト拡張機能 - Web アプリに依存。
  • Web アプリをターゲットとする Azure Application Insights インスタンス - Web アプリに依存。

レベル 4

  • App Service 証明書 - ソース管理または MSDeploy に依存 (いずれかが存在する場合)。 存在しない場合は Web アプリに依存。
  • 構成設定 (接続文字列、Web 構成値、アプリ設定) - ソース管理または MSDeploy に依存 (いずれかが存在する場合)。 存在しない場合は Web アプリに依存。

レベル 5

  • ホスト名のバインディング - 証明書に依存 (存在する場合)。 存在しない場合は上位レベルのリソースに依存。
  • サイト拡張機能 - 構成設定に依存 (存在する場合)。 存在しない場合は上位レベルのリソースに依存。

通常、ソリューションにはこれらのリソースとレベルの一部しか含まれていません。 ないレベルについては、下位のリソースを次に高いレベルにマップします。

次の例は、テンプレートの一部を示しています。 接続文字列の構成値は、MSDeploy 拡張機能に応じて異なります。 MSDeploy 拡張機能は、Web アプリおよびデータベースに依存します。

{
    "name": "[parameters('appName')]",
    "type": "Microsoft.Web/Sites",
    ...
    "resources": [
      {
          "name": "MSDeploy",
          "type": "Extensions",
          "dependsOn": [
            "[concat('Microsoft.Web/Sites/', parameters('appName'))]",
            "[concat('Microsoft.Sql/servers/', parameters('dbServerName'), '/databases/', parameters('dbName'))]",
          ],
          ...
      },
      {
          "name": "connectionstrings",
          "type": "config",
          "dependsOn": [
            "[concat('Microsoft.Web/Sites/', parameters('appName'), '/Extensions/MSDeploy')]"
          ],
          ...
      }
    ]
}

上記のコードを使用するすぐに実行できるサンプルについては、「Template:Build a simple Umbraco Web App」(テンプレート: 簡単な Umbraco Web アプリを作成する) をご覧ください。

MSDeploy エラーについての情報を見つける

Resource Manager テンプレートで MSDeploy が使用されている場合は、デプロイ エラー メッセージを理解しにくいことがあります。 デプロイの失敗後に詳細情報を取得するには、次の手順を実行します。

  1. サイトの Kudu コンソールに移動します。
  2. D:\home\LogFiles\SiteExtensions\MSDeploy のフォルダーを参照します。
  3. appManagerStatus.xml および appManagerLog.xml ファイルを探します。 最初のファイルには、状態が記録されます。 2 番目のファイルには、エラーに関する情報が記録されます。 エラーが明確でない場合は、フォーラムに支援を求めるときに、そのファイルを含めることができます。

一意の Web アプリ名の選択

Web アプリの名前は、グローバルに一意である必要があります。 一意になると思われる命名規則を使用するか、uniqueString 関数を使用して一意の名前の生成を支援することができます。

{
  "apiVersion": "2016-08-01",
  "name": "[concat(parameters('siteNamePrefix'), uniqueString(resourceGroup().id))]",
  "type": "Microsoft.Web/sites",
  ...
}

Web アプリの証明書を Key Vault からデプロイする

注意

この記事は、Azure Az PowerShell モジュールを使用するように更新されています。 Az PowerShell モジュールは、Azure と対話するために推奨される PowerShell モジュールです。 Az PowerShell モジュールの使用を開始するには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

テンプレートに TLS/SSL バインディングの Microsoft.Web/certificates リソースが含まれ、証明書が Key Vault に格納されている場合、App Service の ID が証明書にアクセスできることを確認する必要があります。

グローバル Azure では、App Service サービス プリンシパルの ID は abfa0a7c-a6b6-4736-8310-5855508787cd です。 App Service サービス プリンシパルに Key Vault へのアクセスを許可するには、次を使用します。

Set-AzKeyVaultAccessPolicy `
  -VaultName KEY_VAULT_NAME `
  -ServicePrincipalName abfa0a7c-a6b6-4736-8310-5855508787cd `
  -PermissionsToSecrets get `
  -PermissionsToCertificates get

Azure Government では、App Service サービス プリンシパルの ID は 6a02c803-dafd-4136-b4c3-5a6f318b4714 です。 前の例でその ID を使います。

お使いの Key Vault で [証明書][生成/インポート] を選択して、証明書をアップロードします。

証明書のインポート

テンプレートで、keyVaultSecretName に対する証明書の名前を指定します。

テンプレートの例については、「Deploy a Web App certificate from Key Vault secret and use it for creating SSL binding」(Key Vault シークレットから Web アプリ証明書を展開し、SSL バインディングの作成に使用する) をご覧ください。

次のステップ