次の方法で共有


Azure Container Apps でセッション プールを使用する

セッション プールは、新しいプールに対して 1 秒未満のセッション割り当て時間を提供し、各セッションの管理とライフサイクルを担当します。

コンフィギュレーション

セッション プールの動作は、 az containerapp sessionpool createで使用できる次のパラメーターを使用して制御できます。

目的 プロパティ Description
セッションの最大数を設定する max-sessions プールで許可される同時セッションの最大数。 最大制限が満たされた後に入ってくる要求は、プールに割り当てられているセッションがなくなったことを示す 404 サーバー エラーを返します。
待機時間 cooldown-period セッションが終了するまでにセッションをアイドル状態にできる秒数。 アイドル期間は、セッションの API が呼び出されるたびにリセットされます。 値は、 3003600の間である必要があります。
ターゲット セッションの数量 ready-sessions プール内で準備を整えておくセッションの目標数。

プールを作成する

プールを作成するプロセスは、コード インタープリター プールとカスタム コンテナー プールのどちらを作成するかによって若干異なります。

コード インタープリター プール

Azure CLI を使用してコード インタープリター セッション プールを作成するには、次のコマンドを使用して、最新バージョンの Azure CLI と Azure Container Apps 拡張機能があることを確認します。

# Upgrade the Azure CLI
az upgrade

# Install or upgrade the Azure Container Apps extension
az extension add --name containerapp --upgrade --allow-preview true -y

az containerapps sessionpool create コマンドを使用してプールを作成します。 次の例では、 my-session-poolという名前の Python コード インタープリター セッション プールを作成します。 コマンドを実行する前に、 <RESOURCE_GROUP> をリソース グループ名に置き換えてください。

az containerapp sessionpool create \
    --name my-session-pool \
    --resource-group <RESOURCE_GROUP> \
    --location westus2 \
    --container-type PythonLTS \
    --max-sessions 100 \
    --cooldown-period 300 \
    --network-status EgressDisabled

セッション プールを作成するときに、次の設定を定義できます。

Setting Description
--container-type 使用するコード インタープリターの種類。 サポートされる値には、 PythonLTSNodeLTS、および Shellが含まれます。
--max-sessions 同時に許可される割り当て済みセッションの最大数。 最大値は 600 です。
--cooldown-period 終了するまでに許可されるアイドル時間の秒数。 アイドル期間は、セッションの API が呼び出されるたびにリセットされます。 使用できる範囲は、 3003600の間です。
--network-status 送信ネットワーク トラフィックをセッションから許可するかどうかを指定します。 有効な値は EgressDisabled (既定値) と EgressEnabledです。

Important

エグレスを有効にすると、セッションで実行されているコードがインターネットにアクセスできます。 サービス拒否攻撃などの悪意のあるアクティビティを実行するために使用される可能性があるため、コードが信頼されていない場合は注意が必要です。

管理 API エンドポイントを取得する

LLM フレームワーク統合でコード インタープリター セッションを使用するか、管理 API エンドポイントを直接呼び出すには、プールの管理 API エンドポイントが必要です。

エンドポイントは、 https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>形式です。

セッション プールの管理 API エンドポイントを取得するには、 az containerapps sessionpool show コマンドを使用します。 コマンドを実行する前に、 <RESOURCE_GROUP> をリソース グループ名に置き換えてください。

az containerapp sessionpool show \
    --name my-session-pool \
    --resource-group <RESOURCE_GROUP> \
    --query 'properties.poolManagementEndpoint' -o tsv

カスタム コンテナー プール

カスタム コンテナー セッション プールを作成するには、コンテナー イメージとプール構成設定を指定する必要があります。

HTTP 要求を使用して、各セッションを呼び出すか、通信します。 カスタム コンテナーは、これらの要求に応答するために指定したポートで HTTP サーバーを公開する必要があります。

Azure CLI を使用してカスタム コンテナー セッション プールを作成するには、次のコマンドを使用して、最新バージョンの Azure CLI と Azure Container Apps 拡張機能があることを確認します。

az upgrade
az extension add --name containerapp --upgrade --allow-preview true -y

カスタム コンテナー セッション プールには、ワークロード プロファイルが有効な Azure Container Apps 環境が必要です。 環境がない場合は、 az containerapp env create -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP> --location <LOCATION> --enable-workload-profiles コマンドを使用して作成します。

az containerapp sessionpool create コマンドを使用して、カスタム コンテナー セッション プールを作成します。

次の例では、カスタム コンテナー イメージ my-session-poolを使用して myregistry.azurecr.io/my-container-image:1.0 という名前のセッション プールを作成します。

要求を送信する前に、 <> 角かっこの間のプレースホルダーを、セッション プールとセッション識別子の適切な値に置き換えます。

