Kiszolgáló nélküli kódértelmező-munkamenetek az Azure Container Appsben

Az Azure Container Apps dinamikus munkamenetei gyors és méretezhető hozzáférést biztosítanak egy kódértelmezőhöz. Minden kódértelmező munkamenetet egy Hyper-V-határ különít el teljesen, és nem megbízható kód futtatására lett tervezve.

Kódértelmező-munkamenetek használata

A kódértelmezők munkamenetei ideálisak olyan helyzetekben, amikor olyan kódot kell futtatnia, amely potenciálisan rosszindulatú, vagy kárt okozhat a gazdarendszerben vagy más felhasználókban, például:

  • Nagy nyelvi modell (LLM) által létrehozott kód.
  • Egy web- vagy SaaS-alkalmazás végfelhasználója által küldött kód.

Az olyan népszerű LLM-keretrendszerek esetében, mint a LangChain, a LlamaIndex és a Szemantic Kernel, eszközökkel és beépülő modulokkal integrálhatja az AI-alkalmazásokat a kódértelmezési munkamenetekkel.

Az alkalmazások REST API-val is integrálhatók a kódértelmezéssel. Az API lehetővé teszi, hogy:

  • Futtassa a kódot egy munkamenetben, és kérje le az eredményeket.

  • Fájlok feltöltése és letöltése a munkamenetbe és onnan.

    Feltöltheti és letöltheti a kód által feldolgozható végrehajtható kódfájlokat vagy adatfájlokat.

A beépített kódértelmező-munkamenetek támogatják a leggyakoribb kódvégrehajtási forgatókönyveket anélkül, hogy az infrastruktúrát vagy a tárolókat kellene kezelnie.

Ha teljes körű vezérlésre van szüksége a kódvégrehajtási környezet felett, vagy egy másik, elkülönített tesztkörnyezetet igénylő forgatókönyvvel rendelkezik, használhat egyéni kódértelmező-munkameneteket.

Kódértelmező munkamenetkészlete

A kódértelmező-munkamenetek használatához szükség van egy Azure-erőforrásra, egy munkamenetkészletre , amely meghatározza a kódértelmező-munkamenetek konfigurációját.

A munkamenet-készletben megadhatja a beállításokat, például az egyidejű munkamenetek maximális számát, valamint azt, hogy egy munkamenet mennyi ideig tétlen lehet a munkamenet leállítása előtt.

Munkamenetkészletet az Azure Portal, az Azure CLI vagy az Azure Resource Manager sablonjaival hozhat létre. A munkamenetkészlet létrehozása után a készlet felügyeleti API-végpontjaival kezelheti és futtathatja a kódot egy munkameneten belül.

A munkamenetkészletek létrehozásáról és konfigurálásáról további információt a Munkamenetkészletek használata című témakörben talál.

Kódvégrehajtás munkamenetben

A munkamenet-készlet létrehozása után az alkalmazás az LLM-keretrendszerrel való integrációval vagy a készlet felügyeleti API-végpontjaival közvetlenül kommunikálhat a készlet munkameneteivel.

Munkamenet-azonosítók

Fontos

A munkamenet-azonosító bizalmas információ. Az érték kezeléséhez biztonságos folyamatot kell használnia. Ennek a folyamatnak az a része, hogy az alkalmazás biztosítsa, hogy minden felhasználó vagy bérlő csak a saját munkameneteihez férhessen hozzá.

A munkamenetekhez való hozzáférés biztonságossá tételének elmulasztása a felhasználói munkamenetekben tárolt adatokkal való visszaélést vagy jogosulatlan hozzáférést eredményezhet. További információ: Munkamenet-azonosítók.

Amikor egy készlet munkameneteivel lép kapcsolatba, egy munkamenet-azonosítóval hivatkozik az egyes munkamenetekre. A munkamenet-azonosító egy olyan sztring, amelyet a munkamenetkészleten belül egyediként határoz meg. Ha webalkalmazást készít, használhatja a felhasználó azonosítóját. Ha csevegőrobotot készít, használhatja a beszélgetés azonosítóját.

Ha van egy futó munkamenet az azonosítóval, a rendszer újra felhasználja a munkamenetet. Ha nincs futó munkamenet az azonosítóval, a rendszer automatikusan létrehoz egy új munkamenetet.

