Работа с контейнерами и Функции Azure

В этой статье демонстрируется поддержка, которая Функции Azure обеспечивает работу с контейнерными приложениями-функциями, работающими в среде приложений контейнеров Azure. Дополнительные сведения см. в статье "Приложения контейнеров Azure" для размещения Функции Azure.

В этой статье демонстрируется поддержка, которая Функции Azure обеспечивает работу с приложениями-функциями, работающими в контейнерах Linux.

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

Если вы хотите перейти прямо в систему, в следующей статье показано, как создать первую функцию, запущенную в контейнере Linux, и развернуть образ из реестра контейнеров в поддерживаемой службе размещения Azure:

Создание первого контейнерного Функции Azure в приложениях контейнеров Azure

Дополнительные сведения о развертывании в приложениях контейнеров Azure см. в статье "Приложения контейнеров Azure" для размещения Функции Azure.

Создание контейнерных приложений-функций

Функции упрощают развертывание и запуск приложений-функций в виде контейнеров Linux, которые создаются и поддерживаются. Функции поддерживают набор базовых образов для конкретного языка, которые можно использовать при создании контейнерных приложений-функций.

Внимание

При создании собственных контейнеров необходимо сохранить базовый образ контейнера обновленным до последнего поддерживаемого базового образа. Поддерживаемые базовые образы для Функции Azure относятся к языку и находятся в репозитории базовых образов Функции Azure.

Команда функций привержена публикации ежемесячных обновлений для этих базовых образов. Регулярные обновления включают последние незначительные обновления версий и исправления безопасности для среды выполнения функций и языков. Необходимо регулярно обновлять контейнер из последнего базового образа и повторно развертывать обновленную версию контейнера.

Полный пример создания локального контейнерного приложения-функции из командной строки и публикации образа в реестре контейнеров см. в статье "Создание приложения-функции в локальном контейнере".

Создание Файла Dockerfile

Средства функций предоставляют параметр Docker, который создает Dockerfile с проектом кода функций. Этот файл можно использовать с Docker для создания функций в контейнере, наследуемом от правильного базового образа (языка и версии).

Способ создания Файла Dockerfile зависит от способа создания проекта.

  • При создании проекта "Функции" с помощью Функции Azure Основных инструментов включите --docker параметр при выполнении func init команды, как показано в следующем примере:

    func init --docker
    
  • Вы также можете добавить Dockerfile в существующий проект с помощью --docker-only параметра при выполнении func init команды в существующей папке проекта, как показано в следующем примере:

    func init --docker-only
    

Полный пример см. в разделе "Создание приложения-функции" в локальном контейнере.

Создание приложения-функции в контейнере

С помощью файла Dockerfile, созданного функциями в проекте кода, можно использовать Docker для создания контейнерного приложения-функции на локальном компьютере. docker build Следующая команда создает образ контейнерных функций из проекта в локальном каталоге:

docker build --tag <DOCKER_ID>/<IMAGE_NAME>:v1.0.0 .

Пример создания контейнера см. в статье о сборке образа контейнера и локальной проверке.

Обновление образа в реестре

При внесении изменений в проект кода функций или необходимости обновления до последнего базового образа необходимо перестроить контейнер локально и повторно опубликовать обновленный образ в выбранном реестре контейнеров. Следующая команда перестроит образ из корневой папки с обновленным номером версии и отправляет его в реестр:

az acr build --registry <REGISTRY_NAME> --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.1 .

Замените <REGISTRY_NAME> экземпляр реестра контейнеров и <LOGIN_SERVER> именем сервера входа.

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

az functionapp config container set --image <IMAGE_NAME> --registry-password <SECURE_PASSWORD>--registry-username <USER_NAME> --name <APP_NAME> --resource-group <RESOURCE_GROUP>

В этом примере <IMAGE_NAME> полное имя нового образа с версией. Частные реестры требуют предоставления имени пользователя и пароля. Безопасно храните эти учетные данные.

Кроме того, следует рассмотреть возможность непрерывного развертывания.

портал Azure создавать с помощью контейнеров

При создании приложения-функции в портал Azure можно развернуть приложение-функцию из образа в реестре контейнеров. Сведения о создании контейнерного приложения-функции в реестре контейнеров см. в статье "Создание приложения-функции в контейнере".

