Azure Functions の Azure Container Apps ホスティング

Azure Functions では、Azure Container Apps でコンテナー化された関数アプリを開発、デプロイ、管理するための統合サポートが提供されます。 Azure 内の、他のマイクロサービス、API、Web サイト、ワークフロー、またはコンテナーでホストされているプログラムと同じ環境で、イベント ドリブン関数を実行する必要がある場合は、Azure Container Apps を使って関数アプリ コンテナーをホストします。 Container Apps によるホスティングを使うと、オープンソースの監視、mTLS、Dapr、KEDA の組み込みサポートを使って、Kubernetes ベースの環境内で関数を実行できます。

重要

Azure Container Apps での関数アプリのホスティングのサポートは、現在プレビュー段階です。

Container Apps との統合により、既存の関数プログラミング モデルを使用して、Azure Functions でサポートされている任意のプログラミング言語またはフレームワークで関数コードを記述できます。 イベント ドリブン スケーリングでは、引き続き Functions のトリガーとバインドが得られます。 Container Apps では、基になる Azure Kubernetes Service (AKS) の機能を使用しながら、Kubernetes API での作業で必要となる複雑さが解消されます。

また、この統合は、既存の Functions クライアント ツールと Azure portal を使ってコンテナーを作成し、関数アプリ コンテナーを Container Apps にデプロイして、継続的デプロイを構成できることを意味します。 ネットワークと監視の構成は、Container App 環境のレベルで定義され、Container Apps 環境で実行されているすべてのマイクロサービス (関数アプリを含む) に適用されます。 また、KEDA、Dapr、Envoy など、Container Apps の他のクラウドネイティブ機能も使用できます。 Application Insights を使用して関数の実行を監視することもできます。

ホスティングとワークロード プロファイル

Container Apps には、サーバーレスの従量課金プランと、ワークロード プロファイルを使ってデプロイ リソースをより適切に制御する専用プランの、2 つの主要なホスティング プランがあります。 ワークロード プロファイルにより、環境にデプロイされたコンテナー アプリで使用できるコンピューティング リソースとメモリ リソースの量が決定されます。 これらのプロファイルは、アプリケーションのさまざまなニーズに合わせて構成されます。 従量課金ワークロード プロファイルは、すべてのワークロード プロファイルの環境の種類に追加される既定のプロファイルです。 専用ワークロード プロファイルは、環境の作成時または作成後に環境に追加できます。 ワークロード プロファイルについて詳しくは、「Azure Container Apps のワークロード プロファイル」をご覧ください。

コンテナー化された関数アプリの Container Apps によるホスティングは、Container Apps をサポートするすべてのリージョンでサポートされます。

アプリに特定のハードウェア要件がない場合は、従量課金プランまたは既定の従量課金ワークロード プロファイルを使う専用プランのどちらでも、環境を実行できます。 Container Apps で関数を実行する場合、Container Apps の使用に対してのみ課金されます。 詳細については、Azure Container Apps の価格ページを参照してください。

Azure Container Apps 上の Azure Functions では、ワークロード プロファイルを使用する専用プランでの GPU が有効なホスティングがサポートされています。

既定の従量課金プランで関数アプリ コンテナーを作成して Container Apps にデプロイする方法については、「Azure Container Apps で最初のコンテナー化された関数を作成する」をご覧ください。

ワークロード プロファイルを使って Container Apps 環境を作成し、関数アプリ コンテナーを特定のワークロードにデプロイする方法については、Container Apps のワークロード プロファイルに関する記事をご覧ください。

コンテナー内の関数

Container Apps によるホスティングを使うには、ユーザーが作成して管理する Linux コンテナーで関数コードを実行する必要があります。 Functions では、コンテナー化された関数アプリの生成に使用できる言語固有の基本イメージのセットが保持されます。

Azure Functions Core Tools を使って Functions プロジェクトを作成し、--docker オプションを含めると、Core Tools によって正しい基本イメージを含む Dockerfile が生成されます。これを基にして、自分でコンテナーを作成できます。

重要

独自のコンテナーを作成する場合は、コンテナーの基本イメージを、サポートされている最新の基本イメージに更新しておく必要があります。 Azure Functions でサポートされている基本イメージは言語固有であり、Azure Functions 基本イメージ リポジトリにあります。

