Создание приложения-функции в локальном контейнере Linux
В этой статье показано, как использовать средства Функции Azure Core, чтобы создать первую функцию в контейнере Linux на локальном компьютере, проверить функцию локально, а затем опубликовать контейнерную функцию в реестре контейнеров. Из реестра контейнеров можно легко развернуть контейнерные функции в Azure.
Полный пример развертывания контейнерных функций в Azure, включающих действия, описанные в этой статье, см. в одной из следующих статей:
- Создание первого контейнерного Функции Azure в приложениях контейнеров Azure
- Создание первого контейнеризованного Функции Azure
- Создание первого контейнерного Функции Azure в Azure Arc (предварительная версия)
Вы также можете создать приложение-функцию в портал Azure с помощью существующего контейнерного приложения-функции из реестра контейнеров. Дополнительные сведения см. в статье портал Azure создании с помощью контейнеров.
Выберите язык разработки
Во-первых, вы используете средства Функции Azure для создания кода проекта в качестве приложения-функции в контейнере Docker с помощью базового образа Linux для конкретного языка. Выберите язык в верхней части статьи.
Core Tools автоматически создает Файл Dockerfile для проекта, который использует самую актуальную версию правильного базового образа для языка функций. Следует регулярно обновлять контейнер из последнего базового образа и повторно развертывать его из обновленной версии контейнера. Дополнительные сведения см. в разделе "Создание контейнерных приложений-функций".
Необходимые компоненты
Перед началом работы с этой статьей необходимо подготовить следующее:
Установите пакет SDK для .NET 8.0.
Установите Функции Azure Core Tools версии 4.0.5198 или более поздней версии.
- Установите Функции Azure Core Tools версии 4.x.
- Установите версию Node.js, поддерживаемую Функции Azure.
- Установите версию Python, поддерживаемую Функции Azure.
- Установите пакет SDK для .NET 6.
Установите версию пакета разработчиков Java, который поддерживается Функции Azure.
Установите Apache Maven версии 3.0 или более поздней.
- Azure CLI версии 2.4 или более поздней версии.
Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
Чтобы опубликовать образ приложения-функции, создаваемого в реестре контейнеров, вам потребуется идентификатор Docker и Docker , запущенный на локальном компьютере. Если у вас нет идентификатора Docker, можно создать учетную запись Docker.
Чтобы создать экземпляр реестра контейнеров, необходимо также выполнить инструкции по созданию экземпляра реестра контейнеров. Запишите полное имя сервера входа.
Создание и активация виртуальной среды
В подходящей папке выполните следующие команды, чтобы создать и активировать виртуальную среду с именем .venv
. Обязательно используйте одну из версий Python, поддерживаемых Функции Azure.
python -m venv .venv
source .venv/bin/activate
Если пакет venv не установлен Python для вашего дистрибутива Linux, выполните следующую команду:
sudo apt-get install python3-venv
Все последующие команды будут выполняться в этой активированной виртуальной среде.
Создание и тестирование локального проекта службы "Функции"
Чтобы создать проект приложения-функции в текущей папке, в терминале или в командной строке выполните следующую команду для текущей папки:
func init --worker-runtime dotnet-isolated --docker
func init --worker-runtime node --language javascript --docker
func init --worker-runtime powershell --docker
func init --worker-runtime python --docker
func init --worker-runtime node --language typescript --docker
В пустой папке выполните следующую команду, чтобы создать проект Функций из архетипа Maven:
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8 -Ddocker
Параметр -DjavaVersion
указывает среде выполнения Функций Azure, какую версию Java следует использовать. Используйте -DjavaVersion=11
, чтобы функции выполнялись на Java 11. Если не указать параметр -DjavaVersion
, Maven будет по умолчанию использовать Java 8. Дополнительные сведения см. в разделе Версии Java.
Внимание
Чтобы выполнить задания из этой статьи, переменной среды JAVA_HOME
необходимо присвоить расположение установки правильной версии JDK.
Maven запрашивает значения, которые позволят завершить создание проекта развертывания. Следуйте инструкциям и укажите следующее:
Prompt | значение | Описание |
---|---|---|
groupId | com.fabrikam |
Это значение уникально идентифицирует проект среди всех остальных. Оно должно соответствовать правилам именования пакетов для Java. |
artifactId | fabrikam-functions |
Это значение содержит имя JAR-файла, без номера версии. |
version | 1.0-SNAPSHOT |
Выберите значение по умолчанию. |
package | com.fabrikam.functions |
Это значение определяет пакет Java для создаваемого кода функции. Используйте значение по умолчанию. |
Введите Y
или нажмите клавишу ВВОД для подтверждения.
Maven создаст файлы проекта в новой папке с именем artifactId, то есть fabrikam-functions
в нашем примере.
Параметр --docker
создает Файл Dockerfile для проекта, который определяет подходящий контейнер для использования с Функции Azure и выбранной средой выполнения.
Перейдите в папку проекта:
cd fabrikam-functions
Добавьте функцию в проект с помощью следующей команды, где аргумент --name
— это уникальное имя функции, а аргумент --template
указывает триггер функции. func new
создает файл кода C# в проекте.
func new --name HttpExample --template "HTTP trigger"
Добавьте функцию в проект с помощью следующей команды, где аргумент --name
— это уникальное имя функции, а аргумент --template
указывает триггер функции. Командаfunc new
создает вложенную папку с именем функции. Эта папка содержит файл конфигурации с именем function.json.
func new --name HttpExample --template "HTTP trigger"
Чтобы протестировать функцию локально, запустите локальный узел среды выполнения Функций Azure в корневой папке проекта.
func start
func start
npm install
npm start
mvn clean package
mvn azure-functions:run
После отображения конечной точки, записанной HttpExample
в выходные данные, перейдите к этой конечной точке. В выходных данных ответа должно появиться приветственное сообщение.
После просмотра конечной точки, записанной HttpExample
в выходные данные, перейдите в раздел http://localhost:7071/api/HttpExample?name=Functions
. Браузер должен отобразить приветственное сообщение, которое возвращает Functions
, передаваемое параметру запроса name
значение.
Нажмите клавиши CTRL+C (Command+C в macOS), чтобы остановить узел.
Создание образа контейнера и проверка локально
(Необязательно.) Изучите файл Dockerfile в корневой папке проекта. В Dockerfile описана среда, необходимая для запуска приложения-функции на платформе Linux. Полный список поддерживаемых базовых образов для Функций Azure можно найти на странице базового образа Функций Azure.
В корневой папке проекта выполните команду docker build, указав имя azurefunctionsimage
и тег v1.0.0
. Замените <DOCKER_ID>
идентификатором вашей учетной записи Docker Hub. Эта команда отвечает за создание образа Docker для контейнера.
docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
После выполнения команды можно запустить новый контейнер локально.
Чтобы проверить сборку, запустите образ в локальном контейнере с помощью команды запуска Docker, замените <DOCKER_ID>
еще раз идентификатором учетной записи Docker Hub и добавьте аргумент портов следующим образом -p 8080:80
:
docker run -p 8080:80 -it <DOCKER_ID>/azurefunctionsimage:v1.0.0
После того как образ будет запущен в локальном контейнере, перейдите по адресу http://localhost:8080/api/HttpExample
, где должно появиться такое же приветственное сообщение, как описано выше. Так как созданная вами функция, активируемая HTTP, использует анонимную авторизацию, можно вызвать функцию, выполняемую в контейнере, без получения ключа доступа. Дополнительные сведения см. в разделе Ключи авторизации.
После того как образ будет запущен в локальном контейнере, перейдите по адресу http://localhost:8080/api/HttpExample?name=Functions
, где должно появиться такое же приветственное сообщение, как описано выше. Так как созданная вами функция, активируемая HTTP, использует анонимную авторизацию, можно вызвать функцию, выполняемую в контейнере, без получения ключа доступа. Дополнительные сведения см. в разделе Ключи авторизации.
После проверки приложения-функции в контейнере нажмите клавиши CTRL+C (Command+C в macOS), чтобы остановить выполнение.
Публикация образа контейнера в реестре
Чтобы сделать образ контейнера доступным для развертывания в среде размещения, необходимо отправить его в реестр контейнеров.
Реестр контейнеров Azure — это служба частного реестра для создания, хранения и обслуживания образов контейнеров и связанных с ними артефактов. Для публикации контейнеров в службах Azure следует использовать службу частного реестра.
Используйте эту команду для входа в экземпляр реестра с помощью текущих учетных данных Azure:
az acr login --name <REGISTRY_NAME>
В предыдущей команде замените
<REGISTRY_NAME>
имя экземпляра реестра контейнеров.Используйте эту команду, чтобы пометить образ с полным именем сервера входа в реестр:
docker tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
Замените
<LOGIN_SERVER>
полное имя сервера входа реестра и<DOCKER_ID>
идентификатором Docker.Используйте эту команду, чтобы отправить контейнер в экземпляр реестра:
docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0