Sessões de contêiner personalizadas dos Aplicativos de Contêiner do Azure (versão prévia)
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.
Observação
As sessões dinâmicas dos Aplicativos de Contêiner do Azure estão atualmente em versão prévia. Confira as limitações de visualização para obter mais informações.
Usos para sessões de contêiner personalizadas
Os contêineres personalizados permitem que você crie soluções adaptadas às suas necessidades. Elas permitem executar códigos ou aplicativos em ambientes rápidos e efêmeros e oferecem espaços seguros 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 áreas restritas seguras por um idioma sem suporte 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ão com uma imagem de contêiner personalizada. Os Aplicativos de Contêiner do Azure iniciam contêineres automaticamente em suas próprias áreas restritas do Hyper-V usando a imagem fornecida. Depois que o contêiner for iniciado, ele estará disponível para o pool de sessões.
Quando o aplicativo solicita uma sessão, uma instância é alocada instantaneamente do pool. A sessão permanece ativa até entrar em um estado ocioso, que é interrompido e destruído automaticamente.
Criando um pool de sessão de contêiner personalizado
Para criar um pool de sessão de contêiner personalizado, você precisa fornecer uma imagem de contêiner e configurações de pool.
Você chama 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ão 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 ambiente de Aplicativos de Contêiner do Azure habilitado para perfil de carga de trabalho. Se você não tiver um ambiente, use o comando az containerapp env create -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP> --location <LOCATION> --enable-workload-profiles
para criar um.
Use o comando az containerapp sessionpool create
para criar um pool de sessão de contêiner personalizado.
O exemplo a seguir cria um pool de sessões chamado my-session-pool
com uma imagem de contêiner personalizada myregistry.azurecr.io/my-container-image:1.0
.
Antes de enviar a solicitação, substitua os espaços reservados entre os colchetes <>
pelos valores apropriados para o pool de sessão 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>
Esse comando cria um pool de sessões com as seguintes configurações:
Parâmetro | Valor | Descrição |
---|---|---|
--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 a ID do recurso do ambiente do aplicativo de contêiner. |
--container-type |
CustomContainer |
O tipo de contêiner do pool de sessão. 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ão. |
--registry-server |
myregistry.azurecr.io |
O nome do host do servidor do registro de contêiner. |
--registry-username |
my-username |
O nome de usuário a ser conectado ao registro de contêiner. |
--registry-password |
my-password |
A senha para fazer logon no registro de 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 de a sessão ser encerrada. O período ocioso é redefinido sempre 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 na 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ão 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 comando az containerapp sessionpool update
.
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 seja mal-intencionado e tenha 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ão.
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ão, use o comando az containerapp sessionpool show
:
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 do pool devem incluir um cabeçalho Authorization
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 da cadeia de consulta identifier
com a ID da sessão. Essa ID de sessão exclusiva 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 é composto por informações confidenciais que exigem 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 próprias sessões. A falha na proteção do acesso às sessões pode resultar no uso indevido ou no acesso não autorizado aos dados armazenados nas sessões dos usuários. Para obter mais informações, confira 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 de 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 de sessão contínua:
Você pode continuar fazendo solicitações 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.
Solicitação de exemplo
O exemplo a seguir mostra uma solicitação a uma sessão de contêiner personalizada por uma ID de usuário.
Antes de enviar a solicitação, substitua os espaços reservados entre os colchetes <>
por valores específicos à 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 da 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>
.
Cobrança
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, confira Cobrança em Aplicativos de Contêiner do Azure.