Hitelesítés

A hitelesítés a Microsoft Entra-jogkivonatokon keresztül történik. Az érvényes Microsoft Entra-jogkivonatokat a munkamenet-készlet Azure ContainerApps-Munkamenet-végrehajtó és Közreműködő-szerepköreihez tartozó identitások hozzák létre.

Ha LLM-keretrendszer-integrációt használ, a keretrendszer kezeli a tokenek létrehozását és kezelését. Győződjön meg arról, hogy az alkalmazás olyan felügyelt identitással van konfigurálva, amely rendelkezik a szükséges szerepkör-hozzárendelésekkel a munkamenetkészleten.

Ha közvetlenül a hozzáférési szint felügyeleti API-végpontjait használja, létre kell hoznia egy jogkivonatot, és bele kell foglalnia a Authorization HTTP-kérések fejlécében. A korábban említett szerepkör-hozzárendeléseken kívül a jogkivonatnak tartalmaznia kell egy célközönségi (aud) jogcímet, amely rendelkezik az értékkel https://dynamicsessions.io.

További információ: Hitelesítés és engedélyezés.

Fájlokkal végzett munka

Feltölthet és letölthet fájlokat, és listázhatja az összes fájlt egy kódértelmező munkamenetben.

Támogatott karakterek

A fájlneveknek és elérési utaknak csak a következő támogatott karaktereket kell használniuk:

  • Nagybetűk és kisbetűk: A-Z, a-z.
  • Számjegyek: 0-9.
  • Speciális karakterek: -, _, , ., @, $, &, =, ;,, , #, %, ^, (). (Az elérési utak nem tartalmazhatnak ..)
  • Unicode-karakterek: Kínai, japán és egyéb nemzetközi karaktereket tartalmaz.

Fájl feltöltése

Ha egy fájlt fel szeretne tölteni egy munkamenetbe, küldjön egy kérést POST a files végpontnak egy többrészes űrlapadat-kérelemben. Helyezze el a fájl adatait a kérelem törzsében. A fájlnak tartalmaznia kell egy fájlnevet.

A feltöltött fájlokat a rendszer a munkamenet fájlrendszerében tárolja a /mnt/data címtárban.

Az alábbi példa bemutatja, hogyan tölthet fel fájlokat egy munkamenetbe.

A kérés elküldése előtt cserélje le a zárójelek közötti helyőrzőket a <> kérelemre jellemző értékekre.

POST https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files?api-version=2025-10-02-preview&identifier=<SESSION_ID>
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Authorization: Bearer <TOKEN>

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="<FILE_NAME_AND_EXTENSION>"
Content-Type: application/octet-stream

(data)
------WebKitFormBoundary7MA4YWxkTrZu0gW--

Fájl letöltése

Ha le szeretne tölteni egy fájlt egy munkamenet könyvtárából /mnt/data , küldjön egy kérést GET a files/{filename}/content végpontnak. A válasz tartalmazza a fájladatokat.

Az alábbi példa bemutatja, hogyan formázhat fájlletöltési GET kérelmet.

A kérés elküldése előtt cserélje le a zárójelek közötti helyőrzőket a <> kérelemre jellemző értékekre.

GET https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files/<FILE_NAME_AND_EXTENSION>/content?api-version=2025-10-02-preview&identifier=<SESSION_ID>
Authorization: Bearer <TOKEN>

Fájl metaadatainak beolvasása

A munkamenet /mnt/data könyvtárában lévő fájlok metaadatainak lekéréséhez küldjön egy kérést GET a files/{filename} végpontnak. A válasz fájltulajdonságokat tartalmaz, például a méretet és az utolsó módosítás időpontját.

Az alábbi példa bemutatja, hogyan formázhat egy kérést GET a fájl metaadatainak lekéréséhez.

A kérés elküldése előtt cserélje le a zárójelek közötti helyőrzőket a <> kérelemre jellemző értékekre.

GET https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files/<FILE_NAME_AND_EXTENSION>?api-version=2025-10-02-preview&identifier=<SESSION_ID>
Authorization: Bearer <TOKEN>

Fájlok listázása

A munkamenet /mnt/data könyvtárában lévő fájlok listázásához küldjön egy kérést GET a files végpontnak.

Az alábbi példa bemutatja, hogyan listázhatja a munkamenet könyvtárában lévő fájlokat.

