Implantar um aplicativo Python em contêineres no Serviço de Aplicativo
Este artigo faz parte de um tutorial sobre como colocar 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 CI/CD (integração contínua/implantação contínua) com o Hub do Docker, 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 em Contêineres do Serviço de Aplicativo . 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.
Depois de seguir as etapas neste artigo, você terminará 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.
Este diagrama de serviço realça os componentes abordados neste artigo.
Criar o aplicativo Web
Os comandos da CLI do Azure podem ser executados no do Azure Cloud Shell ou em uma estação de trabalho com a CLI do Azure instalada.
Obtenha a ID de recurso do grupo que contém o Registro de Contêiner do Azure usando 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 estar definido em seu ambiente para o nome do grupo de recursos utilizado por você na parte 3. Criar um contêiner no Azure deste tutorial. Se não estiver, remova a marca de comentário na primeira linha e defina-o conforme o nome utilizado por você.
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
Com o comando az webapp create, crie um aplicativo Web.
O comando a seguir também habilita a identidade gerenciada atribuída ao sistema
para o aplicativo da web e atribui a ele a função no recurso especificado – neste caso, o grupo de recursos que contém o Registro de Contêineres do Azure. Isso concede à identidade gerenciada atribuída pelo sistema privilégios de extração (pull) 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 exclusivo globalmente porque se torna o nome do site na URL
https://<website-name>.azurewebsites.net
. - O CONTAINER_NAME está no formato de "yourregistryname.azurecr.io/repo_name:tag".
- REGISTRY_NAME ainda deve estar definido em seu ambiente como o nome do registro utilizado por você na parte 3. Criar um contêiner no Azure deste tutorial. Se não estiver, remova a marca de comentário da linha em que está definido no snippet de código, e defina-o como o nome utilizado por você.
Nota
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 ...'
Esse erro ocorre porque o aplicativo Web usa o padrão de 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.
- APP_SERVICE_NAME deve ser exclusivo globalmente porque se torna o nome do site na URL
Configurar identidade gerenciada e webhook
Configure o aplicativo Web para utilizar identidades gerenciadas para efetuar o pull 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 ao criar o aplicativo Web, ela será a identidade gerenciada usada para efetuar pull do Registro de Contêiner do Azure.
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
Utilize 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 a 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 em parte 2. Compile e teste o contêiner localmente deste tutorial. Quando terminar, você deverá ter uma cadeia de conexão do Azure Cosmos DB para MongoDB no formato mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>
.
Você precisa 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: utilize "restaurants_reviews".
- COLLECTION_NAME: utilize "restaurants_reviews".
Navegue pelo site
Para verificar se o site está funcionando, vá para https://<website-name>.azurewebsites.net
; em que o nome do site é o nome do serviço do aplicativo. Se tiver êxito, você deve ver o aplicativo de exemplo de avaliação de restaurante. Pode levar alguns instantes para que o site inicie a primeira vez. Quando o site for exibido, adicione um restaurante e uma revisã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 az webapp browse comando 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
Nota
O comando az webapp browse
não tem suporte no Cloud Shell. Abra uma janela do navegador e navegue até a URL do site.
Solucionar problemas de implantação
Se você não vir o aplicativo de exemplo, experimente as etapas a seguir.
- Com a implantação de contêineres e o Serviço de Aplicativos, confira sempre a página Implantação / Logs no portal do Azure. Confirme se o contêiner foi extraído e está em execução. A extração e execução iniciais do contêiner podem demorar alguns instantes.
- Tente reiniciar o Serviço de Aplicativo e ver 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, acesse 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 Aplicações busque a imagem do contêiner. Em particular, verifique se o URI do Serviço termina com "/api/registry/webhook".
- SKUs diferentes do Registro de Contêiner do Azure possuem recursos distintos, 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 de registro Basic." 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 de registro que estão sendo utilizados.