Настройка образа контейнера для выполнения развертываний

Среды развертывания Azure (ADE) поддерживают модель расширяемости, которая позволяет настроить определение среды с помощью предпочтительной платформы шаблонов IaC. Вы можете хранить пользовательские образы в реестре контейнеров, например Реестр контейнеров Azure (ACR) или Docker Hub, а затем ссылаться на них в определениях среды для развертывания сред.

Из этой статьи вы узнаете, как создавать пользовательские образы контейнеров Bicep для развертывания определений среды в ADE. Вы узнаете, как использовать стандартный образ, предоставляемый корпорацией Майкрософт, или как настроить настраиваемую инфраструктуру подготовки образов с помощью платформы Bicep Infrastructure-as-Code (IaC).

Из этой статьи вы узнаете, как создавать пользовательские образы контейнеров Terraform для создания сред развертывания с помощью сред развертывания Azure (ADE). Вы узнаете, как конфигурировать пользовательский образ для развертывания инфраструктуры с помощью платформы Terraform Infrastructure-as-Code (IaC).

Из этой статьи вы узнаете, как использовать Pulumi для развертываний в ADE. Вы узнаете, как использовать стандартный образ, предоставляемый Pulumi или как настроить пользовательский образ для подготовки инфраструктуры с помощью платформы Pulumi Infrastructure-as-Code (IaC).

Предварительные условия

Используйте образы контейнеров с ADE

Вы можете использовать один из следующих подходов к использованию образов контейнеров с ADE:

  • Используйте стандартный образ контейнера для простых сценариев, используйте стандартный образ контейнера ARM-Bicep, предоставляемый ADE.
  • Создайте пользовательский образ контейнера для более сложных сценариев, создайте пользовательский образ контейнера, соответствующий вашим конкретным требованиям.

Использование стандартного образа контейнера

ADE поддерживает Azure Resource Manager (ARM) и Bicep без дополнительной настройки. Вы можете создать определение среды, которое развертывает ресурсы Azure для среды развертывания, добавив файлы шаблонов (например , azuredeploy.json и environment.yaml) в каталог. Затем ADE использует стандартный образ контейнера ARM-Bicep для создания среды развертывания.

В файле environment.yaml параметр runner указывает расположение образа контейнера, который вы хотите использовать. Чтобы использовать стандартный образ, опубликованный в Реестр артефактов Microsoft, используйте соответствующие идентификаторыrunner.

В следующем примере показан runner, который ссылается на стандартный образ контейнера ARM-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, см. в статье "Добавление и настройка определения среды".

Создание пользовательского образа контейнера

Создание пользовательского образа контейнера с помощью скрипта

Создание пользовательского образа контейнера позволяет настроить развертывания в соответствии с вашими требованиями. Вы можете создать и создать образ на основе стандартного образа ADE и отправить его в реестр контейнеров с помощью скрипта быстрого запуска, предоставленного корпорацией Майкрософт. Скрипт можно найти в репозитории сред развертывания. Чтобы использовать скрипт быстрого запуска, форкните репозиторий и запустите скрипт локально.

Скрипт создает образ контейнера и отправляет его в указанный Реестр контейнеров Azure (ACR) в хранилище "ade" с тегом "latest". Для выполнения этого скрипта необходимо ваше имя реестра и каталог для вашего пользовательского образа, установка Azure CLI и Docker Desktop, а также включение их в переменные PATH. Кроме того, у вас должны быть разрешения на отправку в указанный реестр.

Чтобы использовать скрипт быстрого запуска для быстрой сборки и отправки этого примера образа в Реестр контейнеров Azure, вам потребуется:

  • Скопируйте этот репозиторий в ваш личный аккаунт.
  • Убедитесь, что Azure CLI и приложение Docker Desktop установлены на вашем компьютере и входят в переменные PATH.
  • Убедитесь, что у вас есть разрешения на отправку образов в выбранный Реестр контейнеров Azure.

Скрипт можно вызвать с помощью следующей команды в PowerShell:

.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}'

Кроме того, если вы хотите отправить в определенный репозиторий и имя тега, можно выполнить следующее:

.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}' -Repository '{YOUR_REPOSITORY}' -Tag '{YOUR_TAG}'

Чтобы использовать образ в развертываниях среды, необходимо добавить расположение изображения в файл манифеста , чтобы подключить образ к определению среды, и вам может потребоваться настроить разрешения для ACR, чтобы сделать настраиваемый образ доступным для ADE.

Используйте образы контейнеров с ADE