Ниже описано, как создать и развернуть существующее контейнерное приложение-функцию из реестра контейнеров.

  1. На домашней странице или в меню портала Azure выберите Создать ресурс.

  2. На странице Создать щелкните Вычислительные ресурсы>Приложение-функция.

  3. В разделе "Выбор варианта размещения" выберите "Премиум", чтобы выбрать план>"Премиум".

    Это создает приложение-функцию, размещенное Функции Azure в плане Premium, которое поддерживает динамическое масштабирование. Вы также можете запустить план Служба приложений, но в этом виде выделенного плана необходимо управлять масштабированием приложения-функции.

  4. На странице Основные сведения используйте параметры приложения-функции как указано в таблице ниже:

    Параметр Предлагаемое значение Description
    Подписка Ваша подписка Подписка, в которой создается приложение-функция.
    Группа ресурсов myResourceGroup Имя новой группы ресурсов, в которой создается приложение-функция. Необходимо создать группу ресурсов, так как при создании приложений-функций в существующей группе ресурсов существуют известные ограничения.
    Имя приложения-функции Уникальное имя* Имя, которое идентифицирует ваше новое приложение-функцию. Допустимые символы: a-z (без учета регистра), 0-9 и -.
    Вы хотите развернуть код или образ контейнера? Образ контейнера Разверните контейнерное приложение-функцию из реестра. Сведения о создании приложения-функции в реестре см. в статье "Создание приложения-функции" в локальном контейнере.
    Регион Предпочтительный регион Выберите регион, ближайший к вам или к другим службам, к которым могут обращаться функции.
    План Linux Новый план (по умолчанию) Создает новый план Premium для размещения приложения. Вы также можете выбрать существующий план уровня "Премиум".
    Тарифный план Эластичный Премиум EP1 EP1 является самым доступным планом. Если вам нужно выбрать более крупный план.
    Избыточность между зонами Выключено Эта функция не нужна в непроизводном приложении.

    *Имя приложения должно быть глобально уникальным среди всех Функции Azure размещенных приложений.

  5. Примите параметры по умолчанию для создания новой учетной записи хранения на вкладке хранилища и нового экземпляра Application Insights на вкладке "Мониторинг ". Вы также можете использовать существующую учетную запись хранения или экземпляр Application Insights.

  6. Выберите Просмотр и создание , чтобы просмотреть выбранные параметры конфигурации приложения.

  7. На странице "Просмотр и создание" просмотрите параметры и выберите "Создать", чтобы подготовить приложение-функцию с помощью базового образа по умолчанию.

  8. После создания ресурса приложения-функции выберите "Перейти к ресурсу " и на странице приложения-функции выберите центр развертывания.

  9. В центре развертывания вы можете подключить реестр контейнеров в качестве источника образа. Вы также можете включить GitHub Actions или Azure Pipelines для более надежного непрерывного развертывания обновлений в контейнере в реестре.

портал Azure создавать с помощью контейнеров

При создании приложения-функции, размещенного в контейнерах, в портал Azure можно развернуть приложение-функцию из образа в реестре контейнеров. Сведения о создании контейнерного приложения-функции в реестре контейнеров см. в статье "Создание приложения-функции в контейнере".

