Azure Functions デプロイ スロットAzure Functions deployment slots

Azure Functions デプロイ スロットを使用すると、関数アプリで "スロット" と呼ばれる別のインスタンスを実行できます。Azure Functions deployment slots allow your function app to run different instances called "slots". スロットは、一般公開されているエンドポイントを介して公開されるさまざまな環境です。Slots are different environments exposed via a publicly available endpoint. 1 つのアプリ インスタンスが常に運用スロットにマップされ、必要に応じて、スロットに割り当てられたインスタンスをスワップできます。One app instance is always mapped to the production slot, and you can swap instances assigned to a slot on demand. App Service プランで実行されている関数アプリには複数のスロットが含まれる場合がありますが、従量課金プランでは 1 つのスロットのみが許可されます。Function apps running under the Apps Service plan may have multiple slots, while under Consumption only one slot is allowed.

スロットのスワップによって関数がどのように影響を受けるかを以下に示します。The following reflect how functions are affected by swapping slots:

  • トラフィックのリダイレクトはシームレスです。スワップが原因で要求が削除されることはありません。Traffic redirection is seamless; no requests are dropped because of a swap.
  • スワップ中に関数が実行されている場合は、実行が続行され、それ以降のトリガーがスワップされたアプリ インスタンスにルーティングされます。If a function is running during a swap, execution continues and subsequent triggers are routed to the swapped app instance.

注意

スロットは現時点で、Linux 従量課金プランでは使用できません。Slots are currently not available for the Linux Consumption plan.

スロットを使用する理由Why use slots?

デプロイ スロットの使用には多くの利点があります。There are a number of advantages to using deployment slots. 次のシナリオでは、スロットの一般的な使用法について説明します。The following scenarios describe common uses for slots:

  • さまざまな目的に応じたさまざまな環境:さまざまなスロットを使用することで、運用またはステージング スロットにスワップする前に、アプリ インスタンスを区別できます。Different environments for different purposes: Using different slots gives you the opportunity to differentiate app instances before swapping to production or a staging slot.
  • 事前ウォーミング:直接運用環境にではなく、スロットにデプロイすると、アプリをウォームアップしてから運用を開始することができます。Prewarming: Deploying to a slot instead of directly to production allows the app to warm up before going live. さらに、スロットを使用すると、HTTP によってトリガーされるワークロードの待機時間が短縮されます。Additionally, using slots reduces latency for HTTP-triggered workloads. インスタンスはデプロイ前にウォームアップされるため、新しくデプロイされた関数のコールド スタートが減少します。Instances are warmed up before deployment which reduces the cold start for newly-deployed functions.
  • 簡単なフォールバック:運用環境とのスワップ後も、以前にアプリがステージングされたスロットに、以前の運用アプリが存在します。Easy fallbacks: After a swap with production, the slot with a previously staged app now has the previous production app. 運用スロットにスワップされた変更が期待どおりでない場合は、すぐにスワップを逆にして、"最新の既知の良好なインスタンス" に戻すことができます。If the changes swapped into the production slot aren't as you expect, you can immediately reverse the swap to get your "last known good instance" back.

スワップ操作Swap operations

スワップ中は、一方のスロットがソースと見なされ、もう一方がターゲットと見なされます。During a swap, one slot is considered the source and the other the target. ソース スロットには、ターゲット スロットに適用されるアプリケーションのインスタンスがあります。The source slot has the instance of the application that is applied to the target slot. 次の手順では、スワップ中にターゲット スロットでダウンタイムが発生しないようにします。The following steps ensure the target slot doesn't experience downtime during a swap:

  1. 設定を適用する: ターゲット スロットからの設定は、ソース スロットのすべてのインスタンスに適用されます。Apply settings: Settings from the target slot are applied to all instances of the source slot. たとえば、運用設定はステージング インスタンスに適用されます。For example, the production settings are applied to the staging instance. 適用される設定には次のカテゴリが含まれます。The applied settings include the following categories:

  2. 再起動され、使用できるようになるまで待機する: スワップでは、ソース スロット内のすべてのインスタンスの再起動が完了し、要求で使用できるようになるまで待機します。Wait for restarts and availability: The swap waits for every instance in the source slot to complete its restart and to be available for requests. いずれかのインスタンスが再起動に失敗した場合、スワップ操作ではすべての変更がソース スロットに戻されて、操作が停止されます。If any instance fails to restart, the swap operation reverts all changes to the source slot and stops the operation.

  3. ルーティングを更新する: ソース スロットのすべてのインスタンスが正常にウォームアップされている場合、2 つのスロットでは、ルーティング規則を切り替えてスワップを完了します。Update routing: If all instances on the source slot are warmed up successfully, the two slots complete the swap by switching routing rules. この手順の後は、前にソース スロットでウォーム アップされたアプリはターゲット スロット (運用スロットなど) に存在します。After this step, the target slot (for example, the production slot) has the app that's previously warmed up in the source slot.

  4. 操作を繰り返す: この時点でソース スロットには、スワップ以前にはターゲット スロットにあったアプリがあるため、すべての設定を適用し、ソース スロットのインスタンスを再起動して、同じ操作を実行します。Repeat operation: Now that the source slot has the pre-swap app previously in the target slot, perform the same operation by applying all settings and restarting the instances for the source slot.

