Azure Functions で実行する個々の関数を計画して開発する場合、通常、コード自体に重点を置きます。 Azure Functions を使用すると、Azure の関数アプリにコード プロジェクトをデプロイするだけで済み、作業が容易になります。 プロジェクトを Linux 関数アプリにデプロイすると、コードは自動的に作成されたコンテナーで実行され、Functions 管理ツールとシームレスに統合されます。
Functions では、コンテナー化された関数アプリのデプロイもサポートされています。 コンテナー化されたデプロイでは、サポートされているベース イメージからローカルの Docker コンテナーに独自の関数アプリ インスタンスを作成します。 その後、この コンテナー化された 関数アプリを Azure のホスティング環境にデプロイできます。 独自の関数アプリ コンテナーを作成すると、関数コードの即時ランタイム環境のカスタマイズまたは制御を行うことができます。
Important
独自のコンテナーを作成するときは、コンテナーの基本イメージを、サポートされている最新の基本イメージに更新しておく必要があります。 Azure Functions でサポートされている基本イメージは言語固有です。 Azure Functions の基本イメージ リポジトリを参照してください。
Functions チームは、これらの基本イメージの更新プログラムを毎月公開できるよう取り組んでいます。 通常の更新プログラムには、Functions ランタイムと言語の両方について、最新のマイナー バージョンの更新プログラムとセキュリティ修正プログラムが含まれます。 最新の基本イメージからコンテナーを定期的に更新し、コンテナーの更新されたバージョンを再デプロイする必要があります。 詳しくは、「カスタム コンテナーのメンテナンス」をご覧ください。
コンテナー ホスティング オプション
コンテナー化された関数アプリを Azure でホストするには、いくつかのオプションがあります。
ホスティング オプション | Benefits |
---|---|
Azure Container Apps | Azure Functions では、Azure Container Apps でコンテナー化された関数アプリを開発、デプロイ、管理するための統合サポートが提供されます。 この統合により、Azure portal で同じ Functions ツールとページを使ってアプリを管理できます。 Azure Container Apps を使用して、他のマイクロサービス、API、Web サイト、ワークフロー、またはその他のコンテナーでホストされているプログラムと同じ環境で関数アプリ コンテナーをホストします。 Container Apps によるホスティングを使用すると、オープンソースの監視、mTLS、Dapr、KEDA の組み込みサポートを使って、マネージド Kubernetes ベースの環境内で関数を実行できます。 ゼロへのスケーリングをサポートすると、サーバーレスの従量課金制ホスティング モデルが提供されます。 ワークロード プロファイルを使うと、専用のハードウェアを (GPU でさえ) 要求できます。 コンテナー化された関数アプリ n Azure の推奨ホスティング オプション。 |
Azure Arc 対応 Kubernetes クラスター (プレビュー) | Azure Arc 対応 Kubernetes クラスターで、関数アプリをコードのみのデプロイまたはカスタム Linux コンテナー内のいずれかとしてホストできます。 Azure Arc を使用すると、Kubernetes クラスターをアタッチできるため、Azure で管理および構成できます。 Azure Arc 対応 Kubernetes クラスターでの Azure Functions コンテナーのホスティングは、現在プレビュー段階です。 詳細については、「コンテナーと Azure Functions を使用する」を参照してください。 |
Azure Functions | コンテナー化された関数アプリを Azure Functions でホストするには、 Elastic Premium または App Service (専用) プランでコンテナーを実行します。 Container Apps の豊富なコンテナー サポートには、Container Apps ホスティングを使用します。 Premium プランでのホスティングには、動的スケーリングの利点があります。 既存の App Service プランの使われていないリソースを活用するには、専用プランのホスティングを使うことをお勧めします。 |
Kubernetes | Azure Functions ランタイムは、必要な場所や方法で柔軟にホストできるため、関数アプリ コンテナーを Kubernetes クラスターで直接ホストして管理できます。 KEDA (Kubernetes ベースのイベント ドリブン自動スケーリング) は、Azure Functions ランタイムとツールとシームレスに組み合わせて、Kubernetes でイベント ドリブンスケールを提供します。 大事な: コンテナー化された関数アプリの Kubernetes ホスティングは、KEDA を使用するか、直接デプロイすることで、無料で使用できるオープンソースの作業です。 このホスティング シナリオのベスト エフォート サポートは、共同作成者とコミュニティによってのみ提供されます。 Azure Kubernetes Service (AKS) にデプロイする場合でも、クラスター内で独自の関数アプリ コンテナーを維持する責任があります。 |
機能サポートの比較
コンテナー内で関数アプリを実行する際に Azure Functions のさまざまな機能と動作がどの程度サポートされるかは、選択したコンテナー ホスティング オプションによって異なります。
Feature/behavior | Container Apps (統合) | Container Apps (直接) | プレミアムプラン | 専用プラン | Kubernetes |
---|---|---|---|---|---|
製品サポート | Yes | No | Yes | Yes | No |
Functions ポータルの統合 | No | No | Yes | Yes | No |
イベント ドリブンスケーリング | Yes5 | はい (スケール ルール) | Yes | No | No |
最大スケール (インスタンス) | 10001 | 10001 | 1002 | 10-303 | クラスターによって異なります |
0 にスケーリングするインスタンス | Yes | Yes | No | No | KEDA |
実行時間の制限 | Unbounded6 | Unbounded6 | Unbounded7 | Unbounded8 | None |
Core Tools のデプロイ | No | No | No | No | func kubernetes |
Revisions | Yes | Yes | No | No | No |
デプロイ スロット | No | No | Yes | Yes | No |
ストリーミング ログ | Yes | Yes | Yes | Yes | No |
コンソール アクセス | Yes | Yes | はい ( Kudu を使用) | はい ( Kudu を使用) | はい (ポッド内で kubectl を使用) |
コールド スタートの軽減策 | 最小レプリカ数 | スケール ルール | 常時準備済み/事前加熱済みインスタンス | n/a | n/a |
App Service 認証 | Yes | Yes | Yes | Yes | No |
カスタム ドメイン名 | Yes | Yes | Yes | Yes | No |
秘密キー証明書 | Yes | Yes | Yes | Yes | No |
仮想ネットワーク | Yes | Yes | Yes | Yes | Yes |
可用性ゾーン | Yes | Yes | Yes | Yes | Yes |
Diagnostics | Yes | Yes | Yes | Yes | No |
専用のハードウェア | はい (ワークロード プロファイル) | はい (ワークロード プロファイル) | No | Yes | Yes |
専用 GPU | はい (ワークロード プロファイル) | はい (ワークロード プロファイル) | No | No | Yes |
構成可能なメモリ/CPU の数 | Yes | Yes | No | No | Yes |
"無料提供" オプション | Yes | Yes | No | No | No |
価格の詳細 | Container Apps の課金 | Container Apps の課金 | Premium プランの課金 | 専用プランの課金 | AKS の価格 |
サービス名の要件 | 2 から 32 文字: 小文字、数字、ハイフンのみ使用できます。 先頭は文字、末尾は英数字にする必要があります。 | 2 から 32 文字: 小文字、数字、ハイフンのみ使用できます。 先頭は文字、末尾は英数字にする必要があります。 | 64 文字未満: 英数字とハイフンのみ使用できます。 先頭も末尾もハイフンにすることはできません。 | 64 文字未満: 英数字とハイフンのみ使用できます。 先頭も末尾もハイフンにすることはできません。 | 253 文字未満: 英数字とハイフンのみ使用できます。 先頭と末尾は英数字とする必要があります。 |
- Container Apps での既定値は 10 インスタンスですが、レプリカの最大数を設定でき、合計で最大 1,000 個です。 利用できるコア クォータが十分にある限り、この設定が使用されます。 Azure portal から関数アプリを作成する際は、300 インスタンスに制限されます。
- 一部のリージョンでは、Premium プランの Linux アプリを 100 インスタンスにスケーリングできます。 詳しくは、Premium プランに関する記事をご覧ください。
- さまざまな App Service プラン オプションに固有の制限については、App Service プランの制限に関する記事をご覧ください。
- KEDA が必要です。ほとんどのトリガーでサポートされています。 イベント ドリブン スケーリングをサポートするトリガーについては、「Container Apps ホスティングに関する考慮事項」を参照してください。
- 最小レプリカ数が 0 に設定されている場合、既定のタイムアウトはアプリで使われている特定のトリガーによって異なります。
- 実行タイムアウトの最長期間は適用されません。 ただし、関数の実行に与えられる猶予期間は、スケールイン中は 60 分、プラットフォーム更新中は 10 分です。
- App Service プランを Always On に設定する必要があります。 プラットフォームの更新中は 10 分の猶予期間が与えられます。
カスタム コンテナーのメンテナンス
独自のコンテナーを作成する場合は、コンテナーの基本イメージを、サポートされている最新の基本イメージに更新しておく必要があります。 Azure Functions でサポートされている基本イメージは言語固有であり、Azure Functions 基本イメージ リポジトリにあります。
Functions チームは、これらの基本イメージの更新プログラムを毎月公開できるよう取り組んでいます。 通常の更新プログラムには、Functions ランタイムと言語の両方について、最新のマイナー バージョンの更新プログラムとセキュリティ修正プログラムが含まれます。 最新の基本イメージからコンテナーを定期的に更新し、コンテナーの更新されたバージョンを再デプロイする必要があります。
関数アプリで使用している言語スタックに基づいて、基本イメージを選択します。 次の表に、各スタックの例を示します。 一般に、タグは V4 Functions ランタイムを示す 4-
で始まる必要があります。 新しいマイナー バージョンがリリースされると、このタグは新しいバージョンを指すよう更新されます。 カスタム イメージを定期的にリビルドすると、同じタグを介して新しいバージョンがプルされ、アプリが同じ更新プログラムを使用できるようになります。 マイナー ランタイム バージョンを指定するタグは使用しないでください。これらは更新プログラムを受け取らないので、カスタム イメージをリビルドする頻度に関係なく、アプリは修正プログラムが適用されていないバージョンのままになる可能性があります。
言語スタック | 推奨される基本イメージ タグの例 |
---|---|
.NET (分離ワーカー モデル) | mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0 またはmcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0-appservice (これらの例は .NET 8 を対象とします。必要な .NET バージョンに適したイメージを選択します)。 |
.NET (レガシ インプロセス モデル) | mcr.microsoft.com/azure-functions/dotnet:4-dotnet8.0 またはmcr.microsoft.com/azure-functions/dotnet:4-dotnet8.0-appservice (インプロセス モデルのサポートは 2026 年 11 月 10 日に終了します。できるだけ早く 分離ワーカー モデルに移行 する必要があります)。 |
Java | mcr.microsoft.com/azure-functions/java:4-java21 またはmcr.microsoft.com/azure-functions/java:4-java21-appservice (これらの例は Java 21 を対象とします。必要な Java バージョンに適したイメージを選択します)。) |
Node.js (JavaScript または TypeScript) | mcr.microsoft.com/azure-functions/node:4-node22 またはmcr.microsoft.com/azure-functions/node:4-node22-appservice (これらの例では、Node.js 22 を対象とします。必要な Node.js バージョンに適したイメージを選択します)。 |
PowerShell | mcr.microsoft.com/azure-functions/powershell:4-powershell7.4 またはmcr.microsoft.com/azure-functions/powershell:4-powershell7.4-appservice (これらの例は PowerShell 7.4 を対象とします。必要な PowerShell バージョンに適したイメージを選択します)。 |
Python | mcr.microsoft.com/azure-functions/python:4-python3.12 またはmcr.microsoft.com/azure-functions/python:4-python3.12-appservice (これらの例は Python 3.12 を対象とします。必要な Python バージョンに適したイメージを選択します)。) |
カスタム ハンドラー/その他 | mcr.microsoft.com/azure-functions/base:4 またはmcr.microsoft.com/azure-functions/base:4-appservice |
-appservice
で終わる基本イメージは、プラットフォームからのSSHおよびリモートデバッグを可能にします。 これらの機能が必要な場合を除き、 -appservice
サフィックスなしで基本イメージを使用できます。
Important
Dockerfile に上記のいずれかのタグを含めるだけでは不十分です。 カスタム イメージを再構築して最新の更新プログラムを含めることができるように、そのタグから最新のイメージを定期的にプルする必要があります。 最新のイメージをプルしてリビルドしない場合、アプリは引き続き古い基本イメージで実行されます。
カスタム イメージを使って独自のコンテナー化されたアプリを作成またはデプロイする場合、リリースされた基本イメージでカスタム イメージを最新の状態に保つのはお客様の責任になります。 これらの基本イメージの更新プログラムには、新機能と機能強化に加えて、ユーザーのアプリにとって重要なセキュリティ更新プログラムが含まれることもあります。 アプリが確実に保護されるようにするには、最新の状態を維持していることを確認します。 基本イメージの最新バージョンを定期的にプルし、カスタム コンテナー イメージを再構築し、それを使用するようにアプリを再デプロイする必要があります。
場合によっては、プラットフォーム レベルの変更を行う必要があり、古い基本イメージを使っているカスタム コンテナー内のアプリが正常に動作しなくなる可能性があります。 このような大きな変更の場合は、定期的に更新されるアプリに悪影響がないよう、更新されたイメージのロールアウトは十分な余裕を持って事前に行われます。 カスタム コンテナーで実行されているアプリに関する潜在的な問題を回避するため、リリースされた最新のマイナー バージョンへの更新があまり遅くならないようにしてください。 サポート ケースの間に、アプリが古いバージョンまたはサポートされていないバージョンで動作しているために問題が発生しているかどうかを判断する必要があるため、サポートを続ける前に、コンテナーを最新の基本イメージ バージョンに更新するようお客様にお願いします。
作業の開始
Linux コンテナーで Azure Functions を使い始めるには、次のリンクをご覧ください。
行いたいこと | 記事を参照してください。 |
---|---|
最初のコンテナー化された関数を作成する | ローカル Linux コンテナーに関数アプリを作成する |
関数を作成して Azure Container Apps にデプロイする | Azure Container Apps で最初のコンテナ化された関数を作成する |
コンテナー化された関数を作成して Azure Functions にデプロイする | コンテナー化された最初の Azure Functions を作成する |