az containerapp sessionpool create \
    --name my-session-pool \
    --resource-group <RESOURCE_GROUP> \
    --environment <ENVIRONMENT> \
    --registry-server myregistry.azurecr.io \
    --registry-username <USER_NAME> \
    --registry-password <PASSWORD> \
    --container-type CustomContainer \
    --image myregistry.azurecr.io/my-container-image:1.0 \
    --cpu 0.25 --memory 0.5Gi \
    --target-port 80 \
    --cooldown-period 300 \
    --network-status EgressDisabled \
    --max-sessions 10 \
    --ready-sessions 5 \
    --env-vars "key1=value1" "key2=value2" \
    --location <LOCATION>

このコマンドは、次の設定でセッション プールを作成します。

パラメーター 価値 Description
--name my-session-pool セッション プールの名前。
--resource-group my-resource-group セッション プールを含むリソース グループ。
--environment my-environment コンテナー アプリの環境の名前またはリソース ID。
--container-type CustomContainer セッション プールのコンテナーの種類。 カスタム コンテナー セッションには CustomContainer が必要です。
--image myregistry.azurecr.io/my-container-image:1.0 セッション プールに使用するコンテナー イメージ。
--registry-server myregistry.azurecr.io コンテナー レジストリ サーバーのホスト名。
--registry-username my-username コンテナー レジストリにログインするユーザー名。
--registry-password my-password コンテナー レジストリにログインするためのパスワード。
--cpu 0.25 必要なコア数の CPU。
--memory 0.5Gi 必要なメモリ。
--target-port 80 イングレス トラフィック用に使うセッション ポート。
--cooldown-period 300 セッションが終了するまでにセッションをアイドル状態にできる秒数。 アイドル期間は、セッションの API が呼び出されるたびにリセットされます。 値は、 3003600の間である必要があります。
--network-status EgressDisabled 送信ネットワーク トラフィックをセッションから許可するかどうかを指定します。 有効な値は EgressDisabled (既定値) と EgressEnabledです。
--max-sessions 10 同時に割り当てることができるセッションの最大数。
--ready-sessions 5 常にセッション プール内で準備が整っているセッションの目標数。 セッションがプールの補充よりも速く割り当てられている場合は、この数を増やします。
--env-vars "key1=value1" "key2=value2" コンテナーで設定する環境変数。
--location "Supported Location" セッション プールの場所。

セッション プールの状態を確認するには、 az containerapp sessionpool show コマンドを使用します。

az containerapp sessionpool show \
    --name <SESSION_POOL_NAME> \
    --resource-group <RESOURCE_GROUP> \
    --query "properties.poolManagementEndpoint" \
    --output tsv

セッション プールを更新するには、 az containerapp sessionpool update コマンドを使用します。

Important

セッションを使用して信頼されていないコードを実行する場合は、信頼されていないコードにアクセスしたくない情報やデータを含めないでください。 コードが悪意があり、その環境変数、シークレット、ファイルなど、コンテナーへのフル アクセス権を持っているとします。

管理エンドポイント

Important

セッション識別子は機密情報であり、その値を作成および管理する際に安全なプロセスが必要です。 この値を保護するには、アプリケーションで各ユーザーまたはテナントが独自のセッションにのみアクセスできることを確認する必要があります。

セッションへのアクセスをセキュリティで保護しないと、ユーザーのセッションに格納されているデータへの誤用または未承認のアクセスが発生する可能性があります。 詳細については、「セッション識別子」を参照してください。

プール内のセッションを管理するために、次のエンドポイントを使用できます。

エンドポイント パス メソッド Description
code/execute POST セッションでコードを実行します。
files/upload POST セッションにファイルをアップロードします。
files/content/{filename} GET セッションからファイルをダウンロードします。
files GET セッション内のファイルを一覧表示します。

プールの管理 API エンドポイントとエンドポイント パスを連結して、各エンドポイントの完全な URL を構築します。 クエリ文字列には、セッション識別子を含むidentifier パラメーターと、api-version値を持つ2024-02-02-preview パラメーターを含める必要があります。

例: https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/code/execute?api-version=2024-02-02-preview&identifier=<IDENTIFIER>

セッション プールの管理エンドポイントを取得するには、 az containerapp sessionpool show コマンドを使用します。

az containerapp sessionpool show \
    --name <SESSION_POOL_NAME> \
    --resource-group <RESOURCE_GROUP> \
    --query "properties.poolManagementEndpoint" \
    --output tsv

プール管理エンドポイントに対するすべての要求には、ベアラー トークンを含む Authorization ヘッダーが含まれている必要があります。 プール管理 API で認証する方法については、「 認証」を参照してください。

各 API 要求には、セッション ID と共に identifier クエリ文字列パラメーターも含める必要があります。 この一意のセッション ID を使用すると、アプリケーションは特定のセッションと対話できます。 セッション識別子の詳細については、「 セッション識別子」を参照してください。

イメージ キャッシュ

セッション プールが作成または更新されると、Azure Container Apps によってコンテナー イメージがプールにキャッシュされます。 このキャッシュは、新しいセッションを作成するプロセスを高速化するのに役立ちます。

イメージに対する変更は、セッションに自動的に反映されません。 イメージを更新するには、新しいイメージ タグを使用してセッション プールを更新します。 イメージの更新ごとに一意のタグを使用して、新しいイメージが確実にプルされるようにします。