Partilhar via


Sessões de contêiner personalizadas dos Aplicativos de Contêiner do Azure (visualização)

Além do interpretador de código interno que as sessões dinâmicas dos Aplicativos de Contêiner do Azure fornecem, você também pode usar contêineres personalizados para definir suas próprias áreas restritas de sessão.

Nota

As sessões dinâmicas dos Aplicativos de Contêiner do Azure estão atualmente em visualização. Consulte as limitações de visualização para obter mais informações.

Usos para sessões de contêiner personalizadas

Os contentores personalizados permitem-lhe criar soluções adaptadas às suas necessidades. Eles permitem que você execute código ou execute aplicativos em ambientes rápidos e efêmeros e oferecem espaços seguros e em área restrita com o Hyper-V. Além disso, eles podem ser configurados com isolamento de rede opcional. Alguns exemplos incluem:

  • Interpretadores de código: quando você precisa executar código não confiável em caixas de proteção seguras por uma linguagem não suportada no interpretador interno ou precisa de controle total sobre o ambiente do interpretador de código.

  • Execução isolada: quando você precisa executar aplicativos em cenários hostis e multilocatários em que cada locatário ou usuário tem seu próprio ambiente em área restrita. Esses ambientes são isolados uns dos outros e do aplicativo host. Alguns exemplos incluem aplicativos que executam código fornecido pelo usuário, código que concede ao usuário final acesso a um shell baseado em nuvem, agentes de IA e ambientes de desenvolvimento.

Usando sessões de contêiner personalizadas

Para usar sessões de contêiner personalizadas, primeiro crie um pool de sessões com uma imagem de contêiner personalizada. Os Aplicativos de Contêiner do Azure iniciam automaticamente os contêineres em suas próprias caixas de proteção do Hyper-V usando a imagem fornecida. Assim que o contêiner for iniciado, ele estará disponível para o pool de sessões.

Quando seu aplicativo solicita uma sessão, uma instância é alocada instantaneamente do pool. A sessão permanece ativa até entrar em um estado ocioso, que é automaticamente interrompido e destruído.

Criando um pool de sessões de contêiner personalizado

Para criar um pool de sessões de contêiner personalizado, você precisa fornecer uma imagem de contêiner e definições de configuração do pool.

Você invoca ou se comunica com cada sessão usando solicitações HTTP. O contêiner personalizado deve expor um servidor HTTP em uma porta especificada para responder a essas solicitações.

Para criar um pool de sessões de contêiner personalizado usando a CLI do Azure, verifique se você tem as versões mais recentes da CLI do Azure e da extensão Aplicativos de Contêiner do Azure com os seguintes comandos:

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

Os pools de sessão de contêiner personalizados exigem um perfil de carga de trabalho habilitado para o ambiente de Aplicativos de Contêiner do Azure. Se você não tiver um ambiente, use o az containerapp env create -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP> --location <LOCATION> --enable-workload-profiles comando para criar um.

Use o az containerapp sessionpool create comando para criar um pool de sessões de contêiner personalizado.

O exemplo a seguir cria um pool de sessões nomeado my-session-pool com uma imagem myregistry.azurecr.io/my-container-image:1.0de contêiner personalizada.

Antes de enviar a solicitação, substitua os espaços reservados entre <> os colchetes pelos valores apropriados para o pool de sessões e o identificador de sessão.

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" \
    --location <LOCATION>

Este comando cria um pool de sessões com as seguintes configurações:

Parâmetro valor Description
--name my-session-pool O nome do pool de sessões.
--resource-group my-resource-group O grupo de recursos que contém o pool de sessões.
--environment my-environment O nome ou ID do recurso do ambiente do aplicativo contêiner.
--container-type CustomContainer O tipo de contêiner do pool de sessões. Deve ser CustomContainer para sessões de contêiner personalizadas.
--image myregistry.azurecr.io/my-container-image:1.0 A imagem de contêiner a ser usada para o pool de sessões.
--registry-server myregistry.azurecr.io O nome do host do servidor de registro de contêiner.
--registry-username my-username O nome de usuário para efetuar login no registro de contêiner.
--registry-password my-password A senha para fazer login no registro do contêiner.
--cpu 0.25 A CPU necessária em núcleos.
--memory 0.5Gi A memória necessária.
--target-port 80 A porta de sessão usada para o tráfego de entrada.
--cooldown-period 300 O número de segundos que uma sessão pode ficar ociosa antes que a sessão seja encerrada. O período ocioso é redefinido cada vez que a API da sessão é chamada. O valor deve estar entre 300 e 3600.
--network-status Designa se o tráfego de rede de saída é permitido a partir da sessão. Os valores válidos são EgressDisabled (padrão) e EgressEnabled.
--max-sessions 10 O número máximo de sessões que podem ser alocadas ao mesmo tempo.
--ready-sessions 5 O número de sessões de destino que estão prontas no pool de sessões o tempo todo. Aumente esse número se as sessões forem alocadas mais rapidamente do que o pool está sendo reabastecido.
--env-vars "key1=value1" "key2=value2" As variáveis de ambiente a serem definidas no contêiner.
--location "Supported Location" O local do pool de sessões.

Para atualizar o pool de sessões, use o az containerapp sessionpool update comando.

Importante

Se a sessão for usada para executar código não confiável, não inclua informações ou dados que você não deseja que o código não confiável acesse. Suponha que o código é mal-intencionado e tem acesso total ao contêiner, incluindo suas variáveis de ambiente, segredos e arquivos.

Trabalhar com sessões

Seu aplicativo interage com uma sessão usando a API de gerenciamento do pool de sessões.

Um ponto de extremidade de gerenciamento de pool para sessões de contêiner personalizadas segue este formato: https://<SESSION_POOL>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io.

Para recuperar o ponto de extremidade de gerenciamento do pool de sessões, use o az containerapp sessionpool show comando:

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

Todas as solicitações para o ponto de extremidade de gerenciamento de pool devem incluir um Authorization cabeçalho com um token de portador. Para saber como autenticar com a API de gerenciamento de pool, consulte Autenticação.

Cada solicitação de API também deve incluir o parâmetro identifier de cadeia de caracteres de consulta com a ID da sessão. Esse ID de sessão exclusivo permite que seu aplicativo interaja com sessões específicas. Para saber mais sobre identificadores de sessão, consulte Identificadores de sessão.

Importante

O identificador de sessão é uma informação confidencial que requer um processo seguro à medida que você cria e gerencia seu valor. Para proteger esse valor, seu aplicativo deve garantir que cada usuário ou locatário tenha acesso apenas às suas próprias sessões. A falha em proteger o acesso às sessões pode resultar em uso indevido ou acesso não autorizado aos dados armazenados nas sessões dos usuários. Para obter mais informações, consulte Identificadores de sessão

Encaminhando solicitações para o contêiner da sessão:

Qualquer coisa no caminho após o ponto de extremidade de gerenciamento do pool base é encaminhada para o contêiner da sessão.

Por exemplo, se você fizer uma chamada para <POOL_MANAGEMENT_ENDPOINT>/api/uploadfile, a solicitação será roteada para o contêiner da sessão em 0.0.0.0:<TARGET_PORT>/api/uploadfile.

Interação contínua da sessão:

Pode continuar a fazer pedidos para a mesma sessão. Se não houver solicitações para a sessão por mais tempo do que o período de resfriamento, a sessão será excluída automaticamente.

Pedido de amostra

O exemplo a seguir mostra uma solicitação para uma sessão de contêiner personalizada por um ID de usuário.

Antes de enviar a solicitação, substitua os espaços reservados entre <> colchetes por valores específicos para sua solicitação.

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

Essa solicitação é encaminhada para a sessão de contêiner personalizada com o identificador do ID do usuário. Se a sessão ainda não estiver em execução, os Aplicativos de Contêiner do Azure alocarão uma sessão do pool antes de encaminhar a solicitação.

No exemplo, o contêiner da sessão recebe a solicitação em http://0.0.0.0:<INGRESS_PORT>/<API_PATH_EXPOSED_BY_CONTAINER>.

Faturação

As sessões de contêiner personalizadas são cobradas com base nos recursos consumidos pelo pool de sessões. Para obter mais informações, consulte Cobrança de aplicativos de contêiner do Azure.

Próximos passos