Azure では、関数アプリのデプロイ パッケージ ファイルから、関数を直接実行できます。 他のオプションは、関数アプリの c:\home\site\wwwroot (Windows) または /home/site/wwwroot (Linux) ディレクトリ内のファイルをデプロイすることです。
この記事では、パッケージから関数を実行するメリットについて説明します。 関数アプリでこの機能を有効にする方法も示します。
パッケージ ファイルから実行することのメリット
パッケージ ファイルからの関数の実行にはさまざまなメリットがあります。
- ファイル コピー ロック問題のリスクを軽減します。
- 運用環境のアプリにデプロイできます (再起動が必要です)。
- アプリで実行されるファイルを検証します。
- Azure Resource Manager デプロイのパフォーマンスが向上します。
- 特に大規模な npm パッケージのツリーの JavaScript 関数の場合、コールド スタート時間が短縮されます。
詳細については、こちらのお知らせをご覧ください。
パッケージから関数を実行できるようにする
Flex 従量課金ホスティング プランの関数アプリはデフォルトでパッケージから実行されます。 特別な構成は必要ありません。
従量課金、Elastic Premium、専用 (App Service) の各ホスティング プランでパッケージから関数アプリを実行できるようにするには、WEBSITE_RUN_FROM_PACKAGE アプリ設定を関数アプリに追加します。
WEBSITE_RUN_FROM_PACKAGE アプリ設定には次のいずれかの値を指定できます。
| 価値 | 説明 |
|---|---|
1 |
関数アプリが、その c:\home\data\SitePackages (Windows) または /home/data/SitePackages (Linux) フォルダーにデプロイされたローカル パッケージ ファイルから実行されることを示します。
これは、Azure Functions Core Tools を使用する場合の既定のオプションです。 |
<URL> |
実行する特定のパッケージ ファイルのリモートの場所を示す URL を設定します。 Linux で動作する従量課金プランの関数アプリには必須です。 |
次の表は、特定のオペレーティング システムとホスティング プランに対するデプロイで推奨される WEBSITE_RUN_FROM_PACKAGE 値を示しています。
| ホスティング プラン | ウィンドウズ | Linux |
|---|---|---|
| 従量課金 |
1 が強く推奨されています。 |
サポートされるのは <URL> のみです。 |
| プレミアム |
1 が推奨されています。 |
1 が推奨されています。 |
| 専用 |
1 が推奨されています。 |
1 が推奨されています。 |
一般的な考慮事項
-
WEBSITE_RUN_FROM_PACKAGEプランのアプリには アプリ設定を追加しないでください。 - パッケージ ファイルは .zip 形式になっている必要があります。 tar と gzip 形式はサポートされていません。
- zip デプロイをお勧めします。
- 関数アプリを Windows にデプロイするときは、
WEBSITE_RUN_FROM_PACKAGEを1に設定して、zip 配置によって発行する必要があります。 - パッケージから実行すると、
wwwrootフォルダーが読み取り専用になり、このディレクトリにファイルを書き込もうとするとエラーが発生します。 ファイルは、Azure portal でも読み取り専用です。 - デプロイ パッケージ ファイルの最大サイズは 1 GB です。
- デプロイでは、プロジェクト ファイルの展開時に一時ストレージが使用されます。 つまり、関数アプリには、パッケージの内容を格納するのに十分な一時ストレージ スペースを用意しておく必要があります。 従量課金プランの一時ストレージ上限はプランあたり 500 MB であることに注意してください。 一時ストレージに関する問題のトラブルシューティングを行う方法については、Azure App Service で一時ストレージのトラブルシューティングを行う方法に関する記事を参照してください。
- デプロイ パッケージから実行する場合、ローカル キャッシュは使用できません。
- プロジェクトでリモート ビルドを使用する必要がある場合は、
WEBSITE_RUN_FROM_PACKAGEアプリ設定を使用しないでください。 代わりに、SCM_DO_BUILD_DURING_DEPLOYMENT=trueデプロイ カスタマイズ アプリ設定を追加します。 Linux の場合は、さらにENABLE_ORYX_BUILD=true設定を追加します。 詳細については、「リモート ビルド」を参照してください。
注
WEBSITE_RUN_FROM_PACKAGE に関するページで説明されているとおり、 アプリ設定は MSDeploy では動作しません。 デプロイ時に ARM-MSDeploy Deploy Failed のようなエラーが発生します。 このエラーを解決するには /MSDeploy を /ZipDeploy に変更します。
WEBSITE_RUN_FROM_PACKAGE 設定の追加
関数アプリの設定は、いくつかの方法で追加、更新、削除できます。
関数アプリの設定に変更を加えるためには、関数アプリを再起動する必要があります。
zip アーカイブの作成
デプロイしようとする zip アーカイブには、開発した関数アプリの実行に必要なすべてのファイルを含める必要があります。 組み込みの .zip 圧縮機能または Microsoft 以外のツールを使用して、Functions プロジェクト フォルダーのコンテンツから zip アーカイブを手動で作成できます。
アーカイブには、抽出されたフォルダーのルートにある host.json ファイルを含める必要があります。 関数アプリ用に選択した言語スタックによって、他の要件が作成されます。
重要
デプロイの目的で、コンパイル済みの出力を生成する言語の場合は、プロジェクト フォルダー全体ではなく、発行する予定の出力フォルダーの内容を圧縮してください。 zip アーカイブの内容を Functions で抽出する場合、host.json ファイルはパッケージのルート内に存在する必要があります。
WEBSITE_RUN_FROM_PACKAGE = 1 の使用
このセクションでは、ローカル パッケージ ファイルから関数アプリを実行する方法について説明します。
オンサイト パッケージからのデプロイに関する考慮事項
- オンサイト パッケージの使用は、デプロイ パッケージから実行する場合に推奨される方法です (従量課金プランでホストされている Linux 上で実行する場合を除く)。
- デプロイ パッケージをサイトにアップロードする方法としては、zip デプロイが推奨されます。
- zip デプロイを使用していない場合は、
c:\home\data\SitePackages(Windows) または/home/data/SitePackages(Linux) フォルダーにpackagename.txtという名前のファイルがあることを確認してください。 このファイルには、このフォルダーにある現在実行中のパッケージ ファイルの、空白を除いた名前だけが含まれています。
zip デプロイとの統合
Zip デプロイは、関数アプリ プロジェクトを wwwroot ディレクトリに配置することを可能にする Azure App Service の機能です。 プロジェクトは、.zip デプロイ ファイルとしてパッケージ化されます。 同じ API を使用して、パッケージを c:\home\data\SitePackages (Windows) または /home/data/SitePackages (Linux) フォルダーに配置できます。
WEBSITE_RUN_FROM_PACKAGE アプリ設定の値を 1 に設定した場合、zip デプロイ API は、ファイルを c:\home\data\SitePackages (Windows) または /home/data/SitePackages (Linux) に抽出する代わりに、パッケージを c:\home\site\wwwroot (Windows) または /home/site/wwwroot (Linux) フォルダーにコピーします。 それは、packagename.txt ファイルも作成します。 関数アプリが自動的に再起動されると、パッケージは読み取り専用ファイルシステムとして wwwroot にマウントされます。 zip デプロイの詳細については、Azure Functions の zip デプロイに関する記事を参照してください。
注
デプロイが行われると、関数アプリの再起動がトリガーされます。 デプロイ中に現在実行されている関数の実行は終了します。 ステートレスな関数と防御的な関数を記述する方法については、「ステートレスな関数を記述する」を参照してください。
WEBSITE_RUN_FROM_PACKAGE = URL の使用
このセクションでは、URL エンドポイントにデプロイされたパッケージから関数アプリを実行する方法について説明します。 この方法がサポートされるのは、従量課金プランを利用して Linux でホストされているパッケージから実行する場合のみです。 Flex 従量課金プランではこのオプションがサポートされていません。
URL からのデプロイに関する考慮事項
-
WEBSITE_RUN_FROM_PACKAGE = <URL>プランのアプリでは を設定しないでください。 このオプションはサポートされていません。 - Windows で関数アプリを実行すると、アプリケーション パッケージが を介して URL エンドポイントにデプロイされるときに
WEBSITE_RUN_FROM_PACKAGE = <URL>がわずかに増加します。 - また、URL を指定するとき、更新済みのパッケージを発行した後にトリガーを手動で同期する必要もあります。
- Functions ランタイムには、パッケージの URL へのアクセス許可が必要です。
- Azure Blob Storage にパブリック BLOB としてパッケージをデプロイしないでください。 代わりに、Shared Access Signature (SAS) があるプライベート コンテナーを使用するか、マネージド ID を使用してパッケージにアクセスするための Functions ランタイムを有効にします。
- デプロイに使用する SAS URL はすべて維持する必要があります。 SAS の有効期限が切れると、パッケージをデプロイできなくなります。 有効期限が切れた場合は、新しい SAS を生成し、関数アプリで設定を更新する必要があります。 マネージド ID を使用することで、この管理上の負担をなくすことができます。
- Premium プランで実行している場合は、コールドスタートを排除してください。
- 専用プランで実行している場合は、必ず [Always On] を有効にしてください。
- Azure Storage Explorer を使用して、ご利用のストレージ アカウントの BLOB コンテナーにパッケージ ファイルをアップロードできます。
Blob Storage に手動でパッケージをアップロードする
URL オプションを使用するときに ZIP 形式のパッケージをデプロイするには、圧縮された .zip パッケージを作成し、デプロイ先にアップロードする必要があります。 次の手順では、Blob Storage のコンテナーにデプロイします。
適当なユーティリティを使って、プロジェクトの .zip パッケージを作成します。
Azure portal で、ストレージ アカウント名を検索するか、ストレージ アカウント リストで参照します。
ストレージ アカウントで、 [データ ストレージ] の下の [コンテナー] を選びます。
[+ コンテナー] を選んで、アカウントに新しい Blob Storage コンテナーを作成します。
[新しいコンテナー] ページで [名前] を指定し (deployments など)、 [匿名アクセス レベル] が [プライベート] になっていることを確認して [作成] を選択します。
作成したコンテナーを選択し、[アップロード] を選択し、プロジェクトで作成した .zip ファイルの場所を参照して、[アップロード] を選択します。
アップロードが完了したら、アップロードした BLOB ファイルを選んで、URL をコピーします。 マネージド ID を使用していない場合は、SAS URL の生成が必要になる場合があります。
関数アプリを検索するか、 [関数アプリ] ページで参照します。
関数アプリで [設定] を展開し、[環境変数] を選択します。
[アプリ設定] タブで [+ 追加] を選択します。
WEBSITE_RUN_FROM_PACKAGEに値 を入力し、 [値] として Blob Storage 内のパッケージの URL を貼り付けます。[適用] を選択したら [適用]、[確定] の順に選択して設定を保存し、関数アプリを再起動します。
これで、Azure で関数を実行し、デプロイ パッケージの .zip ファイルのデプロイが成功したことを検証できます。
マネージド ID を使用して Azure Blob Storage からパッケージを取得する
Microsoft Entra ID で要求を承認するように Azure Blob Storage を構成できます。 この構成では、有効期限がある SAS キーを生成する代わりに、アプリケーションのマネージド ID を使用することができます。 既定では、アプリのシステム割り当て ID が使用されます。 ユーザー割り当て ID を指定する場合は、WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID アプリ設定をその ID のリソース ID に設定できます。 この設定は SystemAssigned を値として受け入れることもできます。これは設定を省略することと同じです。
ID を使用してパッケージをフェッチできるようにするには、次のようにします。
Blob がプライベート アクセス用に構成されていることを確認します。
ID に、パッケージ blob に対するスコープを持つ Storage Blob データリーダー ロールを付与します。 ロールの割り当ての作成の詳細については、「blob データにアクセスするための Azure ロールの割り当て」を参照してください。
WEBSITE_RUN_FROM_PACKAGEアプリケーション設定をパッケージの BLOB URL に設定します。 この URL は通常、https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}のような形式です。ユーザー割り当て ID を指定する場合は、
WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_IDアプリ設定をその ID のリソース ID に設定できます。 この設定は "SystemAssigned" を値として受け入れることもできますが、これは設定をまとめて省略することと同じです。 リソース ID は、Azure でのリソースの標準的な表現です。 ユーザー割り当てマネージド ID の場合、それは/subscriptions/subid/resourcegroups/rg-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-nameになります。 ユーザー割り当てマネージド ID のリソース ID は、[設定] ->[プロパティ] ->[ユーザー割り当てマネージド ID の ID] で取得できます。