Azure Functions をパッケージ ファイルから実行する

Azure では、関数アプリのデプロイ パッケージ ファイルから、関数を直接実行できます。 他のオプションは、関数アプリの d:\home\site\wwwroot ディレクトリ内のファイルをデプロイすることです。

この記事では、パッケージから関数を実行するメリットについて説明します。 関数アプリでこの機能を有効にする方法も示します。

パッケージ ファイルから実行することのメリット

パッケージ ファイルからの実行には、さまざまなメリットがあります。

  • ファイル コピー ロック問題のリスクを軽減します。
  • 運用環境のアプリにデプロイできます (再起動が必要です)。
  • アプリで実行されるファイルを確定できます。
  • Azure Resource Manager デプロイのパフォーマンスが向上します。
  • 特に大規模な npm パッケージのツリーの JavaScript 関数の場合、コールド スタート時間を減らすことができます。

詳細については、こちらのお知らせをご覧ください。

パッケージから関数を実行できるようにする

関数アプリをパッケージから実行できるようにするには、WEBSITE_RUN_FROM_PACKAGE 設定を関数アプリの設定に追加するだけです。 WEBSITE_RUN_FROM_PACKAGE 設定には次のいずれかの値を指定できます。

説明
1 Windows 上で実行される関数アプリでは、推奨されています。 関数アプリの d:\home\data\SitePackages フォルダー内のパッケージ ファイルから実行します。 Zip 配置を使って配置しない場合、このオプションでは、フォルダー内に packagename.txt という名前のファイルも含む必要があります。 このファイルには、フォルダー内のパッケージ ファイルの空白なしの名前のみが含まれます。
<URL> 実行する特定のパッケージ ファイルの場所。 また、URL を指定するとき、更新済みのパッケージを発行した後にトリガーを同期する必要もあります。
Blob ストレージを使用している場合は、通常、パブリック Blob を使うべきではありません。 代わりに、Shared Access Signature (SAS) があるプライベート コンテナーを使用するか、マネージド ID を使用してパッケージにアクセスするための Functions ランタイムを有効にします。 Azure Storage Explorer を使用して、パッケージ ファイルを Blob Storage アカウントにアップロードします。

注意事項

Windows 上で関数アプリを実行する場合、外部 URL のオプションではコールド スタートのパフォーマンスが悪化します。 関数アプリを Windows にデプロイするときは、WEBSITE_RUN_FROM_PACKAGE1 に設定して、zip 配置によって発行する必要があります。

Azure Blob torage でホストされている .zip ファイルから実行するように構成された関数アプリを次に示します。

WEBSITE_RUN_FROM_ZIP アプリの設定

注意

現時点では、.zip パッケージ ファイルのみがサポートされています。

マネージド ID を使用して Azure Blob Storage からパッケージを取得する

Azure AD で要求を承認するように Azure Blob Storage を構成できます。 つまり、有効期限がある SAS キーを生成する代わりに、アプリケーションのマネージド ID を使用することができます。 既定では、アプリのシステム割り当て ID が使用されます。 ユーザー割り当て ID を指定する場合は、WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID アプリ設定をその ID のリソース ID に設定できます。 この設定は "SystemAssigned" を値として受け入れることもできますが、これは設定をまとめて省略することと同じです。

ID を使用してパッケージをフェッチできるようにするには、次のようにします。

  1. Blob がプライベート アクセス用に構成されていることを確認します。

  2. ID に、パッケージ blob に対するスコープを持つ Storage Blob データリーダー ロールを付与します。 ロールの割り当ての作成の詳細については、「blob データにアクセスするための Azure ロールの割り当て」を参照してください。

  3. WEBSITE_RUN_FROM_PACKAGE アプリケーション設定をパッケージの BLOB URL に設定します。 これは、"https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}" のような形式になります。

zip デプロイとの統合

Zip デプロイは、関数アプリ プロジェクトを wwwroot ディレクトリに配置することを可能にする Azure App Service の機能です。 プロジェクトは、.zip デプロイ ファイルとしてパッケージ化されます。 同じ API を使用して、パッケージを d:\home\data\SitePackages フォルダーに配置できます。 WEBSITE_RUN_FROM_PACKAGE アプリ設定が値 1 の場合、zip デプロイ API は、ファイルを d:\home\site\wwwroot 抽出する代わりに、パッケージを d:\home\data\SitePackages フォルダーにコピーします。 それは、packagename.txt ファイルも作成します。 再起動後、パッケージは読み取り専用のファイルシステムとして wwwroot にマウントされます。 zip デプロイの詳細については、Azure Functions の zip デプロイに関する記事を参照してください。

注意

デプロイが行われると、関数アプリの再起動がトリガーされます。 再起動する前に、既存のすべての関数の実行に完了またはタイムアウトが許可されます。詳細については、「デプロイ動作」を参照してください。

WEBSITE_RUN_FROM_PACKAGE 設定の追加

関数アプリの設定は、いくつかの方法で追加、更新、削除できます。

関数アプリの設定に変更を加えるためには、関数アプリを再起動する必要があります。

トラブルシューティング

  • パッケージから実行すると wwwroot が読み取り専用になるので、このディレクトリにファイルを書き込むときにエラーを受け取ります。
  • tar および gzip 形式はサポートされていません。
  • ZIP ファイルは、最大 1 GB にすることができます。
  • この機能はローカル キャッシュでは構成されません。
  • コールドスタートのパフォーマンスを向上するには、ローカルの Zip オプション (WEBSITE_RUN_FROM_PACKAGE = 1) を使用します。
  • パッケージからの実行は、デプロイ カスタマイズ オプション (SCM_DO_BUILD_DURING_DEPLOYMENT=true) と互換性がありません。ビルド ステップは、デプロイの間に無視されます。

次のステップ