Sdílet prostřednictvím


Vlastní relace kontejnerů Azure Container Apps (Preview)

Kromě integrovaného interpretu kódu, který poskytují dynamické relace Azure Container Apps, můžete také použít vlastní kontejnery k definování vlastních sandboxů relací.

Poznámka:

Dynamické relace Azure Container Apps jsou aktuálně ve verzi Preview. Další informace najdete v omezeních preview.

Používá se pro vlastní relace kontejneru.

Vlastní kontejnery umožňují vytvářet řešení přizpůsobená vašim potřebám. Umožňují spouštět kód nebo spouštět aplikace v prostředích, která jsou rychlá a dočasné a nabízejí zabezpečené a izolované prostory s hyper-V. Kromě toho je možné je nakonfigurovat s volitelnou izolací sítě. Mezi některé příklady patří:

  • Interprety kódu: Pokud potřebujete spustit nedůvěryhodný kód v zabezpečených sandboxech jazykem, který není podporovaný v integrovaném interpretu, nebo potřebujete plnou kontrolu nad prostředím interpretu kódu.

  • Izolované spouštění: Pokud potřebujete spouštět aplikace v nehostinných scénářích s více tenanty, ve kterých má každý tenant nebo uživatel vlastní prostředí v izolovaném prostoru (sandbox). Tato prostředí jsou izolovaná od sebe a od hostitelské aplikace. Mezi příklady patří aplikace, které spouštějí uživatelský kód, kód, který koncovým uživatelům uděluje přístup ke cloudovým prostředím, agentům AI a vývojovým prostředím.

Použití vlastních relací kontejneru

Pokud chcete použít vlastní relace kontejneru, nejprve vytvoříte fond relací s vlastní imagí kontejneru. Azure Container Apps automaticky spouští kontejnery ve vlastních sandboxech Hyper-V pomocí poskytnuté image. Jakmile se kontejner spustí, bude dostupný pro fond relací.

Když aplikace požádá o relaci, instance se okamžitě přidělí z fondu. Relace zůstane aktivní, dokud nezajde do nečinného stavu, který se pak automaticky zastaví a zničí.

Vytvoření vlastního fondu relací kontejneru

Pokud chcete vytvořit vlastní fond relací kontejneru, musíte zadat nastavení konfigurace image kontejneru a fondu.

Každou relaci vyvoláte nebo komunikujete pomocí požadavků HTTP. Vlastní kontejner musí vystavit server HTTP na portu, který zadáte, aby na tyto požadavky reagoval.

Pokud chcete vytvořit vlastní fond relací kontejnerů pomocí Azure CLI, ujistěte se, že máte nejnovější verze Azure CLI a rozšíření Azure Container Apps pomocí následujících příkazů:

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

Vlastní fondy relací kontejneru vyžadují profil úlohy s povoleným prostředím Azure Container Apps. Pokud prostředí nemáte, vytvořte ho az containerapp env create -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP> --location <LOCATION> --enable-workload-profiles pomocí příkazu.

az containerapp sessionpool create Pomocí příkazu vytvořte vlastní fond relací kontejneru.

Následující příklad vytvoří fond relací s názvem my-session-pool vlastní image kontejneru myregistry.azurecr.io/my-container-image:1.0.

Před odesláním požadavku nahraďte zástupné symboly mezi <> hranatými závorkami příslušnými hodnotami pro váš fond relací a identifikátor relace.

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"

Tento příkaz vytvoří fond relací s následujícím nastavením:

