Настройка образа контейнера для выполнения развертываний с помощью Terraform
В этой статье вы узнаете, как создавать пользовательские образы контейнеров Terraform для развертывания определений среды в средах развертывания Azure (ADE). Вы узнаете, как настроить пользовательский образ для подготовки инфраструктуры с помощью платформы Terraform Infrastructure-as-Code (IaC).
Определение среды состоит по крайней мере из двух файлов: файла шаблона, например main.tf, и файла манифеста с именем environment.yaml. Контейнер используется для развертывания определения среды, использующего Terraform.
Модель расширяемости ADE позволяет создавать пользовательские образы контейнеров для использования с определениями среды. Используя модель расширяемости, вы можете создавать собственные пользовательские образы контейнеров и хранить их в реестре контейнеров, например DockerHub. Затем вы можете ссылаться на эти образы в определениях среды для развертывания сред.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Среды развертывания Azure, настроенные в подписке Azure.
- Чтобы настроить ADE, выполните краткое руководство. Настройка сред развертывания Azure.
Создание пользовательского образа контейнера Terraform
Создание пользовательского образа контейнера позволяет настроить развертывания в соответствии с вашими требованиями.
После завершения настройки образа необходимо создать образ и отправить его в реестр контейнеров.
Создание и настройка образа контейнера с помощью 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
Эта инструкция извлекает последний опубликованный основной образ и делает его основой для пользовательского образа.
Установка Terraform в Dockerfile
Интерфейс командной строки Terraform можно установить в исполняемое расположение, чтобы его можно было использовать в сценариях развертывания и удаления.
Вот пример этого процесса, установка версии 1.7.5 интерфейса командной строки Terraform:
RUN wget -O terraform.zip https://releases.hashicorp.com/terraform/1.7.5/terraform_1.7.5_linux_amd64.zip
RUN unzip terraform.zip && rm terraform.zip
RUN mv terraform /usr/bin/terraform
Совет
Вы можете получить URL-адрес скачивания для предпочтительной версии интерфейса командной строки Terraform из выпусков Hashicorp.
Образы 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 {} \;
Создание скриптов оболочки операций для использования интерфейса командной строки Terraform
Существует три шага для развертывания инфраструктуры с помощью Terraform:
terraform init
— инициализирует интерфейс командной строки Terraform для выполнения действий в рабочем каталоге.terraform plan
— разрабатывает план на основе входящих файлов инфраструктуры Terraform и переменных, а также всех существующих файлов состояния и разрабатывает шаги, необходимые для создания или обновления инфраструктуры, указанной в файлах .tf .terraform apply
— применяет план для создания новой или обновления существующей инфраструктуры в Azure
Во время точки входа основного образа все существующие файлы состояния извлекаются в контейнер и каталог, сохраненный в переменной $ADE_STORAGE
среды. Кроме того, все параметры, заданные для текущей среды, хранящейся в переменной $ADE_OPERATION_PARAMETERS
. Чтобы получить доступ к существующему файлу состояния и задать переменные в файле .tfvars.json , выполните следующие команды:
EnvironmentState="$ADE_STORAGE/environment.tfstate"
EnvironmentPlan="/environment.tfplan"
EnvironmentVars="/environment.tfvars.json"
echo "$ADE_OPERATION_PARAMETERS" > $EnvironmentVars
Кроме того, чтобы использовать привилегии ADE для развертывания инфраструктуры в подписке, скрипту необходимо использовать управляемое удостоверение службы (MSI) при подготовке инфраструктуры с помощью поставщика AzureRM Terraform. Если в развертывании требуются специальные разрешения для завершения развертывания, например для определенных ролей, назначьте эти разрешения удостоверениям типа среды проекта, используемым для развертывания среды. ADE задает соответствующие переменные среды, такие как идентификаторы клиента, клиента и подписки в точке входа основного образа, поэтому выполните следующие команды, чтобы убедиться, что поставщик использует ADE MSI:
export ARM_USE_MSI=true
export ARM_CLIENT_ID=$ADE_CLIENT_ID
export ARM_TENANT_ID=$ADE_TENANT_ID
export ARM_SUBSCRIPTION_ID=$ADE_SUBSCRIPTION_ID
Если в шаблоне есть другие переменные, которые не указаны в параметрах среды, задайте переменные среды с помощью префикса TF_VAR. Список предоставленных переменных среды ADE предоставляется справочник по переменным среды развертывания Azure. Примером этих команд может быть;
export TF_VAR_resource_group_name=$ADE_RESOURCE_GROUP_NAME
export TF_VAR_ade_env_name=$ADE_ENVIRONMENT_NAME
export TF_VAR_env_name=$ADE_ENVIRONMENT_NAME
export TF_VAR_ade_subscription=$ADE_SUBSCRIPTION_ID
export TF_VAR_ade_location=$ADE_ENVIRONMENT_LOCATION
export TF_VAR_ade_environment_type=$ADE_ENVIRONMENT_TYPE
Теперь можно выполнить шаги, перечисленные ранее для инициализации интерфейса командной строки Terraform, создания плана подготовки инфраструктуры и применения плана во время скрипта развертывания:
terraform init
terraform plan -no-color -compact-warnings -refresh=true -lock=true -state=$EnvironmentState -out=$EnvironmentPlan -var-file="$EnvironmentVars"
terraform apply -no-color -compact-warnings -auto-approve -lock=true -state=$EnvironmentState $EnvironmentPlan
Во время скрипта удаления можно добавить destroy
флаг в создание плана для удаления существующих ресурсов, как показано в следующем примере:
terraform init
terraform plan -no-color -compact-warnings -destroy -refresh=true -lock=true -state=$EnvironmentState -out=$EnvironmentPlan -var-file="$EnvironmentVars"
terraform apply -no-color -compact-warnings -auto-approve -lock=true -state=$EnvironmentState $EnvironmentPlan
Наконец, чтобы сделать выходные данные развертывания отправленными и доступными при доступе к среде через Azure CLI, преобразуйте выходной объект из Terraform в указанный ADE формат через пакет JQ. Задайте значение переменной среды $ADE_OUTPUTS, как показано в следующем примере:
tfOutputs=$(terraform output -state=$EnvironmentState -json)
# Convert Terraform output format to ADE format.
tfOutputs=$(jq 'walk(if type == "object" then
if .type == "bool" then .type = "boolean"
elif .type == "list" then .type = "array"
elif .type == "map" then .type = "object"
elif .type == "set" then .type = "array"
elif (.type | type) == "array" then
if .type[0] == "tuple" then .type = "array"
elif .type[0] == "object" then .type = "object"
elif .type[0] == "set" then .type = "array"
else .
end
else .
end
else .
end)' <<< "$tfOutputs")
echo "{\"outputs\": $tfOutputs}" > $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 сохраняет сведения об ошибке для неудачного развертывания в файле $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 как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по