Implantar um aplicativo Python em contêiner no Serviço de Aplicativo
Este artigo faz parte de um tutorial sobre como colocar em contêiner e implantar um aplicativo Web Python no Serviço de Aplicativo do Azure. O Serviço de Aplicativo permite que você execute aplicativos Web em contêineres e implante por meio de recursos de integração contínua/implantação contínua (CI/CD) com o Docker Hub, o Registro de Contêiner do Azure e o Visual Studio Team Services.
Nesta parte do tutorial, você aprenderá a implantar o aplicativo Web Python em contêineres no Serviço de Aplicativo usando o Aplicativo Web do Serviço de Aplicativo para Contêineres. O Aplicativo Web para Contêineres permite que você se concentre na composição de seus contêineres sem se preocupar em gerenciar e manter um orquestrador de contêiner subjacente.
Seguindo as etapas aqui, você acabará com um site do Serviço de Aplicativo usando uma imagem de contêiner do Docker. O Serviço de Aplicativo extrai a imagem inicial do Registro de Contêiner do Azure usando a identidade gerenciada para autenticação.
O diagrama de serviço mostrado abaixo destaca os componentes abordados neste artigo.
1. Crie o aplicativo Web
É possível executar os comandos da CLI do Azure no Azure Cloud Shell ou em uma estação de trabalho com a CLI do Azure instalada.
Etapa 1. Obtenha a ID do recurso do grupo que contém o Registro de Contêiner do Azure com o comando az group show .
# RESOURCE_GROUP_NAME='msdocs-web-app-rg'
RESOURCE_ID=$(az group show \
--resource-group $RESOURCE_GROUP_NAME \
--query id \
--output tsv)
echo $RESOURCE_ID
No comando acima, RESOURCE_GROUP_NAME ainda deve ser definido em seu ambiente como o nome do grupo de recursos usado na parte 3. Criar contêiner no Azure deste tutorial. Se não estiver, remova o comentário da primeira linha e certifique-se de que ela esteja definida com o nome que você usou.
Etapa 2. Criar um plano do Serviço de Aplicativo com o comando az appservice plan create.
APP_SERVICE_PLAN_NAME='msdocs-web-app-plan'
az appservice plan create \
--name $APP_SERVICE_PLAN_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--sku B1 \
--is-linux
Etapa 3. Crie um aplicativo Web com o comando az webapp create .
O comando a seguir também habilita a identidade gerenciada atribuída pelo sistema para o aplicativo Web e atribui a ele a AcrPull
função no recurso especificado - neste caso, o grupo de recursos que contém o Registro de Contêiner do Azure. Isso concede aos privilégios de pull de identidade gerenciada atribuídos pelo sistema em qualquer Registro de Contêiner do Azure no grupo de recursos.
APP_SERVICE_NAME='<website-name>'
# REGISTRY_NAME='<your Azure Container Registry name>'
CONTAINER_NAME=$REGISTRY_NAME'.azurecr.io/msdocspythoncontainerwebapp:latest'
az webapp create \
--resource-group $RESOURCE_GROUP_NAME \
--plan $APP_SERVICE_PLAN_NAME \
--name $APP_SERVICE_NAME \
--assign-identity '[system]' \
--scope $RESOURCE_ID \
--role acrpull \
--deployment-container-image-name $CONTAINER_NAME
No comando acima:
- APP_SERVICE_NAME deve ser globalmente exclusivo à medida que se torna o nome do site na URL
https://<website-name>.azurewebsites.net
. - CONTAINER_NAME é da forma "yourregistryname.azurecr.io/repo_name:tag".
- REGISTRY_NAME ainda deve ser definido em seu ambiente para o nome do Registro que você usou na parte 3. Criar contêiner no Azure deste tutorial. Se não estiver, remova o comentário da linha onde está definida acima e certifique-se de que está definida com o nome que você usou.
Observação
Você pode ver um erro semelhante à seguinte ao executar o comando:
No credential was provided to access Azure Container Registry. Trying to look up...
Retrieving credentials failed with an exception:'No resource or more than one were found with name ...'
Esse erro ocorre porque o aplicativo Web usa como padrão usar as credenciais de administrador do Registro de Contêiner do Azure para autenticar com o Registro e as credenciais de administrador não foram habilitadas no Registro. Você pode ignorar esse erro com segurança porque definirá o aplicativo Web para usar a identidade gerenciada atribuída pelo sistema para autenticação no próximo comando.
2. Configurar identidade gerenciada e webhook
Etapa 1. Configure o aplicativo Web para usar identidades gerenciadas para extrair do Registro de Contêiner do Azure com o comando az webapp config set .
az webapp config set \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--generic-configurations '{"acrUseManagedIdentityCreds": true}'
Como você habilitou a identidade gerenciada atribuída pelo sistema quando criou o aplicativo Web, ela será a identidade gerenciada usada para extrair do Registro de Contêiner do Azure.
Etapa 2. Obtenha a credencial de escopo do aplicativo com o comando az webapp deployment list-publishing-credentials .
CREDENTIAL=$(az webapp deployment list-publishing-credentials \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--query publishingPassword \
--output tsv)
echo $CREDENTIAL
Etapa 3. Use a credencial de escopo do aplicativo para criar um webhook com o comando az acr webhook create .
SERVICE_URI='https://$'$APP_SERVICE_NAME':'$CREDENTIAL'@'$APP_SERVICE_NAME'.scm.azurewebsites.net/api/registry/webhook'
az acr webhook create \
--name webhookforwebapp \
--registry $REGISTRY_NAME \
--scope msdocspythoncontainerwebapp:* \
--uri $SERVICE_URI \
--actions push
Por padrão, esse comando cria o webhook no mesmo grupo de recursos e local que o registro de Contêiner do Azure especificado. Se desejar, você pode usar os --resource-group
parâmetros e --location
para substituir esse comportamento.
3. Configurar conexão com o MongoDB
Nesta etapa, você especifica as variáveis de ambiente necessárias para se conectar ao MongoDB.
Se você precisar criar um Azure Cosmos DB para MongoDB, recomendamos seguir as etapas para configurar o Cosmos DB para MangoDB na parte 2. Crie e teste o contêiner localmente deste tutorial. Quando terminar, você deverá ter uma cadeia de conexão do Azure Cosmos DB para MongoDB do formulário mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>
.
Você precisará das informações da cadeia de conexão do MongoDB para seguir as etapas abaixo.
Para definir variáveis de ambiente no Serviço de Aplicativo, crie configurações do aplicativo usando o comando az webapp config appsettings set a seguir.
MONGO_CONNECTION_STRING='your Mongo DB connection string in single quotes'
MONGO_DB_NAME=restaurants_reviews
MONGO_COLLECTION_NAME=restaurants_reviews
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--settings CONNECTION_STRING=$MONGO_CONNECTION_STRING \
DB_NAME=$MONGO_DB_NAME \
COLLECTION_NAME=$MONGO_COLLECTION_NAME
- CONNECTION_STRING: Uma cadeia de conexão que começa com "mongodb://".
- DB_NAME: Use "restaurants_reviews".
- COLLECTION_NAME: Use "restaurants_reviews".
4. Navegue pelo site
Para verificar se o site está em execução, vá para https://<website-name>.azurewebsites.net
, onde o nome do site é o nome do serviço do aplicativo. Se for bem-sucedido, você verá o aplicativo de exemplo de avaliação de restaurante. Pode levar alguns instantes para que o site comece pela primeira vez. Quando o site for exibido, adicione um restaurante e uma avaliação para esse restaurante para confirmar se o aplicativo de exemplo está funcionando.
Se você estiver executando a CLI do Azure localmente, poderá usar o comando az webapp browse para navegar até o site. Se você estiver usando o Cloud Shell, abra uma janela do navegador e navegue até a URL do site.
az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAME
Observação
O az webapp browse
comando não é suportado no Cloud Shell. Abra uma janela do navegador e navegue até a URL do site.
5. Solucionar problemas de implantação
Se você não vir o aplicativo de exemplo, tente as etapas a seguir.
- Com a implantação de contêiner e o Serviço de Aplicativo, sempre verifique a página Logs do Centro / de Implantação no portal do Azure. Confirme se o contêiner foi puxado e está em execução. A tração inicial e o funcionamento do contêiner podem levar alguns instantes.
- Tente reiniciar o Serviço de Aplicativo e veja se isso resolve o problema.
- Se houver erros de programação, esses erros aparecerão nos logs do aplicativo. Na página do portal do Azure para o Serviço de Aplicativo, selecione Diagnosticar e resolver problemas/Logs de aplicativo.
- O aplicativo de exemplo depende de uma conexão com o MongoDB. Confirme se o Serviço de Aplicativo tem configurações de aplicativo com as informações de conexão corretas.
- Confirme se a identidade gerenciada está habilitada para o Serviço de Aplicativo e é usada no Centro de Implantação. Na página do portal do Azure para o Serviço de Aplicativo, vá para o recurso Centro de Implantação do Serviço de Aplicativo e confirme se a Autenticação está definida como Identidade Gerenciada.
- Verifique se o webhook está definido no Registro de Contêiner do Azure. O webhook permite que o Serviço de Aplicativo extraia a imagem do contêiner. Em particular, verifique se o URI do serviço termina com "/api/registry/webhook".
- Diferentes skus do Registro de Contêiner do Azure têm recursos diferentes, incluindo o número de webhooks. Se você estiver reutilizando um registro existente, poderá ver a mensagem: "Cota excedida para webhooks de tipo de recurso para o SKU Basic do Registro. Saiba mais sobre diferentes cotas de SKU e processo de atualização: https://aka.ms/acr/tiers". Se você vir essa mensagem, use um novo registro ou reduza o número de webhooks do Registro em uso.