Parametr Hodnota Popis
--name my-session-pool Název fondu relací.
--resource-group my-resource-group Skupina prostředků, která obsahuje fond relací.
--environment my-environment Název nebo ID prostředku prostředí aplikace kontejneru.
--container-type CustomContainer Typ kontejneru fondu relací. Musí se jednat CustomContainer o vlastní relace kontejneru.
--image myregistry.azurecr.io/my-container-image:1.0 Image kontejneru, která se má použít pro fond relací.
--registry-server myregistry.azurecr.io Název hostitele serveru registru kontejneru.
--registry-username my-username Uživatelské jméno pro přihlášení k registru kontejneru.
--registry-password my-password Heslo pro přihlášení k registru kontejneru.
--cpu 0.25 Požadovaný procesor v jádrech.
--memory 0.5Gi Požadovaná paměť.
--target-port 80 Port relace používaný pro příchozí přenos dat.
--cooldown-period 300 Počet sekund, po které může být relace nečinná, než se relace ukončí. Období nečinnosti se resetuje při každém volání rozhraní API relace. Hodnota musí být mezi 300 a 3600.
--network-status Určuje, jestli je odchozí síťový provoz z relace povolený. Platné hodnoty jsou EgressDisabled (výchozí) a EgressEnabled.
--max-sessions 10 Maximální počet relací, které lze přidělit současně.
--ready-sessions 5 Cílový počet relací, které jsou připravené ve fondu relací po celou dobu. Pokud jsou relace přiděleny rychleji, než je fond doplňován, zvyšte toto číslo.
--env-vars "key1=value1" "key2=value2" Proměnné prostředí, které se mají nastavit v kontejneru.

Pokud chcete aktualizovat fond relací, použijte az containerapp sessionpool update příkaz.

Důležité

Pokud se relace používá ke spuštění nedůvěryhodného kódu, nezahrnujte informace ani data, ke kterým nechcete, aby k nedůvěryhodnému kódu přistupoval. Předpokládejme, že kód je škodlivý a má úplný přístup ke kontejneru, včetně jeho proměnných prostředí, tajných kódů a souborů.

Práce s relacemi

Aplikace komunikuje s relací pomocí rozhraní API pro správu fondu relací.

Koncový bod správy fondu pro vlastní relace kontejneru se řídí tímto formátem: https://<SESSION_POOL>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io.

Pokud chcete načíst koncový bod správy fondu relací, použijte az containerapp sessionpool show příkaz:

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

Všechny požadavky na koncový bod správy fondu musí obsahovat hlavičku Authorization s nosným tokenem. Informace o ověřování pomocí rozhraní API pro správu fondů najdete v tématu Ověřování.

Každý požadavek rozhraní API musí obsahovat také parametr identifier řetězce dotazu s ID relace. Toto jedinečné ID relace umožňuje vaší aplikaci pracovat s konkrétními relacemi. Další informace o identifikátorech relací najdete v tématu Identifikátory relací.

Důležité

Identifikátor relace je citlivé informace, které vyžadují zabezpečený proces při vytváření a správě jeho hodnoty. Aby byla tato hodnota chráněná, musí vaše aplikace zajistit, aby každý uživatel nebo tenant měl přístup jenom k vlastním relacím. Selhání zabezpečeného přístupu k relacím může mít za následek zneužití nebo neoprávněný přístup k datům uloženým v relacích uživatelů. Další informace najdete v tématu Identifikátory relací.

Předávání požadavků do kontejneru relace:

Cokoli v cestě za koncovým bodem správy základního fondu se předá kontejneru relace.

Pokud například voláte <POOL_MANAGEMENT_ENDPOINT>/api/uploadfile, požadavek se směruje do kontejneru relace na adrese 0.0.0.0:<TARGET_PORT>/api/uploadfile.

Průběžná interakce relace:

Žádosti můžete pokračovat ve stejné relaci. Pokud relace neobsahuje žádné požadavky na delší dobu, než je období cooldownu, relace se automaticky odstraní.

Ukázkový požadavek

Následující příklad ukazuje požadavek na vlastní relaci kontejneru podle ID uživatele.

Před odesláním požadavku nahraďte zástupné symboly mezi <> hranatými závorkami hodnotami specifickými pro váš požadavek.

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!'"
}

Tento požadavek se předá vlastní relaci kontejneru s identifikátorem ID uživatele. Pokud relace ještě není spuštěná, Azure Container Apps před předáním požadavku přidělí relaci z fondu.

V tomto příkladu kontejner relace obdrží požadavek na http://0.0.0.0:<INGRESS_PORT>/<API_PATH_EXPOSED_BY_CONTAINER>adrese .

Další kroky