Ниже описано, как создать и развернуть существующее контейнерное приложение-функцию из реестра контейнеров.

  1. На домашней странице или в меню портала Azure выберите Создать ресурс.

  2. На странице Создать щелкните Вычислительные ресурсы>Приложение-функция.

  3. В разделе "Выбор варианта размещения" выберите среду> "Приложения контейнеров".

  4. На странице Основные сведения используйте параметры приложения-функции как указано в таблице ниже:

    Параметр Предлагаемое значение Description
    Подписка Ваша подписка Подписка, в которой создается приложение-функция.
    Группа ресурсов myResourceGroup Имя новой группы ресурсов, в которой создается приложение-функция. Необходимо создать группу ресурсов, так как при создании приложений-функций в существующей группе ресурсов существуют известные ограничения.
    Имя приложения-функции Уникальное имя* Имя, которое идентифицирует ваше новое приложение-функцию. Допустимые символы: a-z (без учета регистра), 0-9 и -.
    Регион Предпочтительный регион Выберите регион, ближайший к вам или к другим службам, к которым могут обращаться функции.

    *Имя приложения должно быть уникальным в среде приложений контейнеров Azure.

  5. По-прежнему на странице "Основные сведения" примите предлагаемую новую среду для среды "Приложения контейнеров Azure". Чтобы свести к минимуму затраты, новая среда по умолчанию создается в разделе "Потребление и выделенное " с профилем рабочей нагрузки по умолчанию и без избыточности зоны. Дополнительные сведения см. в статье "Приложения контейнеров Azure" для размещения Функции Azure.

    Вы также можете использовать существующую среду приложений контейнеров. Чтобы создать настраиваемую среду, выберите "Создать". На странице "Создание среды приложений контейнеров" можно добавить профили рабочих нагрузок, отличные от стандартных рабочих нагрузок, или включить избыточность зоны. Дополнительные сведения о средах см . в средах azure Container Apps.

  6. Выберите вкладку "Развертывание" и снимите флажок "Использовать образ быстрого запуска". В противном случае приложение-функция развертывается из базового образа для языка приложения-функции.

  7. Выберите тип изображения, общедоступный или закрытый. Выберите private, если вы используете Реестр контейнеров Azure или другой частный реестр. Укажите имя образа, включая префикс реестра. Если вы используете частный реестр, укажите учетные данные проверки подлинности реестра образов. Общедоступный параметр поддерживает только изображения, хранящиеся публично в Docker Hub.

  8. В разделе "Выделение ресурсов контейнера" выберите требуемое количество ядер ЦП и доступной памяти. Если в вашей среде добавлены другие профили рабочей нагрузки, можно выбрать профиль рабочей нагрузки, отличный от него. Выбор на этой странице влияет на стоимость размещения приложения. Ознакомьтесь со страницей цен на приложения-контейнеры , чтобы оценить потенциальные затраты.

  9. Выберите Просмотр и создание , чтобы просмотреть выбранные параметры конфигурации приложения.

  10. На странице "Проверка и создание" просмотрите параметры, а затем выберите "Создать", чтобы подготовить приложение-функцию и развернуть образ контейнера из реестра.

Работа с изображениями в Функции Azure

При развертывании контейнера приложения-функции из реестра Функции сохраняет сведения о исходном образе.

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

  • az functionapp config container show: возвращает сведения о образе, используемом для развертывания.

  • az functionapp config container set: измените параметры реестра или обновите образ, используемый для развертывания, как показано в предыдущем примере.

Профили рабочей нагрузки приложений контейнеров

Профили рабочей нагрузки — это функция приложений-контейнеров, которые позволяют лучше управлять ресурсами развертывания. Функции Azure в приложениях контейнеров Azure также поддерживает профили рабочей нагрузки. Дополнительные сведения см. в разделе "Профили рабочей нагрузки" в приложениях контейнеров Azure.

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

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

Профили рабочей нагрузки можно включить при создании среды приложения контейнера. Пример см. в разделе "Создание приложения контейнера" в профиле.

В среде можно добавлять, изменять и удалять профили. Пример см. в разделе "Добавление профилей".

При создании контейнерного приложения-функции в среде с включенными профилями рабочей нагрузки также следует указать профиль, в котором выполняется выполнение. Профиль указывается с помощью --workload-profile-name параметра az functionapp create команды, как в следующем примере:

az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime <LANGUAGE_STACK> --image <IMAGE_URI> --workload-profile-name <PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE> 

В команде az functionapp create параметр указывает среду "Приложения контейнеров", --environment а --image параметр указывает образ, используемый для приложения-функции. В следующем примере замените <STORAGE_NAME> именем, использованным в предыдущем разделе для учетной записи хранения. Кроме того, замените <APP_NAME> глобально уникальное имя, соответствующее вам.

Чтобы задать ресурсы, выделенные вашему приложению, замените <CPU_COUNT> требуемым количеством виртуальных ЦП не менее 0,5 до максимального допустимого профиля. Для <MEMORY_SIZE>этого выберите объем выделенной памяти от 1 ГБ до максимального допустимого профиля.

С помощью az functionapp container set команды можно управлять выделенными ресурсами и профилем рабочей нагрузки, используемыми приложением.

az functionapp container set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --workload-profile-name  <PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE> 

