Kılavuz: Azure Container Apps kullanarak oturum havuzunda kabuk komutlarını yürütme (önizleme)

Bu öğreticide, Azure Container Apps'te bir kabuk oturum havuzunu dağıtma ve Dinamik Oturumlar API'sini ve ARM şablonlarını kullanarak kabuk komutlarını yürütme işlemleri gösterilmektedir.

Bu öğreticide siz:

  • ARM şablonlarını kullanarak shell oturumu havuzu dağıtma
  • Uygun izinlere sahip kullanıcı tarafından atanan yönetilen kimlik oluşturma
  • Dinamik Oturumlar API'sini kullanarak kabuk komutlarını yürütme

Önkoşullar

Bu öğreticiye başlamadan önce aşağıdaki kaynaklara ihtiyacınız vardır.

Gereksinim Description
Azure hesabı Etkin aboneliği olan bir Azure hesabına ihtiyacınız vardır. Eğer bir hesabınız yoksa ücretsiz olarak bir tane oluşturabilirsiniz.
Azure Komut Satırı Arayüzü (Azure CLI) Azure CLI'yi yükleyin.

Kurulum

En son güncelleştirmelerle Azure CLI'yi hazırlayarak ve Azure'da oturum açarak başlayın.

  1. Azure CLI'yi en son sürüme güncelleştirin.

    az upgrade
    
  2. Kaynak sağlayıcısını Microsoft.App kaydedin.

    az provider register --namespace Microsoft.App
    
  3. Azure Container Apps CLI uzantısının en son sürümünü yükleyin.

    az extension add --name containerapp --allow-preview true --upgrade
    
  4. Azure'da oturum açın.

    az login
    
  5. Azure abonelik kimliğinizi sorgulayıp değeri bir değişken olarak ayarlayın.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  6. Bu yordamda kullanılan değişkenleri ayarlayın.

    Aşağıdaki komutu çalıştırmadan önce, ile çevrelenen <> yer tutucuları kendi değerlerinizle değiştirdiğinizden emin olun.

    RESOURCE_GROUP=<RESOURCE_GROUP_NAME>
    SESSION_POOL_NAME=<SESSION_POOL_NAME>
    LOCATION=<LOCATION>
    API_VERSION="2025-10-02-preview"
    

    Aşağıdaki adımlarda kaynakları oluşturmak için bu değişkenleri kullanırsınız.

  7. Kaynak grubunu oluşturmak için kullanmak istediğiniz aboneliği ayarlayın.

    az account set -s $SUBSCRIPTION_ID
    
  8. Bir kaynak grubu oluşturun.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    

ARM şablonunu oluşturma

Kabuk oturum havuzunuzu tanımlamak için deploy.json adlı bir ARM şablon dosyası oluşturun.

{
    "$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"
                }
            }
        }
    ]
}

Kabuk oturum havuzunu dağıt

Shell oturum havuzunuzu dağıtmak için ARM şablonunu kullanın.

az deployment group create --resource-group $RESOURCE_GROUP --template-file deploy.json

Yönetilen kimliği atayın

Oturum havuzuna API çağrılarının kimliğini doğrulamak için kullanılacak, kullanıcı tarafından atanan bir yönetilen kimlik oluşturun.

  1. Kimlik adını ve havuz kaynak kimliğini ayarlayın.

    UAMI_NAME=${SESSION_POOL_NAME}-uami
    POOL_ID="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionpools/$SESSION_POOL_NAME"
    
  2. Kullanıcı tarafından atanan yönetilen kimliği oluşturun.

    az identity create --resource-group $RESOURCE_GROUP --name $UAMI_NAME --location $LOCATION
    
  3. Yönetilen kimliğin asal kimliğini alın.

    UAMI_PRINCIPAL=$(az identity show --resource-group $RESOURCE_GROUP --name $UAMI_NAME --query principalId -o tsv)
    

Azure Container App’inize yönetilen bir kimliği atayın

Azure Container App'inizi oluştururken veya güncelleştirirken, uygulamaya kullanıcı tarafından atanan yönetilen kimliği atayın. Örneğin:

