このチュートリアルでは、Azure Container Apps にシェル セッション プールをデプロイし、動的セッション API と ARM テンプレートを使用してシェル コマンドを実行する方法について説明します。
このチュートリアルでは、次のことを行います。
- ARM テンプレートを使用してシェル セッション プールをデプロイする
- 適切なアクセス許可を持つユーザー割り当てマネージド ID を作成する
- 動的セッション API を使用してシェル コマンドを実行する
[前提条件]
このチュートリアルを開始する前に、次のリソースが必要です。
| Requirement | Description |
|---|---|
| Azure アカウント | アクティブなサブスクリプションを含む Azure アカウントが必要です。 持っていない場合は、無料で作成できます。 |
| Azure CLI | Azure CLI のインストールを実行します。 |
設定
まず、最新の更新プログラムを使用して Azure CLI を準備し、Azure にサインインします。
Azure CLI を最新バージョンに更新します。
az upgradeMicrosoft.Appリソースプロバイダーを登録します。az provider register --namespace Microsoft.App最新バージョンの Azure Container Apps CLI 拡張機能をインストールします。
az extension add --name containerapp --allow-preview true --upgradeAzure にサインインします。
az loginAzure サブスクリプション ID に対してクエリを実行し、値を変数に設定します。
SUBSCRIPTION_ID=$(az account show --query id --output tsv)このプロシージャで使用する変数を設定します。
次のコマンドを実行する前に、
<>で囲まれたプレースホルダーを実際の値に置き換えてください。RESOURCE_GROUP=<RESOURCE_GROUP_NAME> SESSION_POOL_NAME=<SESSION_POOL_NAME> LOCATION=<LOCATION> API_VERSION="2025-10-02-preview"これらの変数を使用して、次の手順でリソースを作成します。
リソース グループの作成に使用するサブスクリプションを設定します。
az account set -s $SUBSCRIPTION_IDリソース グループを作成する。
az group create --name $RESOURCE_GROUP --location $LOCATION
ARM テンプレートを作成する
シェル セッション プールを定義するために、 deploy.json という名前の ARM テンプレート ファイルを作成します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"apiVersion": "2025-10-02-preview",
"name": "myshellpool",
"type": "Microsoft.App/sessionpools",
"location": "North Central US",
"properties": {
"poolManagementType": "Dynamic",
"containerType": "Shell", # Set the "containerType" property to "Shell"
"scaleConfiguration": {
"maxConcurrentSessions": 5
},
"dynamicPoolConfiguration": {
"lifecycleConfiguration": {
"lifecycleType": "Timed",
"cooldownPeriodInSeconds": 300
}
},
"sessionNetworkConfiguration": {
"status": "EgressEnabled"
}
}
}
]
}
シェル セッション プールをデプロイする
ARM テンプレートを使用して、シェル セッション プールをデプロイします。
az deployment group create --resource-group $RESOURCE_GROUP --template-file deploy.json
マネージド ID を割り当てる
セッション プールへの API 呼び出しの認証に使用されるユーザー割り当てマネージド ID を作成します。
ID 名とプール リソース ID を設定します。
UAMI_NAME=${SESSION_POOL_NAME}-uami POOL_ID="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionpools/$SESSION_POOL_NAME"ユーザー割り当てマネージド ID を作成します。
az identity create --resource-group $RESOURCE_GROUP --name $UAMI_NAME --location $LOCATIONマネージド ID のプリンシパル ID を取得します。
UAMI_PRINCIPAL=$(az identity show --resource-group $RESOURCE_GROUP --name $UAMI_NAME --query principalId -o tsv)
マネージド ID を Azure Container App に割り当てる
Azure Container App を作成または更新するときは、ユーザー割り当てマネージド ID をアプリに割り当てます。 例えば次が挙げられます。
az containerapp update \
--name <CONTAINER_APP_NAME> \
--resource-group $RESOURCE_GROUP \
--user-assigned $UAMI_NAME
詳細については、「 コンテナー アプリにマネージド ID を割り当てる 」を参照してください。
セッション実行 API のロールの割り当てを設定する
セッション プールの API を操作するには、マネージド ID に Azure ContainerApps Session Executor ロールを割り当てる必要があります。
ID の伝達を待ってから、マネージド ID にロールを割り当てます。
az role assignment create --assignee $UAMI_PRINCIPAL --role "Azure ContainerApps Session Executor" --scope $POOL_ID
ベアラー トークンを取得する
セッション プールの API にアクセスするには、アクセス トークンが必要です。 メソッドは、コードを実行している場所によって異なります。
Azure Container App 内から
ユーザー割り当てマネージド ID が割り当てられている Azure Container App 内から実行する場合は、Azure Instance Metadata Service (IMDS) を使用してアクセス トークンを取得します。
ACCESS_TOKEN=$(curl -s -H "Metadata: true" \
"http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://dynamicsessions.io" \
| jq -r '.access_token')
このコマンドは、トークンを取得し、access_tokenを使用して JSON 応答からjq値を抽出します。
ローカル テストと開発用
ローカルまたは開発環境からテストする場合は、Azure CLI を使用してアクセス トークンを取得できます (適切なアクセス許可が必要です)。
ACCESS_TOKEN=$(az account get-access-token --resource "https://dynamicsessions.io" --query accessToken --output tsv)
注
ローカル テストを機能させるには、セッション プールに "Azure ContainerApps Session Executor" ロールが割り当てられているユーザーまたはサービス プリンシパルとして Azure CLI セッションを認証する必要があります。 運用環境のシナリオでは、マネージド ID アプローチをお勧めします。
セッションでシェル コマンドを実行する
セキュリティ コンテキストを確立するためのベアラー トークンが用意されたので、セッション プールに要求を送信してシェル コマンドを実行できます。
API 呼び出しの要求本文を作成します。
EXEC_ID=$(uuidgen) BODY=$(cat <<EOF { "codeInputType": "inline", "executionType": "synchronous", "shellCommand": "echo Hello world!", "timeoutInSeconds": 600 } EOF )API エンドポイント URL を構築します。
URL="https://$LOCATION.dynamicsessions.io/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/sessionPools/$SESSION_POOL_NAME/executions?api-version=$API_VERSION&identifier=$EXEC_ID"シェル コマンドを実行します。
Azure Container App またはローカル テスト内から:
curl --request POST --url "$URL" --header "Authorization: Bearer $ACCESS_TOKEN" --header 'content-type: application/json' --data "$BODY"シェル コマンド (
hello worldおよびhi) からの出力を含む、実行結果を含む JSON 応答を受け取る必要があります。
デプロイメントを検証する
次のコマンドを使用して、リソースが正常に作成されたことを確認できます。
セッション プールが展開されているか確認します。
az resource show --ids "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionpools/$SESSION_POOL_NAME" --query '{name:name, location:location, provisioningState:properties.provisioningState}'ロールの割り当てを確認します。
az role assignment list --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionpools/$SESSION_POOL_NAME" --output table
リソースをクリーンアップする
このチュートリアルで作成したリソースは、Azure の請求書に影響します。 これらのサービスを長期間使用しない場合は、次のコマンドを実行して、このチュートリアルで作成したすべてのものを削除してください。
az group delete --resource-group $RESOURCE_GROUP