A kérés elküldése előtt cserélje le a zárójelek közötti helyőrzőket a <> kérelemre jellemző értékekre.

GET https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files?api-version=2025-10-02-preview&identifier=<SESSION_ID>
Authorization: Bearer <TOKEN>

A válasz tartalmazza a munkamenetben lévő fájlok listáját.

Az alábbi lista a munkamenet tartalmának lekérésekor várható válasz típusát mutatja be.

{
    "$id": "1",
    "value": [
        {
            "$id": "2",
            "properties": {
                "$id": "3",
                "filename": "test1.txt",
                "size": 16,
                "lastModifiedTime": "2024-05-02T07:21:07.9922617Z"
            }
        },
        {
            "$id": "4",
            "properties": {
                "$id": "5",
                "filename": "test2.txt",
                "size": 17,
                "lastModifiedTime": "2024-05-02T07:21:08.8802793Z"
            }
        }
    ]
}

Biztonság

A kódértelmezési munkamenetek úgy vannak kialakítva, hogy nem megbízható kódot futtasson izolált környezetekben, hogy az alkalmazások és az adatok védettek maradjanak.

LLM-keretrendszer-integrációk

A munkamenetkészlet-kezelési API közvetlen használata helyett használhatja a következő LLM-keretrendszereket, amelyek integrációt biztosítanak a kódértelmező munkamenetekkel.

Keretrendszer Csomag Oktatóanyag
LangChain Piton: langchain-azure-dynamic-sessions Bemutató
LlamaIndex Piton: llama-index-tools-azure-code-interpreter Bemutató
Szemantikus kernel Python: semantic-kernel (0.9.8-b1-es vagy újabb verzió) Bemutató

Felügyeleti API-végpontok

Ha nem LLM-keretrendszer-integrációt használ, közvetlenül a felügyeleti API-végpontok használatával kezelheti a munkamenet-készletet.

Kód futtatása munkamenetben

A kód futtatásához egy munkamenetben küldjön egy POST kérést a executions végpontnak a futtatandó kóddal a kérés törzsében. Minden kódvégrehajtás legfeljebb 220 másodperc futásidejű lehet.

Az alábbi példa Pythonban nyomtat Hello, world! .

A kérés elküldése előtt cserélje le a zárójelek közötti <> helyőrzőket a munkamenetkészlet és a munkamenet-azonosító megfelelő értékeire.

POST https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/executions?api-version=2025-10-02-preview&identifier=<SESSION_ID>
Content-Type: application/json
Authorization: Bearer <TOKEN>

{
    "properties": {
        "codeInputType": "inline",
        "executionType": "synchronous",
        "code": "print('Hello, world!')"
    }
}

A munkamenet újbóli felhasználásához adja meg ugyanazt a munkamenet-azonosítót a későbbi kérésekben.

Fájl feltöltése munkamenetbe

Ha egy fájlt fel szeretne tölteni egy munkamenetbe, küldjön egy kérést POST a files végpontnak egy többrészes űrlapadat-kérelemben. Helyezze el a fájl adatait a kérelem törzsében. A fájlnak tartalmaznia kell egy fájlnevet.

A feltöltött fájlokat a rendszer a munkamenet fájlrendszerében tárolja a /mnt/data címtárban.

A kérés elküldése előtt cserélje le a zárójelek közötti helyőrzőket a <> kérelemre jellemző értékekre.

POST https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files?api-version=2025-10-02-preview&identifier=<SESSION_ID>
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Authorization: Bearer <TOKEN>

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="<FILE_NAME_AND_EXTENSION>"
Content-Type: application/octet-stream

(data)
------WebKitFormBoundary7MA4YWxkTrZu0gW--

Feljegyzés

A fájlfeltöltési korlát 128 MB. Ha túllépi ezt a korlátot, http 413-ra vonatkozó hibaüzenet jelenhet meg.

Fájl letöltése munkamenetből

Ha le szeretne tölteni egy fájlt egy munkamenet könyvtárából /mnt/data , küldjön egy kérést GET a files/{filename}/content végpontnak. A válasz tartalmazza a fájladatokat.

A kérés elküldése előtt cserélje le a zárójelek közötti helyőrzőket a <> kérelemre jellemző értékekre.

