Udostępnij za pośrednictwem


Przykład: tworzenie i wdrażanie aplikacji internetowej przy użyciu bibliotek platformy Azure

W tym przykładzie pokazano, jak utworzyć i wdrożyć aplikację internetową w usłudze aplikacja systemu Azure Service za pomocą bibliotek zarządzania zestawu Azure SDK w skryscie języka Python. Kod aplikacji jest wdrażany z repozytorium GitHub.

Dzięki bibliotekom zarządzania (przestrzeniom nazw rozpoczynającym się od azure-mgmt, na przykład azure-mgmt-web), można napisać programy konfiguracji i wdrażania, aby wykonywać te same zadania, które można wykonywać za pośrednictwem witryny Azure Portal, interfejsu wiersza polecenia platformy Azure lub innych narzędzi do zarządzania zasobami. Aby zapoznać się z przykładami, zobacz Szybki start: wdrażanie aplikacji internetowej w języku Python (Django lub Flask) w usłudze aplikacja systemu Azure Service. (Równoważne polecenia interfejsu wiersza polecenia platformy Azure są podane w dalszej części tego artykułu).

Wszystkie polecenia w tym artykule działają tak samo w powłokach poleceń systemu Linux/macOS i Windows, chyba że zostały zaznaczone.

1: Konfigurowanie lokalnego środowiska projektowego

Jeśli jeszcze tego nie zrobiono, skonfiguruj środowisko, w którym można uruchomić ten kod. Oto kilka opcji:

  • Skonfiguruj środowisko wirtualne języka Python przy użyciu venv lub wybranego narzędzia. Środowisko wirtualne można utworzyć lokalnie lub w usłudze Azure Cloud Shell i uruchomić tam kod. Pamiętaj, aby aktywować środowisko wirtualne, aby rozpocząć korzystanie z niego.

  • Użyj środowiska conda.

  • Użyj kontenera deweloperskiego w programie Visual Studio Code lub GitHub Codespaces.

2: Instalowanie wymaganych pakietów bibliotek platformy Azure

Utwórz plik o nazwie requirements.txt z następującą zawartością:

azure-mgmt-resource
azure-mgmt-web
azure-identity

W terminalu lub wierszu polecenia z aktywowanym środowiskiem wirtualnym zainstaluj wymagania:

pip install -r requirements.txt

3. Tworzenie rozwidlenia przykładowego repozytorium

Odwiedź https://github.com/Azure-Samples/python-docs-hello-world repozytorium i rozwidlenie go na własnym koncie usługi GitHub. Użyjesz rozwidlenia, aby upewnić się, że masz uprawnienia do wdrażania repozytorium na platformie Azure.

Rozwidlenie przykładowego repozytorium w usłudze GitHub

Następnie utwórz zmienną środowiskową o nazwie REPO_URL z adresem URL rozwidlenia. Przykładowy kod w następnej sekcji zależy od tej zmiennej środowiskowej:

set REPO_URL=<url_of_your_fork>
set AZURE_SUBSCRIPTION_ID=<subscription_id>

4. Pisanie kodu w celu utworzenia i wdrożenia aplikacji internetowej

Utwórz plik w języku Python o nazwie provision_deploy_web_app.py przy użyciu następującego kodu. Komentarze wyjaśniają szczegóły kodu. Przed uruchomieniem skryptu pamiętaj, aby zdefiniować REPO_URL zmienne środowiskowe i AZURE_SUBSCRIPTION_ID .

import random, os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.web import WebSiteManagementClient

# Acquire a credential object using CLI-based authentication.
credential = AzureCliCredential()

# Retrieve subscription ID from environment variable
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

# Constants we need in multiple places: the resource group name and the region
# in which we provision resources. You can change these values however you want.
RESOURCE_GROUP_NAME = 'PythonAzureExample-WebApp-rg'
LOCATION = "centralus"

# Step 1: Provision the resource group.
resource_client = ResourceManagementClient(credential, subscription_id)

rg_result = resource_client.resource_groups.create_or_update(RESOURCE_GROUP_NAME,
    { "location": LOCATION })

print(f"Provisioned resource group {rg_result.name}")

# For details on the previous code, see Example: Provision a resource group
# at https://docs.microsoft.com/azure/developer/python/azure-sdk-example-resource-group


#Step 2: Provision the App Service plan, which defines the underlying VM for the web app.