以下の点に注意してください。Keep in mind the following points:

  • スワップ操作の任意の時点で、スワップされたアプリの初期化がソース スロットで行われます。At any point of the swap operation, initialization of the swapped apps happens on the source slot. ソース スロットが準備されている間、ターゲット スロットはオンラインのままになります。スワップが成功するか失敗するかは関係ありません。The target slot remains online while the source slot is being prepared, whether the swap succeeds or fails.

  • ステージング スロットを運用スロットとスワップする場合は、運用スロットが "常に" ターゲット スロットであるようにします。To swap a staging slot with the production slot, make sure that the production slot is always the target slot. こうすることで、スワップ操作が運用アプリに影響を及ぼしません。This way, the swap operation doesn't affect your production app.

  • "スワップを開始する前" に、イベント ソースおよびバインドに関連する設定をデプロイ スロット設定として構成する必要があります。Settings related to event sources and bindings need to be configured as deployment slot settings before you initiate a swap. 事前に "固定" としてマークすることで、確実にイベントと出力が適切なインスタンスに送信されるようになります。Marking them as "sticky" ahead of time ensures events and outputs are directed to the proper instance.

設定の管理Manage settings

別のデプロイ スロットから構成を複製する場合、複製された構成を編集することができます。When you clone configuration from another deployment slot, the cloned configuration is editable. 構成要素には、スワップを経ても内容が反映される (スロット固有でない) ものもあれば、スワップ後に同じスロットに残されている (スロット固有の) ものもあります。Some configuration elements follow the content across a swap (not slot specific), whereas other configuration elements stay in the same slot after a swap (slot specific). 次の一覧では、スロットのスワップ時に変更される設定を示します。The following lists show the settings that change when you swap slots.

スワップされる設定:Settings that are swapped:

  • 一般設定 (フレームワーク バージョン、32/64 ビット、Web ソケットなど)General settings, such as framework version, 32/64-bit, web sockets
  • アプリ設定 (スロット固有として構成可能)App settings (can be configured to stick to a slot)
  • 接続文字列 (スロット固有として構成可能)Connection strings (can be configured to stick to a slot)
  • ハンドラー マッピングHandler mappings
  • パブリック証明書Public certificates
  • Web ジョブ コンテンツWebJobs content
  • ハイブリッド接続 *Hybrid connections *
  • Virtual Network 統合 *Virtual network integration *
  • サービス エンドポイント *Service endpoints *
  • Azure Content Delivery Network *Azure Content Delivery Network *

アスタリスク (*) 記号付きの機能は、スワップされない予定です。Features marked with an asterisk (*) are planned to be unswapped.

スワップされない設定:Settings that aren't swapped:

  • 発行エンドポイントPublishing endpoints
  • カスタム ドメイン名Custom domain names
  • パブリックでない証明書と TLS/SSL 設定Non-public certificates and TLS/SSL settings
  • スケールの設定Scale settings
  • Web ジョブ スケジューラWebJobs schedulers
  • IP 制限IP restrictions
  • 常時接続Always On
  • 診断ログの設定Diagnostic log settings
  • クロスオリジン リソース共有 (CORS)Cross-origin resource sharing (CORS)

