Sdílet prostřednictvím


Nasazení kontejnerizované aplikace v Pythonu do služby App Service

Tento článek je součástí kurzu o kontejnerizaci a nasazení webové aplikace v Pythonu do služby Azure App Service. App Service umožňuje spouštět kontejnerizované webové aplikace a nasazovat prostřednictvím funkcí kontinuální integrace a průběžného nasazování (CI/CD) pomocí Docker Hubu, Azure Container Registry a Visual Studio Team Services.

V této části kurzu se dozvíte, jak nasadit kontejnerizovanou webovou aplikaci v Pythonu do služby App Service pomocí App Service Web App for Containers. Služba Web App for Containers umožňuje soustředit se na vytváření kontejnerů, aniž byste se museli starat o správu a údržbu základního orchestrátoru kontejnerů.

Po provedení kroků v tomto článku dokončíte web služby App Service pomocí image kontejneru Dockeru. Služba App Service načte počáteční image ze služby Azure Container Registry pomocí spravované identity pro ověřování.

Tento diagram služby zvýrazňuje součásti popsané v tomto článku.

snímek obrazovky se službami, které používají v kurzu – Kontejnerizovaná aplikace Pythonu v Azure se zvýrazněnou cestou nasazení

Vytvoření webové aplikace

Příkazy Azure CLI je možné spouštět v Azure Cloud Shellu nebo na pracovní stanici s nainstalovaným Azure CLI.

  1. Získejte ID prostředku skupiny obsahující službu Azure Container Registry pomocí příkazu 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 byste měli ve svém prostředí nastavit na název skupiny prostředků, který jste použili v části 3. Sestavení kontejneru v Azure tohoto kurzu Pokud tomu tak není, odkomentujte první řádek a nastavte jej na název, který jste použili.

  2. Vytvořte plán služby App Service pomocí příkazu 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
    
  3. Vytvořte webovou aplikaci pomocí příkazu az webapp create.

    Následující příkaz také povolí spravovanou identitu přiřazenou systémem pro webovou aplikaci a přiřadí ji AcrPull roli v zadaném prostředku – v tomto případě skupina prostředků, která obsahuje Službu Azure Container Registry. Tím se udělí systémem přiřazené spravované identitě oprávnění pro pull z libovolného Azure Container Registry ve skupině prostředků.

    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 
    

    Kde:

    • APP_SERVICE_NAME musí být globálně jedinečný, protože se stane názvem webu v adrese URL https://<website-name>.azurewebsites.net.
    • CONTAINER_NAME je ve tvaru "yourregistryname.azurecr.io/repo_name:tag".
    • REGISTRY_NAME by měl být ve vašem prostředí stále nastavený na název registru, který jste použili v části 3. Sestavení kontejneru v Azure tohoto kurzu Pokud není, odkomentujte řádek, ve kterém je nastavený v fragmentu kódu, a nastavte ho na název, který jste použili.

    Poznámka

    Při spuštění příkazu se může zobrazit chyba podobná následující:

    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 ...'
    

    K této chybě dochází, protože webová aplikace ve výchozím nastavení používá přihlašovací údaje správce služby Azure Container Registry k ověření pomocí registru a přihlašovacích údajů správce, které nejsou v registru povolené. Tuto chybu můžete bezpečně ignorovat, protože webovou aplikaci nastavíte tak, aby používala spravovanou identitu přiřazenou systémem pro ověřování v dalším příkazu.

Konfigurujte spravovanou identitu a webhook

  1. Nakonfigurujte webovou aplikaci tak, aby používala spravované identity k načtení ze služby Azure Container Registry pomocí příkazu az webapp config set.

    az webapp config set \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --generic-configurations '{"acrUseManagedIdentityCreds": true}'
    

    Vzhledem k tomu, že jste povolili spravovanou identitu přiřazenou systémem při vytváření webové aplikace, bude se jednat o spravovanou identitu použitou k načtení ze služby Azure Container Registry.

  2. Získejte přihlašovací údaje oboru aplikace pomocí příkazu 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 
    
  3. Využijte přihlašovací údaje oboru aplikace k vytvoření webového háku pomocí příkazu 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 
    

    Ve výchozím nastavení tento příkaz vytvoří webhook ve stejné skupině prostředků a umístění jako zadaný registr kontejneru Azure. V případě potřeby můžete toto chování přepsat pomocí parametrů --resource-group a --location.