# Names for the App Service plan and App Service. We use a random number with the
# latter to create a reasonably unique name. If you've already provisioned a
# web app and need to re-run the script, set the WEB_APP_NAME environment 
# variable to that name instead.
SERVICE_PLAN_NAME = 'PythonAzureExample-WebApp-plan'
WEB_APP_NAME = os.environ.get("WEB_APP_NAME", f"PythonAzureExample-WebApp-{random.randint(1,100000):05}")

# Obtain the client object
app_service_client = WebSiteManagementClient(credential, subscription_id)

# Provision the plan; Linux is the default
poller = app_service_client.app_service_plans.begin_create_or_update(RESOURCE_GROUP_NAME,
    SERVICE_PLAN_NAME,
    {
        "location": LOCATION,
        "reserved": True,
        "sku" : {"name" : "B1"}
    }
)

plan_result = poller.result()

print(f"Provisioned App Service plan {plan_result.name}")


# Step 3: With the plan in place, provision the web app itself, which is the process that can host
# whatever code we want to deploy to it.

poller = app_service_client.web_apps.begin_create_or_update(RESOURCE_GROUP_NAME,
    WEB_APP_NAME,
    {
        "location": LOCATION,
        "server_farm_id": plan_result.id,
        "site_config": {
            "linux_fx_version": "python|3.8"
        }
    }
)

web_app_result = poller.result()

print(f"Provisioned web app {web_app_result.name} at {web_app_result.default_host_name}")

# Step 4: deploy code from a GitHub repository. For Python code, App Service on Linux runs
# the code inside a container that makes certain assumptions about the structure of the code.
# For more information, see How to configure Python apps,
# https://docs.microsoft.com/azure/app-service/containers/how-to-configure-python.
#
# The create_or_update_source_control method doesn't provision a web app. It only sets the
# source control configuration for the app. In this case we're simply pointing to
# a GitHub repository.
#
# You can call this method again to change the repo.

REPO_URL = os.environ["REPO_URL"]

poller = app_service_client.web_apps.begin_create_or_update_source_control(RESOURCE_GROUP_NAME,
    WEB_APP_NAME, 
    { 
        "location": "GitHub",
        "repo_url": REPO_URL,
        "branch": "master",
        "is_manual_integration": True
    }
)

sc_result = poller.result()

print(f"Set source control on web app to {sc_result.branch} branch of {sc_result.repo_url}")

# Step 5: Deploy the code using the repository and branch configured in the previous step.
#
# If you push subsequent code changes to the repo and branch, you must call this method again
# or use another Azure tool like the Azure CLI or Azure portal to redeploy. 
# Note: By default, the method returns None.

app_service_client.web_apps.sync_repository(RESOURCE_GROUP_NAME, WEB_APP_NAME)

print(f"Deploy code")

Ten kod używa uwierzytelniania opartego na interfejsie wiersza polecenia (przy użyciu AzureCliCredentialmetody ), ponieważ demonstruje akcje, które w przeciwnym razie można wykonać bezpośrednio z interfejsem wiersza polecenia platformy Azure. W obu przypadkach używasz tej samej tożsamości do uwierzytelniania. W zależności od środowiska może być konieczne uruchomienie pierwszego uruchomienia az login w celu uwierzytelnienia.

Aby użyć takiego kodu w skryscie produkcyjnym (na przykład w celu zautomatyzowania zarządzania maszynami wirtualnymi), użyj DefaultAzureCredential (zalecane) z metodą opartą na jednostce usługi zgodnie z opisem w temacie Jak uwierzytelniać aplikacje języka Python za pomocą usług platformy Azure.

5. Uruchamianie skryptu

python provision_deploy_web_app.py

6. Weryfikowanie wdrożenia aplikacji internetowej

Odwiedź wdrożona witryna sieci Web, uruchamiając następujące polecenie:

az webapp browse --name PythonAzureExample-WebApp-12345 --resource-group PythonAzureExample-WebApp-rg

Zastąp nazwę aplikacji internetowej (--name opcja) i nazwę grupy zasobów (--resource-group opcja) wartościami użytymi w skrypcie. W przeglądarce powinien zostać wyświetlony komunikat "Hello, World!".

Jeśli nie widzisz oczekiwanych danych wyjściowych, poczekaj kilka minut i spróbuj ponownie.