az containerapp update \
  --name <CONTAINER_APP_NAME> \
  --resource-group $RESOURCE_GROUP \
  --user-assigned $UAMI_NAME

Daha fazla ayrıntı için Bkz. Kapsayıcı uygulamasına yönetilen kimlik atama .

Oturum yürütme API'leri için rol atamalarını ayarlama

Oturum havuzunun API'siyle etkileşim kurmak için yönetilen kimliğinize Azure ContainerApps Session Executor rolünü atamanız gerekir.

Kimlik yayılımını bekleyin, ardından rolü yönetilen kimliğe atayın.

az role assignment create --assignee $UAMI_PRINCIPAL --role "Azure ContainerApps Session Executor" --scope $POOL_ID

Taşıyıcı belirteci alma

Oturum havuzunun API'sine erişmek için bir erişim belirteci gerekir. yöntemi, kodu nerede çalıştırdığınıza bağlıdır:

Azure Container Uygulamanızın içinden

Kullanıcı tarafından atanan yönetilen kimliğin atandığı bir Azure Container App içinden çalışırken, Azure Örnek Meta Veri Hizmeti'ni (IMDS) kullanarak bir erişim belirteci alın:

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')

Bu komut, belirteci alır ve access_token kullanarak JSON yanıtından jq değerini ayıklar.

Yerel test ve geliştirme için

Yerel olarak veya geliştirme ortamınızdan test ederken, Azure CLI kullanarak bir erişim belirteci alabilirsiniz (uygun izinlere sahip olmanız gerekir):

ACCESS_TOKEN=$(az account get-access-token --resource "https://dynamicsessions.io" --query accessToken --output tsv)

Uyarı

Yerel testin çalışması için, Azure CLI oturumunuzun oturum havuzuna atanmış "Azure ContainerApps Oturum Yürütücüsü" rolüne sahip bir kullanıcı veya hizmet sorumlusu olarak kimliğinin doğrulanması gerekir. Yönetilen kimlik yaklaşımı üretim senaryoları için önerilir.

Oturumunuzda kabuk komutlarını yürütme

Artık güvenlik bağlamını oluşturmak için taşıyıcı belirtecine sahip olduğunuz için, kabuk komutlarını yürütmek için oturum havuzuna bir istek gönderebilirsiniz.

  1. API çağrısı için istek gövdesini oluşturun.

    EXEC_ID=$(uuidgen)
    BODY=$(cat <<EOF
     {
       "codeInputType": "inline",
       "executionType": "synchronous",
       "shellCommand": "echo Hello world!",
       "timeoutInSeconds": 600
     }
     EOF
     )
    
  2. API uç noktası URL'sini oluşturun.

    URL="https://$LOCATION.dynamicsessions.io/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/sessionPools/$SESSION_POOL_NAME/executions?api-version=$API_VERSION&identifier=$EXEC_ID"
    
  3. Kabuk komutlarını çalıştır.

    Azure Container App'in içinden veya yerel testten:

    curl --request POST --url "$URL" --header "Authorization: Bearer $ACCESS_TOKEN" --header 'content-type: application/json' --data "$BODY"
    

    Kabuk komutlarının (hello world ve hi) çıkışı da dahil olmak üzere yürütme sonuçlarını içeren bir JSON yanıtı almanız gerekir.

Dağıtımınızı doğrulayın

Kaynaklarınızın başarıyla oluşturulduğunu şu komutları kullanarak doğrulayabilirsiniz:

  1. Oturum havuzu dağıtımını doğrulayın.

    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}'
    
  2. Rol atamayı doğrulayın.

    az role assignment list --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionpools/$SESSION_POOL_NAME" --output table
    

Kaynakları temizle

Bu öğreticide oluşturulan kaynakların Azure faturanız üzerinde etkisi vardır. Bu hizmetleri uzun süreli kullanmayacaksanız, bu öğreticide oluşturulan her şeyi kaldırmak için aşağıdaki komutu çalıştırın.

az group delete --resource-group $RESOURCE_GROUP

Sonraki Adımlar