GET https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files/<FILE_NAME_AND_EXTENSION>/content?api-version=2025-10-02-preview&identifier=<SESSION_ID>
Authorization: Bearer <TOKEN>

Fájl metaadatainak beolvasása

A munkamenet /mnt/data könyvtárában lévő fájlok metaadatainak lekéréséhez küldjön egy kérést GET a files/{filename} végpontnak. A válasz fájltulajdonságokat tartalmaz, például a méretet és az utolsó módosítás időpontját.

A kérés elküldése előtt cserélje le a zárójelek közötti helyőrzőket a <> kérelemre jellemző értékekre.

GET https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files/<FILE_NAME_AND_EXTENSION>?api-version=2025-10-02-preview&identifier=<SESSION_ID>
Authorization: Bearer <TOKEN>

Fájlok listázása munkamenetben

A munkamenet /mnt/data könyvtárában lévő fájlok listázásához küldjön egy kérést GET a files végpontnak.

A kérés elküldése előtt cserélje le a zárójelek közötti helyőrzőket a <> kérelemre jellemző értékekre.

GET https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files?api-version=2025-10-02-preview&identifier=<SESSION_ID>
Authorization: Bearer <TOKEN>

A válasz a munkamenetben lévő fájlok listáját tartalmazza.

Az alábbiakban egy példa látható arra, hogy milyen típusú válaszra számíthat a munkamenet tartalmának lekérésekor.

{
    "$id": "1",
    "value": [
        {
            "$id": "2",
            "properties": {
                "$id": "3",
                "filename": "test1.txt",
                "size": 16,
                "lastModifiedTime": "2024-05-02T07:21:07.9922617Z"
            }
        },
        {
            "$id": "4",
            "properties": {
                "$id": "5",
                "filename": "test2.txt",
                "size": 17,
                "lastModifiedTime": "2024-05-02T07:21:08.8802793Z"
            }
        }
    ]
}

Munkamenet törlése

A Munkamenet törlése API használatával fejezhet be egy munkamenetet egy kódértelmező munkamenetkészletében.

A munkamenetek kiosztása után bármikor meghívhatja ezt az API-t, hogy manuálisan állítsa le. Ez akkor hasznos, ha:

  • A munkamenetek élettartamának elérése előtt törölnie kell az erőforrásokat.
  • A munkamenetkészlet elérte az egyidejű munkamenetek maximális korlátját, és kapacitást kell felszabadítania az új munkamenetekhez.
  • Egy munkamenet befejezte a munkáját, és azonnal fel szeretné szabadítani az erőforrásokat.

API-referencia

kérelem

DELETE <POOL_MANAGEMENT_ENDPOINT>/session?api-version=2025-02-02-preview&identifier=<SessionIdentifier>

Paraméterek

Paraméter Típus Szükséges Description
api-version karakterlánc Igen A használni kívánt API-verzió (például 2025-02-02-preview).
identifier karakterlánc Igen A leállítandó munkamenet egyedi azonosítója.

Examples

kérelem

DELETE <POOL_MANAGEMENT_ENDPOINT>/session?api-version=2025-02-02-preview&identifier=testSessionIdentifier

Válasz

HTTP/1.1 204 No Content

Munkamenet adatainak lekérése

A munkamenetkészlet lekérdezésével ellenőrizheti a munkamenet állapotát, lekérheti a lejárati adatokat, és listázhatja az összes aktív munkamenetet. Ez a funkció hasznos a munkamenet állapotának figyeléséhez, az erőforrás-használat nyomon követéséhez és az egyéni tisztítási munkafolyamatok implementálásához.

Egyetlen munkamenet lekérése

Egy adott munkamenet részleteinek lekéréséhez használja a get session API-t:

GET <POOL_MANAGEMENT_ENDPOINT>/session?identifier=<SessionIdentifier>&api-version=2025-02-02-preview

A getSession végpont visszaadja a munkamenet metaadatait, beleértve a munkamenet-azonosítót, az aktuális lejárati időt és a létrehozási időbélyeget.

SessionView válaszséma

Field Típus Szükséges Description
identifier karakterlánc Igen A megadott munkamenet-azonosító
etag karakterlánc Igen A munkamenet átlátszatlan verzióazonosítója. Ezt az azonosítót használhatja a változásészleléshez.
expiresAt DateTime Igen UTC időbélyeg a munkamenet leállásakor
createdAt DateTime No Munkamenet létrehozási időbélyeg
lastAccessedAt DateTime No Az utolsó kérés időbélyege ebben a munkamenetben

