Настройка образа контейнера для выполнения развертываний с помощью ARM и Bicep
Из этой статьи вы узнаете, как создавать пользовательские образы контейнеров Azure Resource Manager (ARM) и Bicep для развертывания определений среды в средах развертывания Azure (ADE).
Определение среды состоит по крайней мере из двух файлов: файла шаблона, например azuredeploy.json или main.bicep, и файла манифеста с именем environment.yaml. ADE использует контейнеры для развертывания определений среды и изначально поддерживает платформы ARM и Bicep IaC.
Модель расширяемости ADE позволяет создавать пользовательские образы контейнеров для использования с определениями среды. Используя модель расширяемости, вы можете создавать собственные пользовательские образы контейнеров и хранить их в реестре контейнеров, например DockerHub. Затем вы можете ссылаться на эти образы в определениях среды для развертывания сред.
Команда ADE предоставляет набор образов для начала работы, включая основной образ и образ Azure Resource Manager (ARM)/Bicep. Эти образы можно получить в папке Runner-Images .
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Среды развертывания Azure, настроенные в подписке Azure.
- Чтобы настроить ADE, выполните краткое руководство. Настройка сред развертывания Azure.
Использование образов контейнеров с ADE
Вы можете использовать один из следующих подходов к использованию образов контейнеров с ADE:
- Используйте стандартный образ контейнера: для простых сценариев используйте стандартный образ контейнера Bicep, предоставляемый ADE.
- Создайте пользовательский образ контейнера: для более сложных сценариев создайте пользовательский образ контейнера, соответствующий вашим конкретным требованиям.
Независимо от выбранного подхода необходимо указать образ контейнера в определении среды для развертывания ресурсов Azure.
Использование стандартного образа контейнера Bicep
ADE поддерживает Bicep в собственном коде, поэтому вы можете настроить определение среды, которое развертывает ресурсы Azure для среды развертывания, добавив файлы шаблонов (azuredeploy.json и environment.yaml) в каталог. Затем ADE использует стандартный образ контейнера Bicep для создания среды развертывания.
В файле environment.yaml свойство runner указывает расположение образа контейнера, который требуется использовать. Чтобы использовать образ, опубликованный на Реестр артефактов Microsoft, используйте соответствующий модуль выполнения идентификаторов, как указано в следующей таблице.
В следующем примере показан модуль выполнения, ссылающийся на образ контейнера Bicep:
name: WebApp
version: 1.0.0
summary: Azure Web App Environment
description: Deploys a web app in Azure without a datastore
runner: Bicep
templatePath: azuredeploy.json
Стандартный образ контейнера Bicep можно увидеть в примере репозитория ADE в папке Runner-Images для образа ARM-Bicep .
Дополнительные сведения о создании определений среды, использующих образы контейнеров ADE для развертывания ресурсов Azure, см. в статье "Добавление и настройка определения среды".
Создание пользовательского образа контейнера Bicep
Создание пользовательского образа контейнера позволяет настроить развертывания в соответствии с вашими требованиями. Пользовательские образы можно создавать на основе стандартных образов контейнеров ADE.
После завершения настройки образа необходимо создать образ и отправить его в реестр контейнеров.
Создание и настройка образа контейнера с помощью Docker
В этом примере вы узнаете, как создать образ Docker для использования развертываний ADE и доступа к интерфейсу командной строки ADE, базируя образ из одного из созданных образов ADE.
Интерфейс командной строки ADE — это средство, позволяющее создавать пользовательские образы с помощью базовых образов ADE. Вы можете использовать интерфейс командной строки ADE для настройки развертываний и удалений в соответствии с рабочим процессом. Интерфейс командной строки ADE предварительно установлен на примерах изображений. Дополнительные сведения о интерфейсе командной строки ADE см. в справочнике по пользовательскому образу запуска интерфейса командной строки.
Чтобы создать образ, настроенный для ADE, выполните следующие действия.
- Создайте образ на созданном ADE образе или на выбранном изображении с помощью инструкции FROM.
- Установите все необходимые пакеты для образа с помощью инструкции RUN.
- Создайте папку скриптов на том же уровне, что и Dockerfile, сохраните deploy.sh и delete.sh файлы в нем и убедитесь, что эти скрипты доступны для обнаружения и исполняемого файла в созданном контейнере. Этот шаг необходим для развертывания с помощью основного образа ADE.
Выбор примера образа контейнера с помощью инструкции FROM
Добавьте инструкцию FROM в созданный Файл DockerFile для нового образа, указывающего на образ, размещенный на Реестр артефактов Microsoft.
Ниже приведен пример инструкции FROM, ссылающейся на образ ядра примера:
FROM mcr.microsoft.com/deployment-environments/runners/core:latest
Эта инструкция извлекает последний опубликованный основной образ и делает его основой для пользовательского образа.
Установка Bicep в Dockerfile
Пакет Bicep можно установить с помощью Azure CLI с помощью инструкции RUN, как показано в следующем примере:
RUN az bicep install
Образы ADE основаны на образе Azure CLI и предварительно установлены пакеты ADE CLI и JQ. Дополнительные сведения о Azure CLI и пакете JQ можно узнать больше.
Чтобы установить все пакеты, необходимые в образе, используйте инструкцию RUN.
Выполнение скриптов оболочки операций
В примерах образов операции определяются и выполняются на основе имени операции. В настоящее время поддерживаются два имена операций развертывания и удаления.
Чтобы настроить пользовательский образ для использования этой структуры, укажите папку на уровне именованных скриптов Dockerfile и укажите два файла, deploy.sh и delete.sh. Скрипт оболочки развертывания запускается при создании или повторном развертывании среды, а сценарий оболочки удаления запускается при удалении среды. Примеры скриптов оболочки можно просмотреть в репозитории в папке Runner-Images для образа ARM-Bicep .
Чтобы убедиться, что эти скрипты оболочки являются исполняемыми, добавьте в Dockerfile следующие строки:
COPY scripts/* /scripts/
RUN find /scripts/ -type f -iname "*.sh" -exec dos2unix '{}' '+'
RUN find /scripts/ -type f -iname "*.sh" -exec chmod +x {} \;
Создание скриптов оболочки операций для развертывания шаблонов ARM или Bicep
Чтобы обеспечить успешное развертывание инфраструктуры ARM или Bicep через ADE, необходимо:
- Преобразование параметров ADE в допустимые для ARM параметры
- Разрешить связанные шаблоны, если они используются в развертывании
- Использование привилегированного управляемого удостоверения для выполнения развертывания
Во время точки входа основного образа все параметры, заданные для текущей среды, хранятся в переменной $ADE_OPERATION_PARAMETERS
. Чтобы преобразовать их в допустимые параметры ARM, можно выполнить следующую команду с помощью JQ:
# format the parameters as arm parameters
deploymentParameters=$(echo "$ADE_OPERATION_PARAMETERS" | jq --compact-output '{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": (to_entries | if length == 0 then {} else (map( { (.key): { "value": .value } } ) | add) end) }' )
Затем, чтобы устранить все связанные шаблоны, используемые в шаблоне на основе JSON ARM, можно декомпилировать основной файл шаблона, который разрешает все файлы локальной инфраструктуры, используемые во многих модулях Bicep. Затем перестройте эти модули обратно в один шаблон ARM с связанными шаблонами, внедренными в основной шаблон ARM в виде вложенных шаблонов. Этот шаг необходим только во время операции развертывания. Основной файл шаблона можно указать с помощью $ADE_TEMPLATE_FILE
набора во время точки входа основного образа, и эту переменную следует сбросить с помощью файла шаблона повторной компиляции. См. следующий пример.
if [[ $ADE_TEMPLATE_FILE == *.json ]]; then
hasRelativePath=$( cat $ADE_TEMPLATE_FILE | jq '[.. | objects | select(has("templateLink") and (.templateLink | has("relativePath")))] | any' )
if [ "$hasRelativePath" = "true" ]; then
echo "Resolving linked ARM templates"
bicepTemplate="${ADE_TEMPLATE_FILE/.json/.bicep}"
generatedTemplate="${ADE_TEMPLATE_FILE/.json/.generated.json}"
az bicep decompile --file "$ADE_TEMPLATE_FILE"
az bicep build --file "$bicepTemplate" --outfile "$generatedTemplate"
# Correctly reassign ADE_TEMPLATE_FILE without the $ prefix during assignment
ADE_TEMPLATE_FILE="$generatedTemplate"
fi
fi
Чтобы предоставить разрешения для развертывания, необходимо выполнить развертывание и удаление ресурсов в подписке, используйте привилегированное управляемое удостоверение, связанное с типом среды проекта ADE. Если для развертывания требуются специальные разрешения, например определенные роли, назначьте эти роли удостоверениям среды проекта. Иногда управляемое удостоверение не сразу доступно при вводе контейнера; Повторите попытку до успешного входа.
echo "Signing into Azure using MSI"
while true; do
# managed identity isn't available immediately
# we need to do retry after a short nap
az login --identity --allow-no-subscriptions --only-show-errors --output none && {
echo "Successfully signed into Azure"
break
} || sleep 5
done
Чтобы начать развертывание шаблонов ARM или Bicep, выполните az deployment group create
команду. При выполнении этой команды в контейнере выберите имя развертывания, которое не переопределяет предыдущие развертывания, и используйте --no-prompt true
--only-show-errors
флаги и убедитесь, что развертывание не завершится сбоем или сбоем при ожидании ввода данных пользователем, как показано в следующем примере:
deploymentName=$(date +"%Y-%m-%d-%H%M%S")
az deployment group create --subscription $ADE_SUBSCRIPTION_ID \
--resource-group "$ADE_RESOURCE_GROUP_NAME" \
--name "$deploymentName" \
--no-prompt true --no-wait \
--template-file "$ADE_TEMPLATE_FILE" \
--parameters "$deploymentParameters" \
--only-show-errors
Чтобы удалить среду, выполните развертывание в полном режиме и укажите пустой шаблон ARM, который удаляет все ресурсы в указанной группе ресурсов ADE, как показано в следующем примере:
deploymentName=$(date +"%Y-%m-%d-%H%M%S")
az deployment group create --resource-group "$ADE_RESOURCE_GROUP_NAME" \
--name "$deploymentName" \
--no-prompt true --no-wait --mode Complete \
--only-show-errors \
--template-file "$DIR/empty.json"
Вы можете проверить состояние подготовки и сведения, выполнив приведенные ниже команды. ADE использует некоторые специальные функции для чтения и предоставления дополнительных контекстов на основе сведений о подготовке, которые можно найти в папке Runner-Images . Простая реализация может быть следующей:
if [ $? -eq 0 ]; then # deployment successfully created
while true; do
sleep 1
ProvisioningState=$(az deployment group show --resource-group "$ADE_RESOURCE_GROUP_NAME" --name "$deploymentName" --query "properties.provisioningState" -o tsv)
ProvisioningDetails=$(az deployment operation group list --resource-group "$ADE_RESOURCE_GROUP_NAME" --name "$deploymentName")
echo "$ProvisioningDetails"
if [[ "CANCELED|FAILED|SUCCEEDED" == *"${ProvisioningState^^}"* ]]; then
echo -e "\nDeployment $deploymentName: $ProvisioningState"
if [[ "CANCELED|FAILED" == *"${ProvisioningState^^}"* ]]; then
exit 11
else
break
fi
fi
done
fi
Наконец, чтобы просмотреть выходные данные развертывания и передать их в ADE, чтобы сделать их доступными через Azure CLI, можно выполнить следующие команды:
deploymentOutput=$(az deployment group show -g "$ADE_RESOURCE_GROUP_NAME" -n "$deploymentName" --query properties.outputs)
if [ -z "$deploymentOutput" ]; then
deploymentOutput="{}"
fi
echo "{\"outputs\": $deploymentOutput}" > $ADE_OUTPUTS
Сделать настраиваемый образ доступным для ADE
Необходимо создать образ Docker и отправить его в реестр контейнеров, чтобы сделать его доступным для использования в ADE. Вы можете создать образ с помощью интерфейса командной строки Docker или с помощью скрипта, предоставленного ADE.
Выберите соответствующую вкладку, чтобы узнать больше о каждом подходе.
- Создание образа с помощью Интерфейса командной строки Docker
- Создание образа контейнера с помощью скрипта
Прежде чем отправлять образ в реестр, убедитесь , что на компьютере установлен модуль Docker. Затем перейдите в каталог Dockerfile и выполните следующую команду:
docker build . -t {YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}
Например, если вы хотите сохранить образ в репозитории в реестре с именем customImage
и отправить с помощью версии тега 1.0.0
, выполните следующие действия:
docker build . -t {YOUR_REGISTRY}.azurecr.io/customImage:1.0.0
Отправка образа Docker в реестр
Чтобы использовать пользовательские образы, необходимо настроить общедоступный реестр образов с поддержкой извлечения анонимного образа. Таким образом среды развертывания Azure могут получить доступ к пользовательскому образу для выполнения в нашем контейнере.
Реестр контейнеров Azure — это предложение Azure, которое хранит образы контейнеров и аналогичные артефакты.
Чтобы создать реестр, который можно выполнить с помощью Azure CLI, портал Azure, команд PowerShell и многое другое, выполните одно из кратких руководств.
Чтобы настроить реестр для включения анонимного извлечения образа, выполните следующие команды в Azure CLI:
az login
az acr login -n {YOUR_REGISTRY}
az acr update -n {YOUR_REGISTRY} --public-network-enabled true
az acr update -n {YOUR_REGISTRY} --anonymous-pull-enabled true
Когда вы будете готовы отправить образ в реестр, выполните следующую команду:
docker push {YOUR_REGISTRY}.azurecr.io/{YOUR_IMAGE_LOCATION}:{YOUR_TAG}
Подключение образа к определению среды
При создании определений среды для использования пользовательского образа в развертывании измените runner
свойство в файле манифеста (environment.yaml или manifest.yaml).
runner: "{YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}"
Дополнительные сведения о создании определений среды, использующих образы контейнеров ADE для развертывания ресурсов Azure, см. в статье "Добавление и настройка определения среды".
Доступ к журналам операций и сведениям об ошибках
ADE сохраняет сведения об ошибке для неудачного развертывания в файле $ADE_ERROR_LOG в контейнере.
Чтобы устранить неполадки с неудачным развертыванием, выполните приведенные ниже действия.
Войдите на портал разработчика.
Определите среду, которая не удалось развернуть, и выберите "Просмотреть сведения".
Просмотрите сведения об ошибке в разделе сведений об ошибке.
Кроме того, azure CLI можно использовать для просмотра сведений об ошибке среды с помощью следующей команды:
az devcenter dev environment show --environment-name {YOUR_ENVIRONMENT_NAME} --project {YOUR_PROJECT_NAME}
Чтобы просмотреть журналы операций для развертывания или удаления среды, используйте Azure CLI для получения последней операции для вашей среды, а затем просмотрите журналы для этого идентификатора операции.
# Get list of operations on the environment, choose the latest operation
az devcenter dev environment list-operation --environment-name {YOUR_ENVIRONMENT_NAME} --project {YOUR_PROJECT_NAME}
# Using the latest operation ID, view the operation logs
az devcenter dev environment show-logs-by-operation --environment-name {YOUR_ENVIRONMENT_NAME} --project {YOUR_PROJECT_NAME} --operation-id {LATEST_OPERATION_ID}
Связанный контент
Кері байланыс
https://aka.ms/ContentUserFeedback.
Жақында қолжетімді болады: 2024 жыл бойы біз GitHub Issues жүйесін мазмұнға арналған кері байланыс механизмі ретінде біртіндеп қолданыстан шығарамыз және оны жаңа кері байланыс жүйесімен ауыстырамыз. Қосымша ақпаратты мұнда қараңыз:Жіберу және пікірді көру