次の方法で共有


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

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

両方のプールの一般的な概念

プールを作成するプロセスは、コード インタープリター セッション プールとカスタム コンテナー プールのどちらを作成するかによって若干異なります。 次の概念は、両方に適用されます。

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 containerapp sessionpool create
  • az containerapp sessionpool show
  • az containerapp sessionpool list
  • az containerapp sessionpool update
  • az containerapp sessionpool delete

任意のコマンドで --help を使用して、使用可能な引数とサポートされている値を確認します。

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

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

プールを作成または更新するときに、同時セッションの最大数、アイドル状態のクールダウン期間、およびセッションに対して送信ネットワーク トラフィックを許可するかどうかを設定できます。

Important

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

Important

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

プールを構成する

セッション プール構成の最新の CLI 引数を表示するには、 az containerapp sessionpool create --help を使用します。 このセクションでは、API バージョン間で適用される高度な構成オプションについて説明します。

セッション ライフサイクルの構成

セッション プールを作成または更新する場合は、 properties.dynamicPoolConfiguration.lifecycleConfigurationを設定してセッションを終了する方法を構成できます。 API バージョン 2025-01-01以降、2 つのライフサイクルの種類のいずれかを選択します。

完全な API 仕様については、 SessionPools API の仕様を参照してください。

Timed (既定値)

Timedライフサイクルでは、非アクティブな期間が経過するとセッションが削除されます。 セッションに送信された要求は、クールダウン タイマーをリセットし、セッションの有効期間を cooldownPeriodInSeconds延長します。

Timed は、すべてのセッション プールの種類でサポートされており、以前の API バージョンの executionType: Timed と同じように動作します。

{
  "dynamicPoolConfiguration": {
    "lifecycleConfiguration": {
      "cooldownPeriodInSeconds": 600,
      "lifecycleType": "Timed"
    }
  }
}
プロパティ Description
cooldownPeriodInSeconds セッションは、この期間の要求がない場合に削除されます。
maxAlivePeriodInSeconds Timedライフサイクルではサポートされていません。

管理エンドポイント

Important

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

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

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

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

イメージ キャッシュ

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

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

コード インタープリター セッション プール

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

コード インタープリター管理エンドポイント

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

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

セッション プールの管理 API エンドポイントを取得するには、上記の一般的なセクションでコマンドの例を参照してください。

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

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

プールの管理 API エンドポイントとエンドポイント パスを連結して、各エンドポイントの完全な URL を構築します。 クエリ文字列には、セッション識別子を含むidentifier パラメーターと、api-version値を持つ2024-02-02-preview パラメーターを含める必要があります。 API のバージョンは変更される可能性があるため、運用環境で使用する前に、REST API ドキュメントで常に最新バージョンを確認してください。

例: {sessionManagementEndpoint}/code/execute?api-version=2024-02-02-preview&identifier=<IDENTIFIER>

REST API リファレンスについては、 Container Apps のデータ プレーン API とContainer Apps のデータ プレーン操作の概要に関するページを参照してください。

カスタム コンテナー セッション プール

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

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

次の機能は、カスタム コンテナー セッション プールにのみ適用されます。

カスタム コンテナー管理エンドポイント

カスタム コンテナー セッション プールの場合は、Azure portal または Azure CLI 出力から管理エンドポイントを取得します。 エンドポイントは poolManagementEndpointとして返されます。

エンドポイントは、 https://<SESSION_POOL_NAME>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io形式です。

OnContainerExit

OnContainerExitライフサイクルでは、コンテナーが単独で終了するか、最大有効期間に達するまで、セッションはアクティブなままになります。

{
  "dynamicPoolConfiguration": {
    "lifecycleConfiguration": {
      "maxAlivePeriodInSeconds": 6000,
      "lifecycleType": "OnContainerExit"
    }
  }
}
プロパティ Description
maxAlivePeriodInSeconds セッションが削除されるまでに有効な状態を維持できる最大時間。
cooldownPeriodInSeconds OnContainerExitライフサイクルではサポートされていません。

コンテナー プローブ

コンテナー プローブを使用すると、セッション コンテナーの正常性チェックを定義できるため、プールは異常なセッションを検出し、それらを置き換えて、 readySessionInstances ターゲットを正常に保つことができます。

セッション プールは Liveness プローブと Startup プローブをサポートします。 プローブの動作の詳細については、「 Azure Container Apps の正常性プローブ」を参照してください。

セッション プールを作成または更新する場合は、 properties.customContainerTemplate.containersでプローブを指定します。 完全な要求本文スキーマについては、 SessionPools の作成または更新 API リファレンスを参照してください。 次の例は、プローブ定義を使用した部分的な構成を示しています。

{
  "properties": {
    "customContainerTemplate": {
      "containers": [
        {
          "name": "my-session-container",
          "image": "myregistry.azurecr.io/my-session-image:latest",
          "probes": [
            {
              "type": "Liveness",
              "httpGet": {
                "path": "/health",
                "port": 8080
              },
              "periodSeconds": 10,
              "failureThreshold": 3
            },
            {
              "type": "Startup",
              "httpGet": {
                "path": "/ready",
                "port": 8080
              },
              "periodSeconds": 5,
              "failureThreshold": 30
            }
          ]
        }
      ]
    },
    "dynamicPoolConfiguration": {
      "readySessionInstances": 5
    }
  }
}

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

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 update コマンドを使用します。