Példa kérésre és válaszra

curl -X GET "https://eastasia.dynamicsessions.io/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myrg/sessionPools/mysessionpool/session?identifier=user-123&api-version=2025-02-02-preview" \
  -H "Authorization: Bearer $TOKEN"

Sikeres válasz (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"
}

Az összes munkamenet listázása egy készletben

A munkamenetkészlet összes munkamenetének listájának lekéréséhez használja a végpontot listSessions :

GET <POOL_MANAGEMENT_ENDPOINT>/listSessions?skip=0&api-version=2025-02-02-preview
Authorization: Bearer <TOKEN>

Pagination

A listavégpont támogatja a kihagyásalapú lapozást. Alapértelmezés szerint minden oldal legfeljebb 300 munkamenetet ad vissza. A lekérdezési skip paraméterrel navigálhat az eredmények között.

Paraméter Description
skip Az elejétől kihagyandó munkamenetek száma (alapértelmezett: 0)
nextLink Az eredmények következő oldalának teljes URL-címe (további találatok esetén a válasz tartalmazza)

ApiCollectionEnvelope válaszséma

Field Típus Description
value SessionView[] Munkamenet-objektumok tömbje
nextLink karakterlánc A következő oldal URL-címe (null értékű, ha nincs több találat)

Példa lapozási ciklusra

POOL_URL="https://eastasia.dynamicsessions.io/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myrg/sessionPools/mysessionpool"
next_url="$POOL_URL/.management/listSessions?skip=0&api-version=2025-02-02-preview"

while [ -n "$next_url" ]; do
  response=$(curl -s "$next_url" \
    -H "Authorization: Bearer $TOKEN")

  echo "$response" | jq '.value[] | {identifier, expiresAt}'

  next_url=$(echo "$response" | jq -r '.nextLink // empty')
done

Példa válasz (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"
    }
  ],
  "nextLink": "https://eastasia.dynamicsessions.io/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myrg/sessionPools/mysessionpool/listSessions?skip=300"
}

Előre telepített csomagok

A Python-kódértelmező-munkamenetek olyan népszerű Python-csomagokat tartalmaznak, mint a NumPy, a pandas és a scikit-learn.

Az előre telepített csomagok listájának kimenetéhez hívja meg a executions végpontot az alábbi kóddal.

A kérés elküldése előtt cserélje le a zárójelek közötti helyőrzőket a <> kérelemre jellemző értékekre.

POST https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/executions?api-version=2025-10-02-preview&identifier=<SESSION_ID>
Content-Type: application/json
Authorization: Bearer <TOKEN>

{
    "properties": {
        "codeInputType": "inline",
        "executionType": "synchronous",
        "code": "import pkg_resources\n[(d.project_name, d.version) for d in pkg_resources.working_set]"
    }
}

Naplózás

Az elérhető kimenetek a kódvégrehajtásból visszaadott eredmények, beleértve stdout és stderr.

Ha kérés- vagy válaszkövetésre van szüksége, rögzítse azt abban az alkalmazásban, amely meghívja a munkamenetkészlet-kezelési API-t (például naplókérelmek azonosítóit, bemeneteit és válaszait az alkalmazás határán).

Feljegyzés

A kódértelmezők munkamenetei nem bocsátanak ki AppEnvSession-naplókat a Log Analyticsnek.

Mértékek

A kódértelmező használati és végrehajtási metrikái HTTP-válaszfejlécként jelennek meg a kódvégrehajtási API-hoz. Ezek a metrikák nem a Log Analyticsbe vannak írva.

Metrikák megtekintése

  1. Hívja meg a kódvégrehajtási API-t (/executions).
  2. Vizsgálja meg a HTTP-válaszfejléceket a használathoz és végrehajtási mutatókhoz.

A kódvégrehajtási API-val és a végpontokkal kapcsolatos részletekért lásd: Kód futtatása munkamenetben és Felügyeleti API-végpontokban.

Számlázás

A kódértelmező-munkamenetek számlázása az egyes munkamenetek időtartama alapján kerül számlázásra. További információ: Számlázás.

Következő lépések