Azure Functions で関数を無効にする方法

この記事では、Azure Functions で関数を無効にする方法について説明します。 関数を無効にするということは、関数をトリガーすることを意図したイベントをランタイムに無視させることを意味します。 この機能を使用すると、関数アプリ全体を変更して再発行することなく、特定の関数が実行されないようにできます。

AzureWebJobs.<FUNCTION_NAME>.Disabledtrue に設定する形式でアプリ設定を作成することで、関数をインプレースで無効にできます。 このアプリケーション設定は、Azure CLIAzure PowerShell を使用したり、Azure portal で関数の [概要] タブを使用したりするなど、いくつかの方法で作成および変更できます。

アプリケーション設定を変更すると、関数アプリが再起動します。 詳細については、「Azure Functions のアプリケーション設定のリファレンス」をご覧ください。

関数の無効化

次のいずれかのモードを使用して、QueueTrigger という名前の関数の例を無効にするアプリ設定を作成します。

関数の [概要] ページの [有効にする] ボタンと [無効にする] ボタンを使用します。 AzureWebJobs.QueueTrigger.Disabled アプリ設定の値を変更することでこれらのボタンは機能します。 関数固有のアプリ設定は、関数が初めて無効にされるときに作成されます。

[関数の状態] スイッチ

ローカル プロジェクトから関数アプリに公開しても、引き続きポータルを使用して関数アプリ内の関数を無効にすることができます。

Note

マスター キーを使って REST エンドポイントを呼び出すことで、無効な関数を実行することもできます。 詳細については、「無効な関数を実行する」を参照してください。 つまり、ポータルの [テスト/実行] ウィンドウからマスター (ホスト キー) を使って開始した場合、関数は無効にされていても実行されます。

スロット内の関数を無効にする

既定では、アプリの設定はデプロイ スロットで実行されているアプリにも適用されます。 ただし、スロット固有のアプリの設定を設定することによって、スロットで使用されるアプリの設定を上書きすることができます。 たとえば、運用環境では関数をアクティブにし、デプロイ テストではアクティブにしない場合があります。 スロットでタイマーによってトリガーされる関数を無効にして、同時実行を防ぐのが一般的です。

ステージング スロットでのみ関数を無効にするには、次のようにします。

関数アプリのスロット インスタンスに移動します。 [デプロイ] の下にある [デプロイ スロット] を選択し、スロットを選択して、スロット インスタンスの [関数] を選択します。 関数を選択してから、 [概要] ページの [有効にする] ボタンと [無効にする] ボタンを使用します。 AzureWebJobs.<FUNCTION_NAME>.Disabled アプリ設定の値を変更することでこれらのボタンは機能します。 この関数固有の設定は、関数を初めて無効にするときに作成されます。

また、スロット インスタンスの [構成]true の値を持つ AzureWebJobs.<FUNCTION_NAME>.Disabled という名前のアプリの設定を直接追加することもできます。 スロット固有のアプリの設定を追加する場合は、必ず [デプロイ スロットの設定] ボックスをオンにしてください。 このオプションにより、スワップ中にスロットで設定値が維持されます。

詳細については、「Azure Functions デプロイ スロット」を参照してください。

無効な関数を実行する

無効な関数のエンドポイント URL に対する REST 要求でマスター アクセス キー (_master) を指定すると、無効な関数を実行できます。 この方法で、無効な状態で Azure で関数を開発および検証しながら、他のユーザーからのアクセスを防ぐことができます。 要求で他の種類のキーを使うと、HTTP 404 応答が返されます。

注意事項

マスター キーによって関数アプリの昇格権限が付与されるため、このキーを第三者と共有したり、ネイティブ クライアント アプリケーションで配布したりしないでください。 関数エンドポイントの管理者 HTTP アクセス レベルを選択する場合は注意が必要です。

マスター キーの詳細については、「キーを理解する」を参照してください。 HTTP によってトリガーされない関数の呼び出しについては、「HTTP によってトリガーされない関数を手動で実行する」を参照してください。

関数をローカルで無効にする

関数は、ローカルで実行する場合と同じ方法で無効にすることができます。 QueueTrigger という名前の関数を無効にするには、次のように、local.settings.json ファイルの Values コレクションにエントリを追加します。

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true", 
    "AzureWebJobs.QueueTrigger.Disabled": true
  }
}

考慮事項

関数を無効にするときは、次のことに留意してください。

  • この記事で説明されている方法を使って、HTTP によってトリガーされる関数を無効にしても、ご利用のローカル コンピューターとポータルで実行すると、エンドポイントにアクセスできる可能性があります。

  • このとき、ハイフン (-) を名前に含む関数を Linux で実行する場合、これらの関数は無効にできません。 Linux で実行する関数を無効にする計画がある場合は、関数名にハイフンを使用しないでください。

次のステップ

この記事は、自動トリガーの無効化に関する記事です。 トリガーについて詳しくは、トリガーとバインドに関するページをご覧ください。