Dela via


Anpassade containersessioner i Azure Container Apps (förhandsversion)

Förutom den inbyggda kodtolkaren som dynamiska Azure Container Apps-sessioner tillhandahåller kan du också använda anpassade containrar för att definiera dina egna sessionssandlådor.

Kommentar

Dynamiska Sessioner i Azure Container Apps är för närvarande i förhandsversion. Mer information finns i förhandsversionsbegränsningar .

Används för anpassade containersessioner

Med anpassade containrar kan du skapa lösningar som är skräddarsydda för dina behov. De gör att du kan köra kod eller köra program i miljöer som är snabba och tillfälliga och erbjuder säkra, begränsade utrymmen med Hyper-V. Dessutom kan de konfigureras med valfri nätverksisolering. Vissa exempel inkluderar:

  • Kodtolkar: När du behöver köra obetrodd kod i säkra sandbox-miljöer med ett språk som inte stöds i den inbyggda tolken, eller om du behöver fullständig kontroll över kodtolkarmiljön.

  • Isolerad körning: När du behöver köra program i fientliga scenarier med flera klienter där varje klientorganisation eller användare har en egen sandbox-miljö. Dessa miljöer är isolerade från varandra och från värdprogrammet. Några exempel är program som kör kod som tillhandahålls av användaren, kod som ger slutanvändare åtkomst till ett molnbaserat gränssnitt, AI-agenter och utvecklingsmiljöer.

Använda anpassade containersessioner

Om du vill använda anpassade containersessioner skapar du först en sessionspool med en anpassad containeravbildning. Azure Container Apps startar automatiskt containrar i sina egna Hyper-V-sandbox-miljö med hjälp av den angivna avbildningen. När containern har startats är den tillgänglig för sessionspoolen.

När ditt program begär en session allokeras en instans omedelbart från poolen. Sessionen förblir aktiv tills den går in i ett inaktivt tillstånd, som sedan stoppas och förstörs automatiskt.

Skapa en anpassad containersessionspool

Om du vill skapa en anpassad containersessionspool måste du ange konfigurationsinställningar för containeravbildningar och pooler.

Du anropar eller kommunicerar med varje session med hjälp av HTTP-begäranden. Den anpassade containern måste exponera en HTTP-server på en port som du anger för att svara på dessa begäranden.

Om du vill skapa en anpassad containersessionspool med hjälp av Azure CLI kontrollerar du att du har de senaste versionerna av Azure CLI och Azure Container Apps-tillägget med följande kommandon:

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

Anpassade containersessionspooler kräver en arbetsbelastningsprofilaktiverad Azure Container Apps-miljö. Om du inte har en miljö använder du az containerapp env create -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP> --location <LOCATION> --enable-workload-profiles kommandot för att skapa en.

az containerapp sessionpool create Använd kommandot för att skapa en anpassad containersessionspool.

I följande exempel skapas en sessionspool med namnet my-session-pool med en anpassad containeravbildning myregistry.azurecr.io/my-container-image:1.0.

Innan du skickar begäran ersätter du platshållarna mellan <> hakparenteserna med lämpliga värden för sessionspoolen och sessionsidentifieraren.

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"

Det här kommandot skapar en sessionspool med följande inställningar:

