Implantar um aplicativo Python em contêiner no Serviço de Aplicativo
Este artigo faz parte de um tutorial sobre como contentorizar e implementar uma aplicação Web Python no Serviço de Aplicações 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 fazer a implantação da aplicação Web Python em contentor no Serviço de Aplicações, usando a Aplicação Web do Serviço de Aplicações para Contentores. O Web App for Containers permite que você se concentre em compor seus contêineres sem se preocupar em gerenciar e manter um orquestrador de contêineres subjacente.
Depois de seguir as etapas neste artigo, você termina 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 identidade gerenciada para autenticação.
Este diagrama de serviço destaca os componentes abordados neste artigo.
Criar o aplicativo Web
Os comandos da CLI do Azure podem ser executados na Azure Cloud Shell ou numa estação de trabalho com a CLI do Azure instalada.
Obtenha o ID do recurso do grupo que contém o Azure Container Registry 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
RESOURCE_GROUP_NAME ainda deve ser definido no seu ambiente para o nome do grupo de recursos usado na parte 3. Construir contentor no Azure deste tutorial. Se não estiver, descomente a primeira linha e defina-a com o nome que você usou.
Crie um plano do Serviço de Aplicações 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
Crie uma aplicação web com o comando az webapp create.
O comando a seguir também ativa a identidade gerida atribuído pelo sistema, , para a aplicação web e atribui-lhe a função
AcrPull
no recurso especificado - neste caso, o grupo de recursos que contém o Registo de Contentores do Azure. Isso concede à identidade gerida atribuída pelo sistema privilégios de extração 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
Onde:
- APP_SERVICE_NAME deve ser globalmente exclusivo, pois se torna o nome do site no URL
https://<website-name>.azurewebsites.net
. - CONTAINER_NAME tem a forma "yourregistryname.azurecr.io/repo_name:tag".
- REGISTRY_NAME ainda deve ser definido no seu ambiente para o nome do registo que utilizou na parte 3. Construa o contentor no Azure deste tutorial. Se não estiver, descomente a linha onde ela está definida no trecho de código e defina-a com o nome que utilizaste.
Observação
Você pode ver um erro semelhante ao 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 ...'
Este erro ocorre porque a aplicação Web assume como predefinição utilizar as credenciais de administrador do Registo de Contentores do Azure para se autenticar com o registo e as credenciais de administrador não foram ativadas no registo. 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.
- APP_SERVICE_NAME deve ser globalmente exclusivo, pois se torna o nome do site no URL
Configurar identidade gerenciada e webhook
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 ao sistema quando criou o aplicativo Web, ela será a identidade gerenciada usada para extrair do Registro de Contêiner do Azure.
Obtenha a credencial de escopo da aplicação 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
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 parâmetros
--resource-group
e--location
para substituir esse comportamento.
Configurar conexão com MongoDB
Nesta etapa, você especifica as variáveis de ambiente necessárias para se conectar ao MongoDB.
Se precisar criar um Azure Cosmos DB para MongoDB, recomendamos que siga os passos para configurar o Cosmos DB para MongoDB na parte 2. Construir e testar o contentor localmente deste tutorial. Quando terminar, você deverá ter uma cadeia de conexão do Azure Cosmos DB para MongoDB do formato mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>
.
Você precisa da cadeia de conexão MongoDB para seguir as etapas abaixo.
- da CLI do Azure
- VS Code
- do portal do Azure
Para definir variáveis de ambiente no Serviço de Aplicativo, crie de configurações do aplicativo com o seguinte comando az webapp config appsettings set.
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: Utilize "restaurants_reviews".
Navegar no site
Para verificar se o site está em execução, vá para https://<website-name>.azurewebsites.net
, onde o nome do website é o nome do serviço de aplicativo. Se for bem-sucedido, você verá o aplicativo de exemplo de avaliação de restaurante. Pode levar alguns momentos para que o site comece pela primeira vez. Quando o site aparecer, adicione um restaurante e uma avaliação para esse restaurante para confirmar que o aplicativo de exemplo está funcionando.
- da CLI do Azure
- VS Code
- Portal do Azure
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é o URL do site.
az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAME
Observação
O comando az webapp browse
não é suportado no Cloud Shell. Abra uma janela do navegador e navegue até o URL do site.
Solucionar problemas de implantação
Se você não vir o aplicativo de exemplo, tente as etapas a seguir.
- Com a implantação de contentores e o Serviço de Aplicações, verifique sempre a página de Registos
do Centro de Implantação no portal do Azure. Confirme se o contêiner foi extraído e está em execução. A tração inicial do recipiente pode demorar alguns momentos. - 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/registos da Aplicação.
- 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 de Autenticação está definido como de Identidade Gerenciada . - Verifique se o webhook está definido no Registro de Contêiner do Azure. O webhook permite que o Serviço de Aplicações obtenha a imagem do contentor. 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 registro SKU Basic. Saiba mais sobre diferentes cotas de SKU e processo de atualização: https://aka.ms/acr/tiers". Se vir esta mensagem, utilize um novo registo ou reduza o número de webhooks de registo em utilização.