Пример. Использование библиотек Azure для создания и развертывания веб-приложения
В этом примере показано, как использовать библиотеки управления azure SDK в скрипте Python для создания и развертывания веб-приложения в службе приложение Azure. Код приложения развертывается из репозитория GitHub.
С помощью библиотек управления (пространства имен, начиная с azure-mgmt
, например, azure-mgmt-web
можно написать программы конфигурации и развертывания, чтобы выполнять те же задачи, которые можно выполнять с помощью портал Azure, Azure CLI или других средств управления ресурсами. Примеры см. в кратком руководстве по развертыванию веб-приложения Python (Django или Flask) в службе приложение Azure. (Эквивалентные команды Azure CLI приведены далее в этой статье.)
Все описанные в этой статье команды работают одинаково как в Bash для Linux или macOS, так и в командных оболочках для Windows, если не указано иное.
1. Настройка локальной среды разработки
Если вы еще не сделали этого, настройте среду, в которой можно запустить этот код. Ниже приведено несколько вариантов:
Настройте виртуальную среду Python с помощью
venv
или выбранного средства. Вы можете создать виртуальную среду локально или в Azure Cloud Shell и запустить код там. Обязательно активируйте виртуальную среду, чтобы начать использовать ее.Используйте среду conda.
Используйте контейнер разработки в Visual Studio Code или GitHub Codespaces.
2. Установка необходимых пакетов библиотек Azure
Создайте файл requirements.txt со следующим содержимым.
azure-mgmt-resource
azure-mgmt-web
azure-identity
В окне терминала или в командной строке с активированной виртуальной средой установите необходимые компоненты.
pip install -r requirements.txt
3. Вилка примера репозитория
Перейдите по адресу https://github.com/Azure-Samples/python-docs-hello-world и создайте вилку репозитория в своей учетной записи GitHub. Вы будете использовать вилку, чтобы убедиться, что у вас есть разрешения на развертывание репозитория в Azure.
Создайте переменную среды с именем REPO_URL
. Укажите в ней URL-адрес вилки. Эта переменная среды будет в примере кода, показанном в следующем разделе.
4. Написание кода для создания и развертывания веб-приложения
Создайте файл Python с именем provision_deploy_webapp.py со следующим кодом. Примечания объясняют сведения о коде. Перед запуском скрипта обязательно определите REPO_URL
переменные среды и 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")
В этом коде используется проверка подлинности на основе CLI (с помощью AzureCliCredential
), так как в нем демонстрируются действия, которые можно выполнить непосредственно в Azure CLI. В обоих случаях для проверки подлинности используется одно и то же удостоверение. В зависимости от среды может потребоваться сначала выполнить az login
проверку подлинности.
Чтобы использовать такой код в рабочем скрипте (например, для автоматизации управления виртуальными машинами), используйте DefaultAzureCredential
(рекомендуется) с методом на основе субъекта-службы, как описано в разделе "Проверка подлинности приложений Python с помощью служб Azure".
Ссылки на справку о классах, используемых в коде
- AzureCliCredential (azure.identity)
- ResourceManagementClient (azure.mgmt.resource)
- WebSiteManagementClient (azure.mgmt.web import)
5. Запуск скрипта
python provision_deploy_web_app.py
6. Проверка развертывания веб-приложения
Перейдите на сайт развертывания, выполнив следующую команду:
az webapp browse --name PythonAzureExample-WebApp-12345 --resource-group PythonAzureExample-WebApp-rg
Замените имя веб-приложения (--name
параметр) и имя группы ресурсов (--resource-group
параметр) значениями, используемыми в скрипте. В браузере должно появиться сообщение "Hello, World!".
Если ожидаемые выходные данные не отображаются, подождите несколько минут и повторите попытку.
Если вы по-прежнему не видите ожидаемые выходные данные, выполните следующие действия:
- Переход на портал Azure.
- Выберите группы ресурсов и найдите созданную группу ресурсов.
- Выберите имя группы ресурсов, чтобы просмотреть содержащиеся в ней ресурсы. В частности, убедитесь, что есть план Служба приложений и Служба приложений.
- Выберите Служба приложений и выберите Центр развертывания.
- Перейдите на вкладку журналов для просмотра журналов развертывания.
7. Повторное развертывание кода веб-приложения (необязательно)
Скрипт настраивает ресурсы, необходимые для размещения веб-приложения, и задает источник развертывания вилку с помощью ручной интеграции. При интеграции вручную необходимо активировать веб-приложение для извлечения из настроенного репозитория и ветви.
Скрипт вызывает метод WebSiteManagementClient.web_apps.sync_repository , чтобы активировать извлечение из веб-приложения. При отправке последующих изменений кода в репозиторий можно повторно развернуть код, вызвав этот API или используя другие средства Azure, такие как Azure CLI или портал Azure.
Вы можете развернуть код с помощью Azure CLI, выполнив команду az webapp deployment source sync :
az webapp deployment source sync --name PythonAzureExample-WebApp-12345 --resource-group PythonAzureExample-WebApp-rg
Замените имя веб-приложения (--name
параметр) и имя группы ресурсов (--resource-group
параметр) значениями, используемыми в скрипте.
Чтобы развернуть код из портал Azure, выполните следующее:
- Переход на портал Azure.
- Выберите группы ресурсов и найдите созданную группу ресурсов.
- Выберите имя группы ресурсов, чтобы просмотреть содержащиеся в ней ресурсы. В частности, убедитесь, что есть план Служба приложений и Служба приложений.
- Выберите Служба приложений и выберите Центр развертывания.
- В верхнем меню выберите "Синхронизация ", чтобы развернуть код.
8. Очистка ресурсов
az group delete --name PythonAzureExample-WebApp-rg --no-wait
Выполните команду az group delete, если не нужно хранить группу ресурсов, созданную в этом примере. Создание групп ресурсов не влечет за собой расходов по подписке. Но рекомендуется удалять неиспользуемые группы. Аргумент --no-wait
позволяет команде выполнять возврат без задержки, не ожидая завершения операции.
Для удаления группы ресурсов с помощью кода также можно использовать метод ResourceManagementClient.resource_groups.begin_delete
.
Для справки: аналогичные команды Azure CLI
С помощью следующих команд Azure CLI выполняются такие же действия по подготовке, как и в сценарии 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
См. также
- Пример. Создание группы ресурсов
- Пример. Перечисление групп ресурсов в подписке
- Пример. Создание служба хранилища Azure
- Пример. Использование служба хранилища Azure
- Пример. Создание и запрос базы данных MySQL
- Пример. Создание виртуальной машины
- Использование Управляемых дисков Azure с виртуальными машинами
- Пройдите короткий опрос об Azure SDK для Python