Flex 従量課金プランの関数アプリを作成および管理する
この記事では、Azure Functions の Flex 従量課金プランでホストされる関数アプリを作成する方法について説明します。 また、Flex 従量課金プランでホストされるアプリの特定の機能を管理する方法についても説明します。
関数アプリ リソースは言語固有です。 記事の先頭で、推奨されるコード開発言語を必ず選択してください。
前提条件
アクティブなサブスクリプションが含まれる Azure アカウント。 まだアカウントがない場合は、無料でアカウントを作成することができます。
Azure CLI: Azure でリソースを作成および管理するために使用されます。 ローカル コンピューターで Azure CLI を使用している場合は、必ず 2.60.0 以降のバージョンを使用してください。 また、適切な Azure CLI バージョンを含む Azure Cloud Shell を使用することもできます。
Visual Studio Code: アプリを作成および開発し、Azure リソースを作成し、コード プロジェクトを Azure にデプロイするために使用されます。 Visual Studio Code を使用している場合は、必ず最新の Azure Functions 拡張機能もインストールしてください。 また、Azure Tools 拡張機能パックをインストールすることもできます。
Flex 従量課金プラン アプリを作成する必要はありませんが、新しい関数アプリにデプロイでき、それを検証するコード プロジェクトが必要です。 次のいずれかのクイックスタート記事の最初の部分を完了します。そこでは、HTTP によってトリガーされる関数を含むコード プロジェクトを作成します:
Maven のデプロイ中に新しい Flex 従量課金プランのアプリを作成するには、ローカル アプリ プロジェクトを作成してから、そのプロジェクトの pom.xml ファイルを更新する必要があります。 詳細については、Maven を使用した Java Flex 従量課金アプリの作成に関するページを参照してください。
ローカル プロジェクトを作成して実行した後、Azure リソースを作成するよう求められる前にこの記事に戻ります。 関数アプリとその他の Azure リソースは、次のセクションで作成します。
Flex 従量課金アプリを作成する
このセクションでは、Azure CLI、Azure portal、Visual Studio Code のいずれかを使用して、Flex 従量課金プランの関数アプリを作成する方法について説明します。 Bicep/ARM テンプレートを使用して Flex 従量課金プランのアプリを作成する例については、Flex 従量課金リポジトリを参照してください。
代わりに Maven を使用してアプリを作成してデプロイすることを選択する場合は、このセクションをスキップできます。
関数コードをサポートするには、次の 3 つのリソースを作成する必要があります。
- リソース グループ。関連リソースの論理コンテナーです。
- ストレージ アカウント。関数についての情報 (状態など) を維持する目的で使用されます。
- Flex 従量課金プランの関数アプリ。これは、関数コードを実行するための環境を提供します。 関数アプリはローカル関数プロジェクトにマップされるため、関数を Flex 従量課金プランのリソースの管理、デプロイ、共有を容易にするための論理ユニットとしてグループ化できます。
まだ Azure にサインインしていない場合は、Azure にサインインします。
az login
az login
コマンドで Azure アカウントにサインインします。az functionapp list-flexconsumption-locations
コマンドを使用して、現在 Flex 従量課金をサポートしているリージョンの一覧を確認します。az functionapp list-flexconsumption-locations --output table
現在サポートされているリージョンのいずれかにリソース グループを作成します。
az group create --name <RESOURCE_GROUP> --location <REGION>
上記のコマンドで、
<RESOURCE_GROUP>
をサブスクリプション内で一意の値に、<REGION>
を現在サポートされているリージョンのいずれかに置き換えます。 az group create コマンドでリソース グループを作成します。リソース グループとリージョン内に汎用ストレージ アカウントを作成します。
az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group <RESOURCE_GROUP> --sku Standard_LRS --allow-blob-public-access false
前の例の
<STORAGE_NAME>
は、適宜、Azure Storage 内で一意の名前に置き換えてください。 名前は 3 文字から 24 文字とし、小文字のみを使用する必要があります。Standard_LRS
は汎用アカウントを指定します。これは Functions でサポートされています。 az storage account create コマンドでストレージ アカウントを作成します。重要
ストレージ アカウントは、アプリケーション コード自体を含む重要なアプリ データを格納するために使用されます。 他のアプリやユーザーからのアクセスをストレージ アカウントに制限する必要があります。
Azure に関数アプリを作成します。
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime dotnet-isolated --runtime-version 8.0
インプロセスで実行される C# アプリは現在、Flex 従量課金プランで実行される場合はサポートされていません。
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime java --runtime-version 17
Java アプリの場合は、Java 11 も現在サポートされています。
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime node --runtime-version 20
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime python --runtime-version 3.11
Python アプリの場合は、Python 3.10 も現在サポートされています。
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime powershell --runtime-version 7.4
この例では、
<RESOURCE_GROUP>
と<STORAGE_NAME>
の両方をそれぞれ、前の手順で使用したリソース グループとアカウントの名前に置き換えます。 また、<APP_NAME>
も自分に適したグローバルに一意の名前に置き換えます。<APP_NAME>
はまた、関数アプリの既定のドメイン ネーム サーバー (DNS) ドメインでもあります。az functionapp create
コマンドは、Azure に関数アプリを作成します。このコマンドでは、Flex 従量課金プランで実行される関数アプリを作成します。
このアプリは、常時使用可能なインスタンスを指定せずに作成したため、関数をアクティブに実行した場合にのみコストが発生します。 また、このコマンドを実行すると、関連する Azure Application Insights インスタンスが同じリソース グループに作成されます。このインスタンスを使用することで、関数アプリを監視し、ログを確認できます。 詳しくは、「Azure Functions を監視する」をご覧ください。
コード プロジェクトをデプロイする
代わりに Maven を使用してアプリを作成してデプロイすることを選択する場合は、このセクションをスキップできます。
さまざまなツールを使用して、既存の関数アプリにプロジェクト コードをデプロイすることを選択できます。
重要
既存の関数アプリにデプロイすると、Azure にあるそのアプリの内容が常に上書きされます。
コマンド パレットで、入力して [Azure Functions: 関数アプリにデプロイする] を選択します。
作成したばかりの関数アプリを選びます。 前のデプロイの上書きを求められたら、[デプロイ] を選択して、関数コードを新しい関数アプリ リソースにデプロイします。
デプロイの完了後、[出力の表示] を選択すると、作成済みの Azure リソースなど、作成とデプロイの結果が表示されます。 通知を見逃した場合は、右下隅にあるベル アイコンを選択して、再度確認します。
Maven を使用してアプリを作成してデプロイする
Maven を使用すると、pom.xml ファイルを変更することによって、デプロイ中に Flex 従量課金でホストされる関数アプリと必要なリソースを作成できます。
次のいずれかのクイックスタート記事の最初の部分を完了して、Java コード プロジェクトを作成します。
Java コード プロジェクトで、pom.xml ファイルを開き、次の変更を行って Flex 従量課金プランの関数アプリを作成します。
<properties>.<azure.functions.maven.plugin.version>
の値を1.34.0
に変更します。azure-functions-maven-plugin
の<plugin>.<configuration>
セクションで、次のように<pricingTier>
要素を追加するか、またはコメント解除します。<pricingTier>Flex Consumption</pricingTier>
(省略可能)
<plugin>.<configuration>
セクションに次の要素も含めることによって、Maven デプロイでの Flex 従量課金プランをカスタマイズします。<instanceSize>
- 関数アプリのインスタンス メモリ サイズを設定します。 既定値は2048
です。<maximumInstances>
- 関数アプリの最大インスタンス数として最も大きな値を設定します。<alwaysReadyInstances>
- HTTP トリガー グループ (<http>
)、Durable Functions グループ (<durable>
)、その他の特定のトリガー (<my_function>
) の子要素を使用して常時使用可能なインスタンス数を設定します。 0 より大きいインスタンス数を設定した場合は、関数が実行されるかどうかにかかわらず、これらのインスタンスに対して課金されます。 詳細については、「課金」を参照してください。
デプロイする前に、Azure CLI を使用して Azure サブスクリプションにサインインします。
az login
az login
コマンドで Azure アカウントにサインインします。次のコマンドを使用して、Flex 従量課金の新しい関数アプリにコード プロジェクトをデプロイします。
mvn azure-functions:deploy
Maven では、pom.xml テンプレート内の設定を使用して、Azure の Flex 従量課金プランの関数アプリを他の必要なリソースと共に作成します。 これらのリソースが既に存在する場合は、そのコードが関数アプリにデプロイされ、既存のコードはすべて上書きされます。
仮想ネットワーク統合を有効にす
Flex 従量課金プランのアプリに対して仮想ネットワーク統合を有効にすることができます。 このセクションの例では、アカウント内に既にサブネットを含む仮想ネットワークが作成されていることを前提にしています。 仮想ネットワーク統合は、アプリを作成するときか、または後で有効にすることができます。
重要
Flex 従量課金プランでは現在、名前にアンダースコア (_
) 文字を含むサブネットはサポートされていません。
アプリを作成するときに仮想ネットワークを有効にするには:
仮想ネットワーク統合は、az functionapp create
コマンドを実行し、--vnet
および --subnet
パラメーターを含めることによって有効にできます。
まだ行っていない場合は、仮想ネットワークとサブネットを作成します。
「Flex 従量課金アプリを作成する」の手順 1 から 4 を完了して、アプリで必要なリソースを作成します。
次の例のように、
az functionapp create
コマンドを実行し、--vnet
および--subnet
パラメーターを含めます。az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime <RUNTIME_NAME> --runtime-version <RUNTIME_VERSION> --vnet <VNET_RESOURCE_ID> --subnet <SUBNET_NAME>
<VNET_RESOURCE_ID>
値は、仮想ネットワークのリソース ID であり、/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Network/virtualNetworks/<VNET_NAME>
という形式です。az network vnet list --resource-group <RESOURCE_GROUP> --output tsv --query "[]".id
コマンドを使用すると、<RESOURCE_GROUP>
でフィルター処理された仮想ネットワーク ID の一覧を取得できます。
仮想ネットワーク統合を含む Flex 従量課金のアプリを作成する方法のエンド ツー エンドの例については、次のリソースを参照してください。
既存のアプリで仮想ネットワーク統合を変更または削除するには:
既存の関数アプリへの仮想ネットワーク統合を有効にするには、az functionapp vnet-integration add
コマンドを使用します。
az functionapp vnet-integration add --resource-group <RESOURCE_GROUP> --name <APP_NAME> --vnet <VNET_RESOURCE_ID> --subnet <SUBNET_NAME>
アプリで仮想ネットワーク統合を無効にするには、az functionapp vnet-integration remove
コマンドを使用します。
az functionapp vnet-integration remove --resource-group <RESOURCE_GROUP> --name <APP_NAME>
アプリの現在の仮想ネットワーク統合を一覧表示するには、az functionapp vnet-integration list
コマンドを使用します。
az functionapp vnet-integration list --resource-group <RESOURCE_GROUP> --name <APP_NAME>
サブネットを選択するときは、次の考慮事項が適用されます。
- 選択するサブネットは、既に (プライベート エンドポイントやサービス エンドポイントなどで) 他の目的に使用されていたり、他のホスティング プランまたはサービスに委任されていたりしてはいけません。
- 同じサブネットを Flex 従量課金プランで実行される複数のアプリと共有できます。 ネットワーク リソースはすべてのアプリにまたがって共有されるため、ある関数アプリが同じサブネット上の他のユーザーのパフォーマンスに影響を与える可能性があります。
- Flex 従量課金プランでは、アプリが 40 インスタンスを超えてスケーリングされる場合でも、1 つの関数アプリで使用する可能性がある IP アドレスは最大 40 個です。 この経験則は、必要なサブネットのサイズを見積もる場合に役立ちますが、厳密に適用されるわけではありません。
展開の設定を構成する
Flex 従量課金プランでは、アプリのコードが含まれているデプロイ パッケージは Azure Blob Storage コンテナー内で管理されます。 既定では、デプロイでは、Functions ランタイムでアプリを管理するために使用されるのと同じストレージ アカウント (AzureWebJobsStorage
) と接続文字列が使用されます。 接続文字列は、DEPLOYMENT_STORAGE_CONNECTION_STRING
アプリケーション設定に格納されます。 ただし、代わりに、コードのデプロイ ソースとして別のストレージ アカウント内の BLOB コンテナーを指定できます。 コンテナーへのアクセスに使用する認証方法を変更することもできます。
カスタマイズされたデプロイ ソースは、次の条件を満たしている必要があります。
- このストレージ アカウントは既に存在している必要があります。
- デプロイに使用するコンテナーも存在している必要があります。
- 複数のアプリで同じストレージ アカウントが使用されるとき、各アプリに独自のデプロイ コンテナーを付与する必要があります。 アプリで同じコンテナーが共有されるとデプロイ パッケージが上書きされることがありますが、アプリごとに一意のコンテナーを使用することでそれが防止されます。
デプロイ ストレージ認証を構成するとき、以上の事項を念頭に置いてください。
- 接続文字列を使用してデプロイ ストレージ アカウントに接続するとき、その接続文字列が含まれるアプリケーション設定が既に存在する必要があります。
- ユーザー割り当てマネージド ID を使用すると、指定された ID が関数アプリにリンクされます。 デプロイ ストレージ アカウントに範囲が設定された
Storage Blob Data Contributor
ロールも ID に割り当てられます。 - システム割り当てマネージド ID を使用すると、有効なシステム割り当て ID がまだアプリに存在しない場合に ID が作成されます。 システム割り当て ID が存在するときは、デプロイ ストレージ アカウントに範囲が設定された
Storage Blob Data Contributor
ロールも ID に割り当てられます。
Flex 従量課金プランの関数アプリを作成するときにデプロイ設定を構成するには:
az functionapp create
コマンドを使用し、デプロイ ストレージをカスタマイズする次の追加オプションを指定します。
パラメーター | 説明 |
---|---|
--deployment-storage-name |
デプロイ ストレージ アカウントの名前。 |
--deployment-storage-container-name |
アプリのデプロイ パッケージが含まれているアカウント内のコンテナーの名前。 |
--deployment-storage-auth-type |
デプロイ ストレージ アカウントに接続するために使用する認証の種類。 指定可能な値は StorageAccountConnectionString 、UserAssignedIdentity 、SystemAssignedIdentity です。 |
--deployment-storage-auth-value |
StorageAccountConnectionString を使用している場合、このパラメーターは、デプロイ ストレージ アカウントの接続文字列が含まれているアプリケーション設定の名前に設定されます。 UserAssignedIdentity を使用している場合、このパラメーターは、使用する ID のリソース ID の名前に設定されます。 |
この例では、別のデプロイ ストレージ アカウントとユーザー割り当て ID を使用して Flex 従量課金プランの関数アプリを作成します。
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime dotnet-isolated --runtime-version 8.0 --flexconsumption-location "<REGION>" --deployment-storage-name <DEPLOYMENT_ACCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME> --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value <MI_RESOURCE_ID>
また、既存のアプリのデプロイ ストレージ構成を変更することもできます。
デプロイ ストレージ構成を変更するには、az functionapp deployment config set
コマンドを使用します。
az functionapp deployment config set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --deployment-storage-name <DEPLOYMENT_ACCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME>
インスタンス メモリを構成する
Flex 従量課金プランで使用されるインスタンス メモリ サイズは、アプリを作成するときに明示的に設定できます。 サポートされているサイズの詳細については、「インスタンス メモリ」を参照してください。
アプリを作成するときに既定とは異なるインスタンス メモリ サイズを設定するには:
az functionapp create
コマンドで --instance-memory
パラメーターを指定します。 この例では、インスタンス サイズが 4096
の C# アプリを作成します。
az functionapp create --instance-memory 4096 --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime dotnet-isolated --runtime-version 8.0
アプリで使用されるインスタンス メモリ サイズの設定はいつでも変更できます。
この例では、az functionapp scale config set
コマンドを使用して、インスタンス メモリ サイズの設定を 4,096 MB に変更します。
az functionapp scale config set --resource-group <resourceGroup> --name <APP_NAME> --instance-memory 4096
常時使用可能なインスタンス数を設定する
関数ごとのスケーリング グループまたは個々の関数に対して、常時使用可能なインスタンスをいくつか設定して、関数を読み込み済みで実行できる状態にしておくことができます。 関数ごとのスケーリングと同様に、3 つの特別なグループがあります。
http
- アプリ内の HTTP によってトリガーされる関数はすべて、それら自体のインスタンスにまとめてスケーリングされます。durable
- アプリ内の Durable によってトリガーされる関数 (オーケストレーション、アクティビティ、エンティティ) はすべて、それら自体のインスタンスにまとめてスケーリングされます。blob
- アプリ内の BLOB (Event Grid) によってトリガーされた関数はすべて、それら自体のインスタンスにまとめてスケーリングされます。
http
、durable
、または blob
を名前と値のペアの設定の名前として使用し、これらのグループに対して常時使用可能な数を構成します。 アプリ内のその他すべての関数については、function:<FUNCTION_NAME>=n
形式を使用して、個々の関数ごとに常時使用可能を構成する必要があります。
常時使用可能なインスタンスの 1 つ以上の指定を定義するには、az functionapp create
コマンドで --always-ready-instances
パラメーターを使用します。 この例では、HTTP によってトリガーされるすべての関数の常時使用可能なインスタンス数を 5
に設定します。
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --always-ready-instances http=10
この例では、すべての Durable トリガー関数の常時使用可能なインスタンス数を 3
に設定し、function5
という名前の Service Bus によってトリガーされる関数の常時使用可能なインスタンス数を 2
に設定します。
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --always-ready-instances durable=3 function:function5=2
また、インスタンス指定を追加または削除するか、既存のインスタンス指定数を変更することによって、既存のアプリで常時使用可能なインスタンスを変更することもできます。
この例では、az functionapp scale config always-ready set
コマンドを使用して、HTTP トリガー グループの常時使用可能なインスタンス数を 10
に変更します。
az functionapp scale config always-ready set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --settings http=10
常時使用可能なインスタンスを削除するには、HTTP トリガー グループと hello_world
という名前の関数の両方からすべての常時使用可能なインスタンスを削除する次の例のように、az functionapp scale config always-ready delete
コマンドを使用します。
az functionapp scale config always-ready delete --resource-group <RESOURCE_GROUP> --name <APP_NAME> --setting-names http function:hello_world
HTTP コンカレンシーの制限を設定する
特定の制限を設定しない限り、Flex 従量課金プラン アプリの HTTP コンカレンシーの既定値は、インスタンス サイズの設定に基づいて決定されます。 詳細については、HTTP トリガーのコンカレンシーに関するページを参照してください。
既存のアプリの HTTP コンカレンシーの制限を設定する方法を次に示します。
インスタンス サイズには関係なく、アプリの特定の HTTP コンカレンシーの制限を設定するには、az functionapp scale config set
コマンドを使用します。
az functionapp scale config set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --trigger-type http --trigger-settings perInstanceConcurrency=10
この例では、HTTP トリガーのコンカレンシー レベルを 10
に設定します。 HTTP コンカレンシーの値を具体的に設定すると、その値は、アプリのインスタンス サイズの設定を変更した場合でも維持されます。
現在サポートされているリージョンを表示する
現在 Flex 従量課金プランをサポートしているリージョンの一覧を表示するには:
まだ Azure にサインインしていない場合は、Azure にサインインします。
az login
az login
コマンドで Azure アカウントにサインインします。az functionapp list-flexconsumption-locations
コマンドを使用して、現在 Flex 従量課金をサポートしているリージョンの一覧を確認します。az functionapp list-flexconsumption-locations --output table
Azure portal で、または Visual Studio Code を使用してアプリを作成するときは、現在、サポートされていないリージョンはリージョンの一覧から除外されます。