注意

スワップされていない設定に適用されている特定のアプリ設定もスワップされません。Certain app settings that apply to unswapped settings are also not swapped. たとえば、診断ログの設定はスワップされないため、WEBSITE_HTTPLOGGING_RETENTION_DAYSDIAGNOSTICS_AZUREBLOBRETENTIONDAYS などの関連するアプリ設定もスワップされません。これは、スロット設定として表示されない場合でも同様です。For example, since diagnostic log settings are not swapped, related app settings like WEBSITE_HTTPLOGGING_RETENTION_DAYS and DIAGNOSTICS_AZUREBLOBRETENTIONDAYS are also not swapped, even if they don't show up as slot settings.

デプロイ設定を作成するCreate a deployment setting

設定をデプロイ設定としてマークし、"固定" にすることができます。You can mark settings as a deployment setting which makes it "sticky". 固定設定は、アプリ インスタンスとはスワップされません。A sticky setting does not swap with the app instance.

1 つのスロットにデプロイ設定を作成する場合は、必ず、スワップに関係する他のすべてのスロットに一意の値を持つ同じ設定を作成してください。If you create a deployment setting in one slot, make sure to create the same setting with a unique value in any other slot involved in a swap. このようにすると、設定の値は変更されませんが、設定の名前はスロット間で一貫性が保たれます。This way, while a setting's value doesn't change, the setting names remain consistent among slots. この名前の一貫性により、あるスロットでは定義されているが、別のものでは定義されていない設定へのアクセスがコードで試行されなくなります。This name consistency ensures your code doesn't try to access a setting that is defined in one slot but not another.

デプロイ設定を作成するには、次の手順を使用します。Use the following steps to to create a deployment setting:

  • 関数アプリの [スロット] に移動しますNavigate to Slots in the function app
  • スロット名をクリックしますClick on the slot name
  • [プラットフォーム機能] > [全般設定] で、 [構成] をクリックしますUnder Platform Features > General Settings, click on Configuration
  • 現在のスロットで固定する設定名をクリックしますClick on the setting name you want to stick with the current slot
  • [デプロイ スロットの設定] チェックボックスをオンにしますClick the Deployment slot setting checkbox
  • [OK]Click OK
  • 設定ブレードが表示されなくなったら、 [保存] をクリックして変更を保持しますOnce setting blade disappears, click Save to keep the changes

デプロイ スロットの設定

DeploymentDeployment

スロットの作成時は、スロットは空になっています。Slots are empty when you create a slot. サポートされているデプロイ テクノロジのいずれかを使用して、アプリケーションをスロットにデプロイできます。You can use any of the supported deployment technologies to deploy your application to a slot.

スケーリングScaling

すべてのスロットが、運用スロットと同じ数のワーカーにスケーリングされます。All slots scale to the same number of workers as the production slot.

  • 従量課金プランでは、関数アプリがスケーリングされると、スロットがスケーリングされます。For Consumption plans, the slot scales as the function app scales.
  • App Service プランの場合、アプリは一定数のワーカーにスケーリングされます。For App Service plans, the app scales to a fixed number of workers. スロットは、アプリ プランと同じ数のワーカーで実行されます。Slots run on the same number of workers as the app plan.

スロットを追加するAdd a slot

スロットは、CLI を介して、またはポータルを使用して追加できます。You can add a slot via the CLI or through the portal. 次の手順では、ポータルで新しいスロットを作成する方法を示します。The following steps demonstrate how to create a new slot in the portal:

  1. 関数アプリに移動し、 [スロット] の横にあるプラス記号をクリックします。Navigate to your function app and click on the plus sign next to Slots.

    Azure Functions デプロイ スロットを追加する

  2. テキストボックスに名前を入力し、 [作成] ボタンを押します。Enter a name in the textbox, and press the Create button.

    Azure Functions デプロイ スロットに名前を付ける

スロットをスワップするSwap slots