Functions チームは、これらの基本イメージの毎月の更新プログラムを公開できるよう取り組んでいます。 通常の更新プログラムには、Functions ランタイムと言語の両方について、最新のマイナー バージョンの更新プログラムとセキュリティ修正プログラムが含まれます。 最新の基本イメージからコンテナーを定期的に更新し、コンテナーの更新されたバージョンを再デプロイする必要があります。

関数コードに変更を加える場合は、コンテナー イメージを再構築して再パブリッシュする必要があります。 詳細については、「レジストリ内のイメージを更新する」を参照してください。

デプロイ オプション

現在、Azure Functions では、コンテナー化された関数アプリを Azure Container Apps にデプロイする次の方法がサポートされています。

スケール ルールを構成する

Container Apps の Azure Functions は、イベント ターゲットに従ってスケール パラメーターとルールを構成するように設計されています。 KEDA スケーリング オブジェクトの構成について考慮する必要はありません。 関数アプリを作成または変更する場合に、引き続きレプリカの最小数と最大数を設定できます。 次の Azure CLI コマンドでは、Container Apps 環境で Azure Container Registry から新しい関数アプリを作成するときの最小レプリカ数と最大レプリカ数を設定します。

az functionapp create --name <APP_NAME> --resource-group <MY_RESOURCE_GROUP> --max-replicas 15 --min-replicas 1 --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --image <LOGIN_SERVER>/azurefunctionsimage:v1 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD> --registry-server <LOGIN_SERVER>

次のコマンドでは、既存の関数アプリで同じ最小レプリカ数と最大レプリカ数を設定します。

az functionapp config container set --name <APP_NAME> --resource-group <MY_RESOURCE_GROUP> --max-replicas 15 --min-replicas 1

管理対象リソース グループ

Container Apps 上の Azure Functions では、特別な管理対象リソース グループ内で関数化されたコンテナー リソースが実行されます。これにより、ユーザー、グループ、またはサービス プリンシパルによる管理対象グループ内のリソースの意図しない、または未承認の変更や削除が防がれるので、アプリの一貫性を保護できます。 この管理対象リソース グループは、ユーザーが Container Apps 環境で関数アプリ リソースを初めて作成するときに、自動的に作成されます。 コンテナー化された関数アプリで必要な Container Apps リソースは、この管理対象リソース グループで実行され、同じ環境で作成される他のすべての関数アプリが、この既存のグループを使います。 すべての関数アプリ コンテナー リソースが環境から削除されると、管理対象リソース グループは自動的に削除されます。 管理対象リソース グループを表示できる間は、管理対象リソース グループを変更または削除しようとするとエラーが発生します。 環境から管理対象リソース グループを削除するには、すべての関数アプリ コンテナー リソースを削除すると、自動的に削除されます。 これらの管理対象リソース グループで問題が発生する場合は、サポートにお問い合わせください。

Container Apps ホスティングに関する考慮事項

Container Apps に関数アプリ コンテナーをデプロイする際には、次の考慮事項に注意してください。

  • すべてのトリガーを使用できますが、Container Apps で実行すると、次のトリガーのみが (0 個のインスタンスから) 動的にスケーリングできます。
    • HTTP
    • Azure Queue Storage
    • Azure Service Bus
    • Azure Event Hubs
    • Kafka*
    • タイマー
      * Container Apps でホストされているときは、プロトコル値 ssl はサポートされません。 別のプロトコル値を使用します。
  • 組み込みの Container Apps ポリシー定義では、現在、環境レベルのポリシーのみが Azure Functions コンテナーに適用されます。
  • 現在、リソース グループやサブスクリプション間で Container Apps でホストされる関数アプリの配置を移動できません。 代わりに、既存のコンテナー化されたアプリの配置を新しいリソース グループ、サブスクリプション、またはリージョンに再作成する必要があります。
  • Container Apps を使用する場合、下位レベルの Kubernetes API に直接アクセスすることはできません。
  • containerapp 拡張機能は Azure CLI の appservice-kube 拡張機能と競合します。 以前に Azure Arc にアプリをパブリッシュしたことがある場合は、az extension list を実行し、appservice-kube がインストールされていないことを確認してください。 インストールされている場合は、az extension remove -n appservice-kube を実行して削除できます。
  • Functions Dapr 拡張機能もプレビュー段階であり、リポジトリでヘルプが提供されています。

次の手順