Вы можете использовать один из следующих подходов к использованию образов контейнеров с ADE:

  • Создайте пользовательский образ контейнера с помощью скрипта: используйте опубликованный сценарий для создания конкретного образа Terraform.
  • Создайте пользовательский образ контейнера, используя рабочий процесс GitHub: используйте опубликованный рабочий процесс из репозитория Leveraging ADE's Extensibility Model With Terraform.
  • Создание пользовательского образа контейнера вручную: создание настроенного образа, специфичного для Terraform, вручную.

Создание пользовательского образа контейнера

Создание пользовательского образа контейнера с помощью скрипта

Создание пользовательского образа контейнера позволяет настроить развертывания в соответствии с вашими требованиями. Вы можете создать образ на основе стандартного образа ADE и отправить его в реестр контейнеров с помощью скрипта быстрого запуска, предоставленного корпорацией Майкрософт. Скрипт можно найти в репозитории Deployment Environments with Terraform. Чтобы использовать скрипт быстрого запуска, форкните репозиторий и запустите скрипт локально.

Чтобы использовать скрипт быстрого запуска для быстрой сборки и отправки этого примера образа в Реестр контейнеров Azure, вам потребуется:

  • Скопируйте этот репозиторий в ваш личный аккаунт.
  • Убедитесь, что Azure CLI и приложение Docker Desktop установлены на вашем компьютере и входят в переменные PATH.
  • Убедитесь, что у вас есть разрешения на отправку образов в выбранный Реестр контейнеров Azure.

Скрипт создает образ контейнера и отправляет его в указанный Реестр контейнеров Azure (ACR) в хранилище "ade" с тегом "latest". Для выполнения этого скрипта необходимо ваше имя реестра и каталог для вашего пользовательского образа, установка Azure CLI и Docker Desktop, а также включение их в переменные PATH. Кроме того, у вас должны быть разрешения на отправку в указанный реестр. Скрипт можно вызвать с помощью следующей команды в PowerShell:

.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}'

Кроме того, если вы хотите отправить в определенный репозиторий и имя тега, можно выполнить следующее:

.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}' -Repository '{YOUR_REPOSITORY}' -Tag '{YOUR_TAG}'

Чтобы использовать образ в развертываниях среды, необходимо добавить расположение изображения в файл манифеста , чтобы подключить образ к определению среды, и вам может потребоваться настроить разрешения для ACR, чтобы сделать настраиваемый образ доступным для ADE.

Использование стандартного образа контейнера, предоставленного Pulumi

Команда Pulumi предоставляет предварительно созданный образ для начала работы, который можно увидеть в папке Runner-Image . Этот образ доступен на Docker Hub Pulumi как pulumi/azure-deployment-environments, так что его можно использовать непосредственно в определениях окружений ADE.

Ниже приведен пример файла environment.yaml , который использует предварительно созданный образ:

name: SampleDefinition
version: 1.0.0
summary: First Pulumi-Enabled Environment
description: Deploys a Storage Account with Pulumi
runner: pulumi/azure-deployment-environments:0.1.0
templatePath: Pulumi.yaml

В папке "Среды" можно найти несколько примеров определений среды.

Создание пользовательского образа

Создание пользовательского образа контейнера позволяет настроить развертывания в соответствии с вашими требованиями. Вы можете создавать пользовательские образы на основе стандартных образов Pulumi и настраивать их в соответствии с вашими требованиями. После завершения настройки образа необходимо создать образ и отправить его в реестр контейнеров.

Чтобы создать образ, настроенный для ADE, выполните следующие действия.

  1. Создайте пользовательский образ на основе стандартного образа.
  2. Установите нужные пакеты.
  3. Настройка скриптов командной оболочки.
  4. Создайте рабочие shell-скрипты, использующие CLI Pulumi.

1. Создание пользовательского образа на основе стандартного образа

Создайте Dockerfile, включающий инструкцию FROM, указывающую на стандартный образ, размещенный в реестре артефактов Microsoft.

Ниже приведен пример инструкции FROM, ссылающейся на стандартный основной образ:

FROM mcr.microsoft.com/deployment-environments/runners/core:latest

Эта инструкция загружает последний опубликованный основной образ и использует его в качестве основы для пользовательского образа.

2. Установка обязательных пакетов

Вы можете установить CLI Pulumi в исполняемое место, чтобы в сценариях развертывания и удаления можно было его использовать.

Ниже приведен пример этого процесса, устанавливающий последнюю версию интерфейса командной строки Pulumi:

RUN apk add curl
RUN curl -fsSL https://get.pulumi.com | sh
ENV PATH="${PATH}:/root/.pulumi/bin"

В зависимости от того, какой язык программирования вы планируете использовать для программ Pulumi, может потребоваться установить одну или несколько соответствующих сред выполнения. Среда выполнения Python уже доступна в базовом образе.