Konfigurace připojení k MongoDB

V tomto kroku zadáte proměnné prostředí potřebné pro připojení k MongoDB.

Pokud potřebujete vytvořit službu Azure Cosmos DB pro MongoDB, doporučujeme postupovat podle pokynů k nastavení služby Cosmos DB for MangoDB v části 2. Místní sestavení a testování kontejneru tohoto kurzu. Až budete hotovi, měli byste mít připojovací řetězec pro Azure Cosmos DB pro MongoDB ve formátu mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>.

Abyste mohli postupovat podle následujících kroků, potřebujete připojovací řetězec MongoDB.

Pro nastavení proměnných prostředí ve službě App Service vytvoříte nastavení aplikace pomocí následujícího příkazu 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: Připojovací řetězec začínající na "mongodb://".
  • DB_NAME: Použijte restaurants_reviews.
  • COLLECTION_NAME: Použijte "restaurants_reviews".

Procházení webu

Pokud chcete ověřit, že je web spuštěný, přejděte na https://<website-name>.azurewebsites.net; kde název webu je název vaší služby App Service. V případě úspěchu by se měla zobrazit ukázková aplikace pro kontrolu restaurace. První spuštění webu může chvíli trvat. Po zobrazení webu přidejte restauraci a recenzi pro tuto restauraci a ověřte, že ukázková aplikace funguje.

Pokud používáte Azure CLI místně, můžete k procházení webu použít příkaz az webapp browse. Pokud používáte Cloud Shell, otevřete okno prohlížeče a přejděte na adresu URL webu.

az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAME 

Poznámka

Příkaz az webapp browse není v Cloud Shellu podporovaný. Otevřete okno prohlížeče a přejděte na adresu URL webu.

Řešení problémů s nasazením

Pokud ukázkovou aplikaci nevidíte, vyzkoušejte následující kroky.

  • S nasazením kontejnerů a službou App Service vždy zkontrolujte stránku Deployment Center / protokoly na portálu Azure. Ověřte, že kontejner byl stažen a je spuštěný. Počáteční stažení a spuštění kontejneru může trvat několik okamžiků.
  • Zkuste službu App Service restartovat a zjistěte, jestli se tím váš problém vyřeší.
  • Pokud dojde k chybám programování, zobrazí se tyto chyby v protokolech aplikace. Na stránce webu Azure Portal pro službu App Service vyberte Diagnostikovat a řešit problémy/protokoly aplikací.
  • Ukázková aplikace spoléhá na připojení k MongoDB. Ověřte, že služba App Service má nastavení aplikace se správnými informacemi o připojení.
  • Ověřte, že je pro službu App Service povolena spravovaná identita a že se používá v Centru nasazení. Na stránce webu Azure Portal pro službu App Service přejděte na prostředek služby App Service Deployment Center a ověřte, že ověřování je nastaveno na spravované identity.
  • Zkontrolujte, jestli je webhook definovaný ve službě Azure Container Registry. Webhook umožňuje službě App Service vyžádat image kontejneru. Konkrétně zkontrolujte, že identifikátor URI služby končí na /api/registry/webhook.
  • Různé úrovně služby Azure Container Registry mají různé funkce, včetně počtu webhooků. Pokud používáte existující registr, může se zobrazit zpráva: "Kvóta byla překročena pro webhooky pro SKU registru Basic. Další informace o různých kvótách skladových položek a procesu upgradu: https://aka.ms/acr/tiers". Pokud se tato zpráva zobrazí, použijte nový registr nebo snižte počet webhooků registru, které se používají.

Další krok