Parameter Värde beskrivning
--name my-session-pool Namnet på sessionspoolen.
--resource-group my-resource-group Resursgruppen som innehåller sessionspoolen.
--environment my-environment Namnet eller resurs-ID:t för containerappens miljö.
--container-type CustomContainer Containertypen för sessionspoolen. Måste vara CustomContainer för anpassade containersessioner.
--image myregistry.azurecr.io/my-container-image:1.0 Containeravbildningen som ska användas för sessionspoolen.
--registry-server myregistry.azurecr.io Värdnamnet för containerregisterservern.
--registry-username my-username Användarnamnet för att logga in i containerregistret.
--registry-password my-password Lösenordet för att logga in i containerregistret.
--cpu 0.25 Den processor som krävs i kärnor.
--memory 0.5Gi Det minne som krävs.
--target-port 80 Sessionsporten som används för inkommande trafik.
--cooldown-period 300 Antalet sekunder som en session kan vara inaktiv innan sessionen avslutas. Inaktivitetsperioden återställs varje gång sessionens API anropas. Värdet måste vara mellan 300 och 3600.
--network-status Anger om utgående nätverkstrafik tillåts från sessionen. Giltiga värden är EgressDisabled (standard) och EgressEnabled.
--max-sessions 10 Det maximala antalet sessioner som kan allokeras samtidigt.
--ready-sessions 5 Målantalet sessioner som är klara i sessionspoolen hela tiden. Öka det här antalet om sessioner allokeras snabbare än poolen fylls på.
--env-vars "key1=value1" "key2=value2" Miljövariablerna som ska anges i containern.

Om du vill uppdatera sessionspoolen använder du az containerapp sessionpool update kommandot .

Viktigt!

Om sessionen används för att köra kod som inte är betrodd ska du inte inkludera information eller data som du inte vill att den ej betrodda koden ska komma åt. Anta att koden är skadlig och har fullständig åtkomst till containern, inklusive dess miljövariabler, hemligheter och filer.

Arbeta med sessioner

Ditt program interagerar med en session med hjälp av sessionspoolens hanterings-API.

En slutpunkt för poolhantering för anpassade containersessioner följer det här formatet: https://<SESSION_POOL>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io.

Om du vill hämta sessionspoolens hanteringsslutpunkt använder du az containerapp sessionpool show kommandot:

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

Alla begäranden till slutpunkten för poolhantering måste innehålla ett Authorization huvud med en ägartoken. Information om hur du autentiserar med API:et för poolhantering finns i Autentisering.

Varje API-begäran måste också innehålla frågesträngsparametern identifier med sessions-ID:t. Med det här unika sessions-ID:t kan ditt program interagera med specifika sessioner. Mer information om sessionsidentifierare finns i Sessionsidentifierare.

Viktigt!

Sessionsidentifieraren är känslig information som kräver en säker process när du skapar och hanterar dess värde. För att skydda det här värdet måste programmet se till att varje användare eller klient endast har åtkomst till sina egna sessioner. Om du inte kan skydda åtkomsten till sessioner kan det leda till missbruk eller obehörig åtkomst till data som lagras i användarnas sessioner. Mer information finns i Sessionsidentifierare

Vidarebefordra begäranden till sessionens container:

Allt i sökvägen efter baspoolens hanteringsslutpunkt vidarebefordras till sessionens container.

Om du till <POOL_MANAGEMENT_ENDPOINT>/api/uploadfileexempel anropar dirigeras begäran till sessionens container på 0.0.0.0:<TARGET_PORT>/api/uploadfile.

Kontinuerlig sessionsinteraktion:

Du kan fortsätta att göra begäranden till samma session. Om det inte finns några begäranden till sessionen längre än nedkylningsperioden tas sessionen bort automatiskt.

Exempelbegäran

I följande exempel visas en begäran till en anpassad containersession av ett användar-ID.

Innan du skickar begäran ersätter du platshållarna mellan <> hakparenteserna med värden som är specifika för din begäran.

POST https://<SESSION_POOL_NAME>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io/<API_PATH_EXPOSED_BY_CONTAINER>?identifier=<USER_ID>
Authorization: Bearer <TOKEN>
{
  "command": "echo 'Hello, world!'"
}

Den här begäran vidarebefordras till den anpassade containersessionen med identifieraren för användarens ID. Om sessionen inte redan körs allokerar Azure Container Apps en session från poolen innan begäran vidarebefordras.

I exemplet tar sessionens container emot begäran på http://0.0.0.0:<INGRESS_PORT>/<API_PATH_EXPOSED_BY_CONTAINER>.

Nästa steg