Ниже приведен пример установки Node.js и TypeScript:

# install node.js, npm, and typescript
RUN apk add nodejs npm
RUN npm install typescript -g

Стандартные образы ADE основаны на образе Azure CLI и предварительно установлены пакеты ADE CLI и JQ. Дополнительные сведения о Azure CLI и пакете JQ можно узнать.

Чтобы установить любые дополнительные пакеты, которые вам нужны в образе, используйте инструкцию RUN.

Существует четыре шага по развертыванию инфраструктуры через Pulumi:

  1. pulumi login — подключение к хранилищу состояний в локальной файловой системе или в Pulumi Cloud
  2. pulumi stack select — создание или выбор стека, используемого для конкретной среды
  3. pulumi config set — передавайте параметры развертывания в качестве значений конфигурации Pulumi
  4. pulumi up — запустите развертывание, чтобы создать новую или обновить существующую инфраструктуру в Azure

Во время точки входа основного образа все существующие локальные файлы состояния извлекаются в контейнер и каталог, сохраненный в переменной $ADE_STORAGEсреды. Чтобы получить доступ к существующему файлу состояния, выполните следующие команды:

mkdir -p $ADE_STORAGE
export PULUMI_CONFIG_PASSPHRASE=
pulumi login file://$ADE_STORAGE

Чтобы войти в Pulumi Cloud, задайте маркер доступа Pulumi в качестве переменной среды и выполните следующие команды:

export PULUMI_ACCESS_TOKEN=YOUR_PULUMI_ACCESS_TOKEN
pulumi login

Все параметры, заданные для текущей среды, хранятся в переменной $ADE_OPERATION_PARAMETERS. Кроме того, выбранный регион Azure и имя группы ресурсов передаются ADE_ENVIRONMENT_LOCATION и ADE_RESOURCE_GROUP_NAME соответственно. Чтобы задать конфигурацию стека Pulumi, выполните следующие команды:

# Create or select the stack for the current environment
pulumi stack select $ADE_ENVIRONMENT_NAME --create

# Store configuration values in durable storage
export PULUMI_CONFIG_FILE=$ADE_STORAGE/Pulumi.$ADE_ENVIRONMENT_NAME.yaml

# Set the Pulumi stack config
pulumi config set azure-native:location $ADE_ENVIRONMENT_LOCATION --config-file $PULUMI_CONFIG_FILE
pulumi config set resource-group-name $ADE_RESOURCE_GROUP_NAME --config-file $PULUMI_CONFIG_FILE
echo "$ADE_OPERATION_PARAMETERS" | jq -r 'to_entries|.[]|[.key, .value] | @tsv' |
  while IFS=$'\t' read -r key value; do
    pulumi config set $key $value --config-file $PULUMI_CONFIG_FILE
  done

Кроме того, чтобы использовать права ADE для развертывания инфраструктуры в подписке, скрипту необходимо использовать управляемое удостоверение ADE при подготовке инфраструктуры с помощью поставщика Pulumi Azure Native или Azure Classic. Если для развертывания требуются специальные разрешения, например, для определенных ролей, назначьте эти разрешения идентификации типа среды проекта, которое используется для развертывания вашей среды. ADE задает соответствующие переменные среды, такие как идентификаторы клиента, арендатора и подписки в точке входа основного образа, поэтому выполните следующие команды, чтобы убедиться, что поставщик использует управляемую идентичность ADE:

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

Теперь можно выполнить pulumi up команду для выполнения развертывания:

pulumi up --refresh --yes --config-file $PULUMI_CONFIG_FILE

Во время сценария удаления можно вместо этого выполнить destroy команду, как показано в следующем примере:

pulumi destroy --refresh --yes --config-file $PULUMI_CONFIG_FILE

Наконец, чтобы сделать выходные данные развертывания загруженными и доступными при доступе к среде через Azure CLI, преобразуйте выходной объект Pulumi в формат, указанный ADE, с помощью пакета JQ. Задайте значение переменной среды $ADE_OUTPUTS, как показано в следующем примере:

stackout=$(pulumi stack output --json | jq -r 'to_entries|.[]|{(.key): {type: "string", value: (.value)}}')
echo "{\"outputs\": ${stackout:-{\}}}" > $ADE_OUTPUTS

Создание пользовательского образа

Вы можете создать образ с помощью интерфейса командной строки 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

Сделать настраиваемый образ доступным для ADE

