Azure Container Apps 動的セッションで提供される組み込みのコード インタープリターに加えて、カスタム コンテナーを使って独自のセッション サンドボックスを定義することもできます。
注
この記事は、カスタム コンテナー セッション プールにのみ適用されます。 特に明記されていない限り、ここで説明する機能は、コード インタープリター セッション プールでは使用できません。
カスタム コンテナー セッションの使い方
カスタム コンテナーを使うと、ニーズに合わせて調整したソリューションを構築できます。 高速かつ一時的な環境でコードまたはアプリケーションを実行できます。 Hyper-V を使用して、セキュアでサンドボックス化されたスペースを提供します。 また、オプションのネットワーク分離を使用して構成することもできます。 次に例をいくつか示します。
コード インタープリター: 組み込みのインタープリターでサポートされていない言語によって、セキュリティで保護されたサンドボックスで信頼されていないコードを実行する場合、またはコード インタープリター環境を完全に制御する必要がある場合に使用します。
分離実行: 各テナントまたはユーザーが独自のサンドボックス環境を持つ、敵対的なマルチテナント シナリオでアプリケーションを実行する場合に使用します。 これらの環境は、互いの環境から、またホスト アプリケーションから分離されます。 例としては、ユーザーが指定したコードを実行するアプリケーション、クラウドベースのシェルへのアクセスをエンド ユーザーに許可するコード、AI エージェント、開発環境などがあります。
カスタム コンテナー セッションを使う
カスタム コンテナー セッションを使用するには、カスタム コンテナー イメージを含むセッション プールを作成します。 Azure Container Apps により、指定したイメージを使って、コンテナーが独自の Hyper-V サンドボックスで自動的に起動されます。 コンテナーが起動すると、セッション プールで使用できるようになります。
アプリケーションがセッションを要求すると、プールからすぐにインスタンスが割り当てられます。 セッションは、アイドル状態になるまでアクティブであり続けます。その後、自動的に停止され、破棄されます。
セッションプール用コンテナプローブ
コンテナー プローブを使用して、カスタム コンテナー セッション プールの正常性チェックを構成し、正常なセッション インスタンスを維持します。
注
コンテナー プローブには、API バージョン 2025-02-02-preview 以降が必要です。
コンテナー プローブを使用すると、Azure Container Apps の正常性プローブと同様に、セッション コンテナーの正常性チェックを定義できます。 構成すると、セッション プールは各セッション インスタンスを監視し、異常なインスタンスを削除します。
セッション プール:
- プローブによって準備状態が確認されたセッションインスタンスが正常であることを確認します。
- 異常なセッション インスタンスを自動的に削除します。
- 正常なセッションを使用して構成した
readySessionInstances数を維持できるようにスケールアップします。
セッション プールでは Liveness プローブと Startup プローブの種類がサポートされます。 プローブの動作について詳しく知りたい場合は、「Azure Container Apps の正常性プローブ」を参照してください。
コンフィギュレーション
セッション プールを作成または更新する場合は、要求ペイロードの properties.customContainerTemplate.containers セクションでプローブを指定します。
完全な API 仕様については、 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
}
}
}
Troubleshooting
セッション プールが正常な readySessionInstancesの予想される数を維持していない場合は、次の修正を検討してください。
- コンテナー ログを確認します。 セッション コンテナー ログを確認して、プローブ エンドポイントまたはコンテナーの起動に関する問題を特定します。 カスタム コンテナー セッション プールのログの表示を参照してください。
- プローブの構成を確認します。 プローブ パス、ポート、およびしきい値がアプリケーションに対して正しく構成されていることを確認します。
- コンテナーの正常性を確認します。 プローブ エンドポイントが正常に応答しないコンテナー内の問題を確認します。
セッションを停止する
セッション停止 API を使用して、カスタム コンテナー セッション プール内のセッションを終了します。
セッション プールでは、構成に基づいてセッション ライフサイクルを処理する、 lifecycleConfigurationを介した自動セッション管理がサポートされます。 ただし、より詳細な制御が必要になる場合があります。
セッションを割り当てた後、この API を呼び出して、いつでも手動で終了できます。 この方法は、次の場合に役立ちます。
- セッションが有効期限に達する前に、リソースをクリーンアップする必要があります。
- セッション プールが最大同時セッション数の上限に達したため、新しいセッションの容量を解放する必要があります。
- セッションは作業を完了し、リソースをすぐに解放する必要があります。
API リファレンス
依頼
POST <POOL_MANAGEMENT_ENDPOINT>/.management/stopSession?api-version=2025-02-02-preview&identifier=<SESSION_ID>
パラメーター
| パラメーター | タイプ | 必須 | 説明 |
|---|---|---|---|
api-version |
文字列 | はい | 使用する API バージョン (たとえば、 2025-02-02-preview)。 |
identifier |
文字列 | はい | 停止するセッションの一意識別子。 |
例示
依頼
POST https://<SESSION_POOL_NAME>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io/.management/stopSession?api-version=2025-02-02-preview&identifier=testSessionIdentifier
応答
HTTP/1.1 200 OK
Content-Type: text/plain
Session testSessionIdentifier in session pool testSessionPool stopped.
セッション情報を取得する
セッション プールに対してクエリを実行して、セッションの状態を確認し、有効期限の詳細を取得し、アクティブなすべてのセッションを一覧表示できます。 この機能は、セッションの正常性の監視、リソースの使用状況の追跡、カスタム クリーンアップ ワークフローの実装に役立ちます。
1 つのセッションを取得する
特定のセッションに関する詳細を取得するには、 getSession エンドポイントを使用します。
POST <POOL_MANAGEMENT_ENDPOINT>/.management/getSession?identifier=<SESSION_ID>&api-version=2025-02-02-preview
Authorization: Bearer <TOKEN>
getSession エンドポイントは、セッション識別子、現在の有効期限、作成タイムスタンプを含むセッション メタデータを返します。
SessionView 応答スキーマ
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
identifier |
文字列 | はい | 指定したセッション識別子 |
etag |
文字列 | はい | セッションの不透明なバージョン識別子。 この識別子は、変更の検出に使用できます。 |
expiresAt |
DateTime | はい | セッションが終了する UTC タイムスタンプ |
createdAt |
DateTime | いいえ | セッション作成のタイムスタンプ |
lastAccessedAt |
DateTime | いいえ | このセッションへの最後の要求のタイムスタンプ |
要求と応答の例
curl -X POST "https://my-pool.env-id.westus2.azurecontainerapps.io/.management/getSession?identifier=user-123&api-version=2025-02-02-preview" \
-H "Authorization: Bearer $TOKEN"
成功応答 (HTTP 200):
{
"identifier": "user-123",
"etag": "a1b2c3d4",
"expiresAt": "2026-04-30T14:30:00Z",
"createdAt": "2026-04-30T13:30:00Z",
"lastAccessedAt": "2026-04-30T14:29:00Z"
}
プール内のすべてのセッションを一覧表示する
セッション プール内のすべてのセッションの一覧を取得するには、 listSessions エンドポイントを使用します。
POST <POOL_MANAGEMENT_ENDPOINT>/.management/listSessions?skip=0&api-version=2025-02-02-preview
Authorization: Bearer <TOKEN>
改ページ位置
リストエンドポイントは、スキップベースのページネーションをサポートしています。 既定では、各ページは最大 300 セッションを返します。
skip クエリ パラメーターを使用して、結果間を移動します。
| パラメーター | 説明 |
|---|---|
skip |
最初からスキップするセッションの数 (既定値: 0) |
nextLink |
結果の次のページの完全な URL (より多くの結果が存在する場合の応答に含まれます) |
ApiCollectionEnvelope 応答スキーマ
| フィールド | タイプ | 説明 |
|---|---|---|
value |
SessionView[] | セッション オブジェクトの配列 |
count |
整数 | 現在のページのセッション数 |
nextLink |
文字列 | 次のページの URL (結果がそれ以上ない場合は null) |
ページネーションループの例
POOL_URL="https://my-pool.env-id.westus2.azurecontainerapps.io"
next_url="$POOL_URL/.management/listSessions?skip=0&api-version=2025-02-02-preview"
while [ -n "$next_url" ]; do
response=$(curl -s -X POST "$next_url" \
-H "Authorization: Bearer $TOKEN")
echo "$response" | jq '.value[] | {identifier, expiresAt}'
next_url=$(echo "$response" | jq -r '.nextLink // empty')
done
応答の例 (HTTP 200):
{
"value": [
{
"identifier": "user-123",
"etag": "a1b2c3d4",
"expiresAt": "2026-04-30T14:30:00Z",
"createdAt": "2026-04-30T13:30:00Z",
"lastAccessedAt": "2026-04-30T14:29:00Z"
},
{
"identifier": "user-456",
"etag": "e5f6a7b8",
"expiresAt": "2026-04-30T14:30:00Z",
"createdAt": "2026-04-30T13:30:00Z",
"lastAccessedAt": "2026-04-30T14:29:00Z"
}
],
"count": 2,
"nextLink": "https://my-pool.env-id.westus2.azurecontainerapps.io/.management/listSessions?skip=300"
}
ログ記録
カスタム コンテナー セッション プールは、Azure Monitor と Log Analytics と統合されます。 アプリケーション ログは、コンテナーが stdout または stderrに出力を書き込む場合にのみキャプチャされるため、アプリがコンソールにログを出力していることを確認してください。
前提条件
- カスタム コンテナー セッション プールを含む Azure Container Apps 環境
- Log Analytics ワークスペース、またはセットアップ中に作成する
ログを設定する
Azure Monitor のログ記録を有効にする
- Azure portal で、 Container Apps Environment に移動します。
- [ 監視] で、[ ログ オプション] を選択します。
- ログの宛先を Azure Monitor に設定します。
診断設定を構成する
- Container Apps 環境の [ 監視] で、[ 診断設定] を選択します。
- [+ 診断設定の追加] を選択します。
- 診断設定の名前を指定します。
- [ ログ] で、キャプチャするセッション関連のログ カテゴリを選択します。
- [ 宛先の詳細] で、[ Log Analytics ワークスペースに送信] を選択します。
- Log Analytics ワークスペースを選択するか、新しいワークスペースを作成します。
- 保存を選びます。
Log Analytics のテーブル
| ログのカテゴリ | Log Analytics テーブル | 説明 |
|---|---|---|
| アプリケーション ログ | AppEnvSessionConsoleLogs |
コンテナー化されたアプリケーションによって出力される標準出力 (stdout) と標準エラー (stderr)。 |
| プラットフォーム ログ |
AppEnvSessionLifecycleLogs、AppEnvSessionPoolEvents |
セッション プールの割り当て、ライフサイクル、運用状態に関連するプラットフォーム生成イベント。 |
ログが Log Analytics に直接送信される場合、テーブルは _CL サフィックス (たとえば、 AppEnvSessionConsoleLogs_CL) を使用します。 ログが Azure Monitor 診断設定を介してルーティングされる場合、テーブル名には _CL サフィックスは含まれません。
セッション ログの表示
診断設定を構成すると、Log Analytics ワークスペースにログが送信されます。
Log Analytics でログを照会する
- Azure portal で、 Log Analytics ワークスペースに移動します。
- 左側のメニューで、[ログ] を選択 します。
- クエリが 単純モードの場合は、 KQL モードを選択します。
- Kusto クエリ言語 (KQL) を使用してセッション ログにクエリを実行します。
クエリの例
セッションからの最近のコンソール ログを表示します。
AppEnvSessionConsoleLogs
| where TimeGenerated > ago(1h)
| order by TimeGenerated desc
| take 100
セッション ライフサイクル イベントを表示する:
AppEnvSessionLifecycleLogs
| where TimeGenerated > ago(1h)
| order by TimeGenerated desc
セッション プール イベントの表示:
AppEnvSessionPoolEvents
| where TimeGenerated > ago(1h)
| order by TimeGenerated desc
Metrics
Azure Container Apps は、カスタム コンテナー セッション プールの Azure Monitor メトリックを出力します。 これらのメトリックを使用して、プールの容量と時間の経過に伴うアクティビティを追跡します。
サポートされているメトリック
完全な一覧については、「 サポートされているメトリック - Microsoft.App/sessionpools - Azure Monitor」を参照してください。
| メトリクス | REST API での名前 | 単位 | 集約 | ディメンション | タイムグレインズ | DS エクスポート |
|---|---|---|---|---|---|---|
|
セッション数の実行 セッション プール内で実行中のセッション ポッドの数 |
PoolExecutingPodCount |
数える | 合計(総和)、平均、最大値、最小値 | poolName |
PT1M | はい |
|
セッション数の作成 セッション プール内でセッション ポッドを作成する数 |
PoolPendingPodCount |
数える | 合計(総和)、平均、最大値、最小値 | poolName |
PT1M | はい |
|
準備完了セッション数 セッション プール内の準備完了セッション ポッドの数 |
PoolReadyPodCount |
数える | 合計(総和)、平均、最大値、最小値 | poolName |
PT1M | はい |
セッション メトリックを表示する
Azure Monitor または Container Apps 環境のメトリックを使用して、セッションベースのメトリックを表示できます。
Azure Monitor メトリック
- [Azure Monitor メトリック] ページを開きます。
- スコープを使用して、カスタム コンテナー セッション プールを選択します。
- 表示するメトリックと集計を選択します。
Container Apps 環境のメトリック
- Azure portal で、Container Apps Environment を開きます。
- [監視] で [メトリック] を選びます。
- スコープを使用して、カスタム コンテナー セッション プールを選択します。
- 表示するメトリックと集計を選択します。