スロットは、CLI を介して、またはポータルを使用してスワップできます。You can swap slots via the CLI or through the portal. 次の手順では、ポータルでスロットをスワップする方法を示します。The following steps demonstrate how to swap slots in the portal:

  1. 関数アプリに移動しますNavigate to the function app
  2. スワップするソース スロットの名前をクリックしますClick on the source slot name that you want to swap
  3. [概要] タブで、 [スワップ] ボタンをクリックします Azure Functions デプロイ スロットをスワップするFrom the Overview tab, click on the Swap button Swap Azure Functions deployment slot
  4. スワップの構成設定を確認し、 [スワップ] をクリックします Azure Functions デプロイ スロットをスワップするVerify the configuration settings for your swap and click Swap Swap Azure Functions deployment slot

スワップ操作の実行中は、操作にしばらく時間がかかる場合があります。The operation may take a moment while the swap operation is executing.

スワップをロールバックするRoll back a swap

スワップによってエラーが発生した場合、またはスワップを "元に戻す" だけの場合は、初期状態にロールバックすることができます。If a swap results in an error or you simply want to "undo" a swap, you can roll back to the initial state. スワップ前の状態に戻るには、別のスワップを実行してスワップを逆にします。To return to the pre-swapped state, do another swap to reverse the swap.

スロットを削除するRemove a slot

スロットは、CLI を介して、またはポータルを使用して削除できます。You can remove a slot via the CLI or through the portal. 次の手順では、ポータルでスロットを削除する方法を示します。The following steps demonstrate how to remove a slot in the portal:

  1. 関数アプリの [概要] に移動しますNavigate to the function app Overview

  2. [削除] ボタンをクリックしますClick on the Delete button

    Azure Functions デプロイ スロットを追加する

スロット管理を自動化するAutomate slot management

Azure CLI を使用すると、スロットに対する次の操作を自動化できます。Using the Azure CLI, you can automate the following actions for a slot:

App Service プランを変更するChange app service plan

App Service プランで実行されている関数アプリでは、スロットの基になる App Service プランを変更することができます。With a function app that is running under an App Service plan, you have the option to change the underlying app service plan for a slot.

注意

従量課金プランでは、スロットの App Service プランを変更することはできません。You can't change a slot's App Service plan under the Consumption plan.

スロットの App Service プランを変更するには、次の手順を使用します。Use the following steps to change a slot's app service plan:

  1. スロットに移動しますNavigate to a slot

  2. [プラットフォーム機能] で、 [すべての設定] をクリックしますUnder Platform Features, click All Settings

    App Service プランを変更する

  3. [App Service プラン] をクリックしますClick on App Service plan

  4. 新しい App Service プランを選択するか、新しいプランを作成しますSelect a new App Service plan, or create a new plan

  5. [OK]Click OK

    App Service プランを変更する

制限事項Limitations

Azure Functions デプロイ スロットには、次の制限があります。Azure Functions deployment slots have the following limitations:

  • アプリで使用できるスロットの数は、プランによって異なります。The number of slots available to an app depends on the plan. 従量課金プランでは 1 つのデプロイ スロットのみが許可されます。The Consumption plan is only allowed one deployment slot. App Service プランで実行されているアプリでは、追加のスロットを使用できます。Additional slots are available for apps running under the App Service plan.
  • スロットをスワップすると、AzureWebJobsSecretStorageType アプリ設定が files に等しいアプリのキーがリセットされます。Swapping a slot resets keys for apps that have an AzureWebJobsSecretStorageType app setting equal to files.
  • Linux 従量課金プランでは、スロットは使用できません。Slots are not available for the Linux Consumption plan.

サポート レベルSupport levels

デプロイ スロットには、次の 2 つのレベルのサポートがあります。There are two levels of support for deployment slots:

  • 一般公開 (GA) :完全にサポートされ、運用環境用に承認されています。General availability (GA): Fully supported and approved for production use.
  • プレビュー:まだサポートされていませんが、今後 GA 状態に達すると想定されています。Preview: Not yet supported, but is expected to reach GA status in the future.
OS/ホスティング プランOS/Hosting plan サポートのレベルLevel of support
Windows ConsumptionWindows Consumption 一般公開General availability
Windows PremiumWindows Premium 一般公開General availability
Windows DedicatedWindows Dedicated 一般公開General availability
Linux ConsumptionLinux Consumption サポートされていませんUnsupported
Linux PremiumLinux Premium 一般公開General availability
Linux DedicatedLinux Dedicated 一般公開General availability

次の手順Next steps