Параметры приложения

Функции Azure позволяет работать с параметрами приложения для контейнерных приложений-функций стандартным способом. Дополнительные сведения см. в разделе "Использование параметров приложения".

Включение непрерывного развертывания в Azure

При размещении контейнерного приложения-функции в приложениях контейнеров Azure существует два способа настройки непрерывного развертывания из репозитория исходного кода:

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

Включение непрерывного развертывания в Azure

Внимание

Развертывание на основе веб-перехватчика в настоящее время не поддерживается при запуске контейнера в плане Elastic Premium. Если необходимо использовать метод непрерывного развертывания, описанный в этом разделе, вместо этого разверните контейнер в плане Служба приложений. При запуске в плане Elastic Premium необходимо вручную перезапустить приложение при каждом обновлении контейнера в репозитории.

Вы также можете настроить непрерывное развертывание из репозитория исходного кода с помощью Azure Pipelines или GitHub Actions.

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

  1. Используйте следующую команду, чтобы включить непрерывное развертывание и получить URL-адрес веб-перехватчика:

    az functionapp deployment container config --enable-cd --query CI_CD_URL --output tsv --name <APP_NAME> --resource-group AzureFunctionsContainers-rg
    

    Команда az functionapp deployment container config включает непрерывное развертывание и возвращает URL-адрес веб-перехватчика развертывания. Этот URL-адрес можно получить в любое время с помощью az functionapp deployment container show-cd-url команды.

    Как и ранее, необходимо заменить <APP_NAME> на имя приложения-функции.

  2. Скопируйте URL-адрес веб-перехватчика развертывания в буфер обмена.

  3. Откройте Docker Hub, войдите и выберите Репозитории на панели навигации. Найдите и выберите образ, перейдите на вкладку Веб-перехватчики, укажите имя веб-перехватчика, вставьте URL-адрес в поле URL-адрес веб перехватчика, а затем выберите Создать.

    Снимок экрана: добавление веб-перехватчика в окне Docker Hub.

  4. С помощью набора веб-перехватчика служба Функции Azure повторно развертывает образ при каждом обновлении в Docker Hub.

Включение SSH-подключений

SSH обеспечивает безопасный обмен данными между клиентом и контейнером. При включенном протоколе SSH вы можете подключиться к контейнеру с помощью расширенных инструментов Службы приложений (KUDU). Чтобы упростить подключение к контейнеру по SSH, служба "Функции Azure" предоставляет базовый образ, в котором уже включен протокол SSH. Вам необходимо только изменить Dockerfile, а затем перестроить и повторно развернуть образ. Затем вы можете подключиться к контейнеру с помощью Дополнительных инструментов (Kudu).

  1. В Dockerfile добавьте строку -appservice к базовому изображению в FROM инструкции, как показано в следующем примере:

    FROM mcr.microsoft.com/azure-functions/node:4-node18-appservice
    

    В этом примере используется версия SSH базового образа Node.js версии 18. Посетите репозиторий базовых образов Функции Azure, чтобы убедиться, что вы используете последнюю версию базового образа с поддержкой SSH.

  2. Перестройте образ с помощью docker build команды, замените <DOCKER_ID> идентификатор учетной записи Docker Hub, как показано в следующем примере.

    docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
    
  3. Отправьте обновленный образ в Docker Hub (это должно занять значительно меньше времени, чем первая принудительная отправка). Так будут отправлены только обновленные сегменты образа.

    docker push <DOCKER_ID>/azurefunctionsimage:v1.0.0
    
  4. Функции Azure автоматически повторно развертывает образ в приложении-функции; процесс выполняется менее чем за минуту.

  5. В браузере откройте https://<app_name>.scm.azurewebsites.net/, заменив <app_name> уникальным именем. Это URL-адрес конечной точки Дополнительных инструментов (Kudu) для контейнера приложения-функции.

  6. Войдите в свою учетную запись Azure, а затем выберите вкладку SSH, чтобы создать подключение к контейнеру. Если Azure все еще обновляет образ контейнера, подключение может занять некоторое время.

  7. После установки подключения к контейнеру выполните команду top, чтобы просмотреть выполняющиеся в данный момент процессы.

    Снимок экрана: основная команда Linux, выполняемая в рамках сеанса SSH.

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