Azureでは、関数アプリのデプロイ パッケージ ファイルから直接関数を実行できます。 もう 1 つのオプションは、関数アプリの 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 値を示しています。
| ホスティング プラン | Windows | Linux |
|---|---|---|
| 従量課金 |
1 が強く推奨されています。 |
サポートされるのは <URL> のみです。 |
| プレミアム |
1 が推奨されています。 |
1 が推奨されています。 |
| 専用 |
1 が推奨されています。 |
1 が推奨されています。 |
一般的な考慮事項
-
WEBSITE_RUN_FROM_PACKAGEプランのアプリには、 アプリ設定を追加しないでください。 - パッケージ ファイルは .zip 形式になっている必要があります。 tar と gzip 形式はサポートされていません。
- zip デプロイをお勧めします。
- 関数アプリをWindowsにデプロイするときは、
WEBSITE_RUN_FROM_PACKAGEを1に設定し、zip デプロイで発行する必要があります。 - パッケージから実行すると、
wwwrootフォルダーが読み取り専用になり、このディレクトリにファイルを書き込もうとするとエラーが発生します。 ファイルは、Azure ポータルでも読み取り専用です。 - デプロイ パッケージ ファイルの最大サイズは 1 GB です。
- デプロイでは、プロジェクト ファイルの展開時に一時ストレージが使用されます。 つまり、関数アプリには、パッケージの内容を格納するのに十分な一時ストレージ スペースを用意しておく必要があります。 従量課金プランの一時ストレージ上限はプランあたり 500 MB であることに注意してください。 一時ストレージに関する問題のトラブルシューティング方法については、「Azure App Service の一時ストレージのトラブルシューティング方法」を参照してください。
- デプロイ パッケージから実行する場合、ローカル キャッシュは使用できません。
- プロジェクトでリモート ビルドを使用する必要がある場合は、
WEBSITE_RUN_FROM_PACKAGEアプリ設定を使用しないでください。 代わりに、SCM_DO_BUILD_DURING_DEPLOYMENT=trueデプロイ カスタマイズ アプリ設定を追加します。 Linux の場合は、さらにENABLE_ORYX_BUILD=true設定を追加します。 詳細については、「リモート ビルド」を参照してください。
注
MSDeploy 対 ZipDeploy の比較で説明されているように、アプリ設定は MSDeploy では機能しません。
ARM-MSDeploy Deploy Failedなど、デプロイ中にエラーが発生します。 このエラーを解決するには /MSDeploy を /ZipDeploy に変更します。
WEBSITE_RUN_FROM_PACKAGE 設定の追加
関数アプリの設定は、いくつかの方法で追加、更新、削除できます。
- Azure ポータルで
Azure CLI を使用する- Azure PowerShell を使用する
関数アプリの設定に変更を加えるためには、関数アプリを再起動する必要があります。
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 の
注
デプロイが行われると、関数アプリの再起動がトリガーされます。 デプロイ中に現在実行されている関数の実行は終了します。 ステートレス関数と防御関数を記述する方法については、 Write 関数をステートレスに設定します。
WEBSITE_RUN_FROM_PACKAGE = <URL> を使用する
このセクションでは、URL エンドポイントにデプロイされたパッケージから関数アプリを実行する方法について説明します。 この方法がサポートされるのは、従量課金プランを利用して Linux でホストされているパッケージから実行する場合のみです。 このオプションは、 Flex 従量課金 プランではサポートされていません。
URL からのデプロイに関する考慮事項
-
WEBSITE_RUN_FROM_PACKAGE = <URL>プランのアプリでを設定しないでください。 このオプションはサポートされていません。 - Windowsで実行されている関数アプリでは、アプリケーション パッケージが 経由で URL エンドポイントにデプロイされると、
WEBSITE_RUN_FROM_PACKAGE = <URL>がわずかに増加します。 - また、URL を指定するとき、更新済みのパッケージを発行した後にトリガーを手動で同期する必要もあります。
- Functions ランタイムには、パッケージの URL へのアクセス許可が必要です。
- パッケージをパブリック BLOB としてAzure Blob Storageにデプロイしないでください。 代わりに、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 ポータルで、ストレージ アカウント名を検索するか、ストレージ アカウントの一覧で参照します。
ストレージ アカウントで、 [データ ストレージ] の下の [コンテナー] を選びます。
+ コンテナー を選択して、アカウントに新しいBlob Storage コンテナーを作成します。
[新しいコンテナー] ページで [名前] を指定し (deployments など)、 [匿名アクセス レベル] が [プライベート] になっていることを確認して [作成] を選択します。
作成したコンテナーを選択し、[アップロード] を選択し、プロジェクトで作成した .zip ファイルの場所を参照して、[アップロード] を選択します。
アップロードが完了したら、アップロードした BLOB ファイルを選んで、URL をコピーします。 マネージド ID を使用していない場合は、SAS URL の生成が必要になる場合があります。
関数アプリを検索するか、 [関数アプリ] ページで参照します。
関数アプリで [設定] を展開し、[環境変数] を選択します。
[アプリ設定] タブで [+ 追加] を選択します。
WEBSITE_RUN_FROM_PACKAGEの値 を入力し、パッケージの URL を Value のBlob Storageに貼り付けます。[適用] を選択したら [適用]、[確定] の順に選択して設定を保存し、関数アプリを再起動します。
これで、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 の Settings>Properties>ID で取得できます。
関連コンテンツ
Azure Functions の継続的デプロイメント