Чтобы использовать кастомные образы, необходимо хранить их в контейнерном реестре. Вы можете использовать общедоступный реестр контейнеров или частный реестр контейнеров. Реестр контейнеров Azure (ACR) настоятельно рекомендуется благодаря тесной интеграции с ADE. Образ может быть опубликован без предоставления общедоступного анонимного доступа для вытягивания. Необходимо создать пользовательский образ контейнера и отправить его в реестр контейнеров, чтобы сделать его доступным для использования в ADE.

Кроме того, можно сохранить образ в другом реестре контейнеров, например Docker Hub, но в этом случае он должен быть общедоступным.

Внимание

Хранение образа контейнера в реестре с анонимным (неавторизованным) доступом на извлечение делает его общедоступным. Не делайте этого, если изображение содержит конфиденциальную информацию. Вместо этого сохраните его в Реестре контейнеров Azure (ACR) с отключенным анонимным доступом на вытягивание.

Чтобы использовать пользовательский образ, хранящийся в ACR, необходимо убедиться, что ADE имеет соответствующие разрешения для доступа к изображению. При создании экземпляра ACR он защищается по умолчанию и позволяет получать доступ только прошедшим проверку подлинности пользователям.

Вы можете использовать Pulumi для создания реестра контейнеров Azure и публикации образа в нем. Ознакомьтесь с примером подготовки или пользовательского образа для автономного проекта Pulumi, создающего все необходимые ресурсы в учетной записи Azure.

Выберите соответствующую вкладку, чтобы узнать больше о каждом подходе.

Использование частного реестра с защищенным доступом

По умолчанию доступ к извлечению или отправке содержимого из Реестр контейнеров Azure доступен только для пользователей, прошедших проверку подлинности. Вы можете дополнительно защитить доступ к ACR, ограничив доступ из определенных сетей и назначив определенные роли.

Чтобы создать экземпляр ACR, который можно создать с помощью Azure CLI, портала Azure, команд PowerShell и другими способами, выполните одно из кратких руководств.

Ограничение сетевого доступа

Чтобы защитить сетевой доступ к ACR, можно ограничить доступ к собственным сетям или полностью отключить доступ к общедоступной сети. Если ограничить доступ к сети, необходимо включить исключение брандмауэра разрешить доверенным службам Microsoft доступ к этому контейнерному реестру.

Чтобы отключить доступ из общедоступных сетей, выполните приведенные действия.

  1. Создайте экземпляр ACR или используйте существующий.

  2. В портале Azure перейдите к ACR, который требуется настроить.

  3. В меню слева в разделе "Параметры" выберите "Сеть".

  4. На странице "Сеть" на вкладке "Общедоступный доступ" в разделе "Доступ к общедоступной сети" выберите "Отключено".

    Снимок экрана портала Azure, показывающий параметры сети ACR, с выделенными элементами

  5. В разделе Исключения брандмауэра убедитесь, что установлен флажок "Разрешить доверенным службам Microsoft доступ к этому реестру контейнеров", и затем выберите Сохранить.

    Снимок экрана: параметры сети ACR, с выделенными параметрами

Назначьте роль AcrPull

Создание сред с помощью образов контейнеров использует инфраструктуру ADE, включая проекты и типы сред. Каждый проект имеет один или несколько типов среды проекта, которые нуждаются в доступе на чтение к образу контейнера, определяющему среду для развертывания. Чтобы получить доступ к изображениям в ACR безопасно, назначьте роль AcrPull каждому типу среды проекта.

Чтобы назначить роль AcrPull типу среды проекта:

  1. В портале Azure перейдите к ACR, который требуется настроить.

  2. В меню слева выберите контроль доступа (IAM).

  3. Выберите Добавить>Добавить назначение ролей.

  4. Назначьте следующую роль. Подробные инструкции см. в статье Назначение ролей Azure с помощью портала Microsoft Azure.

    Настройка Значение
    Роль Выберите AcrPull.
    Назначение доступа Выберите "Пользователь", "Группа" или "Субъект-служба".
    Участники Введите имя типа среды проекта, который должен получить доступ к образу в контейнере.

    Тип среды проекта отображается следующим образом:

    Снимок экрана: область

В этой конфигурации ADE использует управляемое удостоверение для PET, назначаемое системой или назначаемое пользователем.

Совет

Это назначение роли должно быть сделано для каждого типа среды проекта. Его можно автоматизировать с помощью Azure CLI.

Совет

Если ваш ACR использует управление доступом на основе атрибутов Microsoft Entra (ABAC) для прав доступа к репозиторию, возможно, потребуется назначить дополнительные роли, например Container Registry Repository Reader, для удостоверения PET. Дополнительные сведения см. в статье о разрешениях для репозитория Microsoft Entra ABAC.

Когда вы будете готовы отправить образ в реестр, выполните следующую команду:

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, см. в статье "Добавление и настройка определения среды".