Jeśli nadal nie widzisz oczekiwanych danych wyjściowych, wykonaj następujące elementy:

  1. Przejdź do portalu Azure Portal.
  2. Wybierz pozycję Grupy zasobów i znajdź utworzoną grupę zasobów.
  3. Wybierz nazwę grupy zasobów, aby wyświetlić zawarte w niej zasoby. W szczególności sprawdź, czy istnieje plan usługi App Service i usługa App Service.
  4. Wybierz usługę App Service, a następnie wybierz pozycję Centrum wdrażania.
  5. Wybierz kartę dzienników, aby wyświetlić dzienniki wdrażania.

7. Ponowne wdrażanie kodu aplikacji internetowej (opcjonalnie)

Skrypt konfiguruje zasoby potrzebne do hostowania aplikacji internetowej i ustawia źródło wdrożenia na rozwidlenie przy użyciu integracji ręcznej. W przypadku ręcznej integracji należy wyzwolić aplikację internetową, aby ściągnąć ze skonfigurowanego repozytorium i gałęzi.

Skrypt wywołuje metodę WebSiteManagementClient.web_apps.sync_repository , aby wyzwolić ściąganie z aplikacji internetowej. Jeśli wypchniesz kolejne zmiany kodu do repozytorium, możesz ponownie wdrożyć kod, wywołując ten interfejs API lub używając innych narzędzi platformy Azure, takich jak interfejs wiersza polecenia platformy Azure lub witryna Azure Portal.

Kod można wdrożyć za pomocą interfejsu wiersza polecenia platformy Azure, uruchamiając polecenie az webapp deployment source sync :

az webapp deployment source sync --name PythonAzureExample-WebApp-12345 --resource-group PythonAzureExample-WebApp-rg

Zastąp nazwę aplikacji internetowej (--name opcja) i nazwę grupy zasobów (--resource-group opcja) wartościami użytymi w skrypcie.

Aby wdrożyć kod z witryny Azure Portal:

  1. Przejdź do portalu Azure Portal.
  2. Wybierz pozycję Grupy zasobów i znajdź utworzoną grupę zasobów.
  3. Wybierz nazwę grupy zasobów, aby wyświetlić zawarte w niej zasoby. W szczególności sprawdź, czy istnieje plan usługi App Service i usługa App Service.
  4. Wybierz usługę App Service, a następnie wybierz pozycję Centrum wdrażania.
  5. W górnym menu wybierz pozycję Synchronizuj , aby wdrożyć kod.

8. Czyszczenie zasobów

az group delete --name PythonAzureExample-WebApp-rg --no-wait

Uruchom polecenie az group delete, jeśli nie musisz przechowywać grupy zasobów utworzonej w tym przykładzie. Grupy zasobów nie generują żadnych bieżących opłat w ramach subskrypcji, ale dobrym rozwiązaniem jest wyczyszczenie żadnej grupy, z której nie korzystasz aktywnie. Argument --no-wait umożliwia polecenie natychmiastowego zwrócenia zamiast oczekiwania na zakończenie operacji.

Możesz również użyć ResourceManagementClient.resource_groups.begin_delete metody , aby usunąć grupę zasobów z kodu.

Aby uzyskać informacje ogólne: równoważne polecenia interfejsu wiersza polecenia platformy Azure

Następujące polecenia interfejsu wiersza polecenia platformy Azure wykonaj te same kroki aprowizacji co skrypt języka Python:

rem Replace <your_github_user_name> with the account name of the fork.

set repoUrl=https://github.com/<your_github_user_name>/python-docs-hello-world
set appName=PythonAzureExample-WebApp-%random%

az group create -l centralus -n PythonAzureExample-WebApp-rg

az appservice plan create -n PythonAzureExample-WebApp-plan -g PythonAzureExample-WebApp-rg ^
     --is-linux --sku F1

echo Creating app: %appName%

az webapp create -g PythonAzureExample-WebApp-rg -n %appName% ^
    --plan PythonAzureExample-WebApp-plan --runtime "python|3.8"

rem You can use --deployment-source-url with the first create command. It is shown here
rem to match the sequence of the Python code.

az webapp create -n %appName% -g PythonAzureExample-WebApp-rg ^
    --plan PythonAzureExample-WebApp-plan --runtime "python|3.8" ^
    --deployment-source-url %repoUrl% 

rem The previous command sets up External Git deployment from the specified repository. This 
rem command triggers a pull from the repository.

az webapp deployment source sync --name %appName% --resource-group PythonAzureExample-WebApp-rg

Zobacz też