Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье вы создадите приложение-функцию, работающее в контейнере Linux, и развернете его в среде приложений контейнеров Azure из реестра контейнеров. Развернув приложения-контейнеры, вы можете интегрировать приложения-функции в облачные микрослужбы. Дополнительные сведения см. в статье "Приложения контейнеров Azure" для размещения Функции Azure.
Important
Теперь доступен новый метод размещения функций Azure непосредственно в приложениях контейнеров Azure. См. поддержку собственных функций Azure в приложениях контейнеров Azure. Эта интеграция позволяет использовать все функции и возможности приложений контейнеров Azure. Вы также можете воспользоваться моделью программирования функций и простотой автомасштабирования, предоставляемой Функциями Azure.
Мы рекомендуем этот подход для большинства новых рабочих нагрузок. Дополнительные сведения см. в статье "Функции Azure" в приложениях контейнеров Azure.
В этой статье показано, как создавать функции, выполняемые в контейнере Linux, и развертывать контейнер в среде приложений контейнеров.
Completing this quickstart incurs a small cost of a few USD cents or less in your Azure account, which you can minimize by cleaning-up resources when you're done.
Выберите язык разработки
Во-первых, вы используете средства Функции Azure для создания кода проекта в качестве приложения-функции в контейнере Docker с помощью базового образа Linux для конкретного языка. Выберите язык в верхней части статьи.
Core Tools автоматически создает Файл Dockerfile для проекта, который использует самую актуальную версию правильного базового образа для языка функций. Следует регулярно обновлять контейнер из последнего базового образа и повторно развертывать его из обновленной версии контейнера. Дополнительные сведения см. в разделе "Создание контейнерных приложений-функций".
Prerequisites
Перед началом работы с этой статьей необходимо подготовить следующее:
Установите пакет SDK для .NET 8.0.
Установите Функции Azure Core Tools версии 4.0.5198 или более поздней версии.
- Установите Функции Azure Core Tools версии 4.x.
- Install a version of Node.js that is supported by Azure Functions.
- Установите версию Python, поддерживаемую Функции Azure.
- Установите пакет SDK для .NET 6.
Установите версию пакета разработчиков Java, который поддерживается Функции Azure.
Install Apache Maven version 3.0 or above.
- Azure CLI version 2.4 or a later version.
If you don't have an Azure subscription, create an Azure free account before you begin.
To publish the containerized function app image you create to a container registry, you need a Docker ID and Docker running on your local computer. Если у вас нет идентификатора Docker, можно создать учетную запись Docker.
Чтобы создать экземпляр реестра контейнеров, необходимо также выполнить инструкции по созданию экземпляра реестра контейнеров. Запишите полное имя сервера входа.
Создание и активация виртуальной среды
В подходящей папке выполните следующие команды, чтобы создать и активировать виртуальную среду с именем .venv
. Make sure to use one of the Python versions supported by Azure Functions.
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
In an empty folder, run the following command to generate the Functions project from a Maven archetype:
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. For more information, see Java versions.
Important
Чтобы выполнить задания из этой статьи, переменной среды JAVA_HOME
необходимо присвоить расположение установки правильной версии JDK.
Maven запрашивает значения, которые позволят завершить создание проекта развертывания. Следуйте инструкциям и укажите следующее:
Prompt | Value | Description |
---|---|---|
groupId | com.fabrikam |
Это значение уникально идентифицирует проект среди всех остальных. Оно должно соответствовать правилам именования пакетов для Java. |
artifactId | fabrikam-functions |
Это значение содержит имя JAR-файла, без номера версии. |
version | 1.0-SNAPSHOT |
Выберите значение по умолчанию. |
package | com.fabrikam.functions |
Это значение определяет пакет Java для создаваемого кода функции. Используйте значение по умолчанию. |
Введите Y
или нажмите клавишу ВВОД для подтверждения.
Maven creates the project files in a new folder named artifactId, which in this example is fabrikam-functions
.
The --docker
option generates a Dockerfile for the project, which defines a suitable container for use with Azure Functions and the selected runtime.
Перейдите в папку проекта:
cd fabrikam-functions
Добавьте функцию в проект с помощью следующей команды, где аргумент --name
— это уникальное имя функции, а аргумент --template
указывает триггер функции.
func new
создает файл кода C# в проекте.
func new --name HttpExample --template "HTTP trigger"
Добавьте функцию в проект с помощью следующей команды, где аргумент --name
— это уникальное имя функции, а аргумент --template
указывает триггер функции.
func new
creates a subfolder matching the function name that contains a configuration file named 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
значение.
Press Ctrl+C (Command+C on macOS) to stop the host.
Создание образа контейнера и проверка локально
(Optional) Examine the Dockerfile in the root of the project folder. The Dockerfile describes the required environment to run the function app on Linux. Полный список поддерживаемых базовых образов для Функций Azure можно найти на странице базового образа Функций Azure.
In the root project folder, run the docker build command, provide a name as azurefunctionsimage
, and tag as v1.0.0
. Замените <DOCKER_ID>
идентификатором вашей учетной записи Docker Hub. Эта команда отвечает за создание образа Docker для контейнера.
docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
После выполнения команды можно запустить новый контейнер локально.
To verify the build, run the image in a local container using the docker run command, replace <DOCKER_ID>
again with your Docker Hub account ID, and add the ports argument as -p 8080:80
:
docker run -p 8080:80 -it <DOCKER_ID>/azurefunctionsimage:v1.0.0
После того как образ будет запущен в локальном контейнере, перейдите по адресу http://localhost:8080/api/HttpExample
, где должно появиться такое же приветственное сообщение, как описано выше. Так как созданная вами функция, активируемая HTTP, использует анонимную авторизацию, можно вызвать функцию, выполняемую в контейнере, без получения ключа доступа. For more information, see authorization keys.
После того как образ будет запущен в локальном контейнере, перейдите по адресу http://localhost:8080/api/HttpExample?name=Functions
, где должно появиться такое же приветственное сообщение, как описано выше. Так как созданная вами функция, активируемая HTTP, использует анонимную авторизацию, можно вызвать функцию, выполняемую в контейнере, без получения ключа доступа. For more information, see authorization keys.
After verifying the function app in the container, press Ctrl+C (Command+C on macOS) to stop execution.
Публикация образа контейнера в реестре
Чтобы сделать образ контейнера доступным для развертывания в среде размещения, необходимо отправить его в реестр контейнеров. Рекомендуется использовать экземпляр Реестр контейнеров Azure и применять подключения на основе управляемых удостоверений. Центр Docker требует проверки подлинности с помощью общих секретов, что делает развертывание более уязвимыми.
Реестр контейнеров 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
Создание вспомогательных ресурсов Azure для функции
Прежде чем развернуть контейнер в Azure, необходимо создать три ресурса:
- A resource group, which is a logical container for related resources.
- A Storage account, which is used to maintain state and other information about your functions.
- Среда "Приложения контейнеров Azure" с рабочей областью Log Analytics.
- Управляемое удостоверение, назначаемое пользователем, которое позволяет приложению-функции безопасно подключаться к ресурсам Azure без использования общих секретов. Подключения как к учетной записи служба хранилища Azure, так и к экземпляру Реестр контейнеров Azure вместо этого используют проверку подлинности Microsoft Entra с удостоверением, который рекомендуется использовать для этого сценария.
Note
Docker Hub не поддерживает управляемые удостоверения.
Используйте следующие команды для создания необходимых ресурсов Azure:
При необходимости войдите в Azure:
Команда
az login
входит в учетную запись Azure. Используетсяaz account set
при наличии нескольких подписок, связанных с вашей учетной записью.Выполните следующую команду, чтобы обновить Azure CLI до последней версии:
az upgrade
Если ваша версия Azure CLI не является последней версией, начинается установка. Способ обновления зависит от операционной системы. После завершения обновления можно продолжить.
Выполните следующие команды, которые обновляют расширение "Приложения контейнеров Azure" и регистрируют пространства имен, необходимые для приложений контейнеров:
az extension add --name containerapp --upgrade -y az provider register --namespace Microsoft.Web az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights
Создайте группу ресурсов с именем
AzureFunctionsContainers-rg
.az group create --name AzureFunctionsContainers-rg --location eastus
Эта
az group create
команда создает группу ресурсов в регионе "Восточная часть США". Если вы хотите использовать регион рядом с вами, используя доступный код региона, возвращенный командой az account list-locations . Для использования настраиваемогоeastus
региона необходимо изменить последующие команды.Создайте среду приложения контейнера Azure с включенными профилями рабочей нагрузки.
az containerapp env create --name MyContainerappEnvironment --enable-workload-profiles --resource-group AzureFunctionsContainers-rg --location eastus
Выполнение команды может занять несколько минут.
Создайте учетную запись хранения общего назначения в группе ресурсов и регионе без доступа к общему ключу.
az storage account create --name <STORAGE_NAME> --location eastus --resource-group AzureFunctionsContainers-rg --sku Standard_LRS --allow-blob-public-access false --allow-shared-key-access false
Команда
az storage account create
создает учетную запись хранения, доступ к которой можно получить только с помощью удостоверений, прошедших проверку подлинности Microsoft Entra, которые были предоставлены разрешения для определенных ресурсов.В предыдущем примере замените
<STORAGE_NAME>
соответствующим именем, которое является уникальным в службе хранилища Azure. Имена хранилищ должны содержать от 3 до 24 символов и только в нижнем регистре.Standard_LRS
указывает учетную запись общего назначения, которая поддерживается Функциями.Создайте управляемое удостоверение и используйте возвращенное
principalId
для предоставления ему доступа к учетной записи хранения и разрешениям на извлечение в экземпляре реестра.principalId=$(az identity create --name <USER_IDENTITY_NAME> --resource-group AzureFunctionsContainers-rg --location eastus --query principalId -o tsv) acrId=$(az acr show --name <REGISTRY_NAME> --query id --output tsv) az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --role acrpull --scope $acrId storageId=$(az storage account show --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query 'id' -o tsv) az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --role "Storage Blob Data Owner" --scope $storageId
Команда
az identity create
создает управляемое удостоверение, назначаемое пользователем, иaz role assignment create
команды добавляют удостоверение в необходимые роли. Замените и<REGISTRY_NAME>
<USER_IDENTITY_NAME>
назовите<STORAGE_NAME>
существующий реестр контейнеров, имя управляемого удостоверения и имя учетной записи хранения соответственно. Теперь управляемое удостоверение можно использовать приложением для доступа к учетной записи хранения и Реестр контейнеров Azure без использования общих секретов.
Создание и настройка приложения-функции в Azure с помощью образа
Приложение-функция в Azure управляет выполнением функций в среде azure Container Apps. В этом разделе вы используете ресурсы Azure из предыдущего раздела, чтобы создать приложение-функцию из образа в реестре контейнеров в среде контейнеров. Вы также настраиваете новую среду с помощью строка подключения необходимой учетной записи служба хранилища Azure.
az functionapp create
Используйте команду для создания приложения-функции в новой управляемой среде, поддерживаемой приложениями контейнеров Azure. В az functionapp create
параметре --environment
указывается среда "Приложения контейнеров".
Tip
Чтобы убедиться, что ваше приложение-функция использует управляемое подключение на основе удостоверений к экземпляру --image
реестра, не устанавливайте параметр в az functionapp create
. При установке --image
полного имени образа в репозитории общие секретные учетные данные получаются из реестра и хранятся в параметрах приложения.
Сначала необходимо получить полное значение идентификатора управляемого удостоверения, назначаемого пользователем, с доступ на вытягивание в реестр, а затем использовать az functionapp create
команду для создания приложения-функции с помощью образа по умолчанию и с этим удостоверением, назначенным ему.
UAMI_RESOURCE_ID=$(az identity show --name $uami_name --resource-group $group --query id -o tsv)
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --assign-identity $UAMI_RESOURCE_ID
В az functionapp create
этом --assign-identity
случае управляемое удостоверение назначается новому приложению. Так как параметр не задан --image
, az functionapp create
приложение создается с помощью образа заполнителя.
В этом примере замените и <APP_NAME>
<STORAGE_NAME>
назовите <USER_IDENTITY_NAME>
новое приложение-функцию, а также имя учетной записи хранения и удостоверение.
Наконец, необходимо обновить linuxFxVersion
параметр сайта до полного имени образа в репозитории. Необходимо также обновить acrUseManagedIdentityCreds
параметры сайта, acrUserManagedIdentityID
чтобы управляемые удостоверения использовались при получении образа из реестра.
UAMI_RESOURCE_ID=$(az identity show --name <USER_IDENTITY_NAME> --resource-group AzureFunctionsContainers-rg --query id -o tsv)
az resource patch --resource-group AzureFunctionsContainers-rg --name <APP_NAME> --resource-type "Microsoft.Web/sites" --properties "{ \"siteConfig\": { \"linuxFxVersion\": \"DOCKER|<REGISTRY_NAME>.azurecr.io/azurefunctionsimage:v1.0.0\", \"acrUseManagedIdentityCreds\": true, \"acrUserManagedIdentityID\":\"$UAMI_RESOURCE_ID\", \"appSettings\": [{\"name\": \"DOCKER_REGISTRY_SERVER_URL\", \"value\": \"<REGISTRY_NAME>.azurecr.io\"}]}}"
Помимо требуемых az resource patch
параметров сайта, команда также обновляет DOCKER_REGISTRY_SERVER_URL
параметр приложения на URL-адрес сервера реестра.
В этом примере замените <APP_NAME>
, <REGISTRY_NAME>
а также <USER_IDENTITY_NAME>
именами приложения-функции, реестра контейнеров и удостоверений соответственно.
Указание --workload-profile-name "Consumption"
создания приложения в среде с помощью профиля рабочей нагрузки по умолчанию Consumption
, который стоит так же, как и в плане потребления контейнерных приложений. При первом создании приложения-функции он извлекает исходный образ из реестра.
Обновление параметров приложения
Чтобы узел Функций мог подключаться к учетной записи хранения по умолчанию с помощью общих секретов, необходимо заменить AzureWebJobsStorage
параметр строка подключения эквивалентным параметром, который использует управляемое удостоверение, назначаемое пользователем, для подключения к учетной записи хранения.
Удалите существующий
AzureWebJobsStorage
параметр строка подключения:az functionapp config appsettings delete --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --setting-names AzureWebJobsStorage
Команда az functionapp config appsettings delete удаляет этот параметр из приложения. Замените
<APP_NAME>
на имя приложения-функции.Добавьте эквивалентные параметры с
AzureWebJobsStorage__
префиксом, который определяет подключение управляемого удостоверения, назначаемое пользователем, к учетной записи хранения по умолчанию:clientId=$(az identity show --name <USER_IDENTITY_NAME> --resource-group AzureFunctionsContainers-rg --query 'clientId' -o tsv) az functionapp config appsettings set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage__accountName=<STORAGE_NAME> AzureWebJobsStorage__credential=managedidentity AzureWebJobsStorage__clientId=$clientId
В этом примере замените
<APP_NAME>
<USER_IDENTITY_NAME>
<STORAGE_NAME>
имя приложения-функции, имя удостоверения и имя учетной записи хранения соответственно.
На этом этапе функции выполняются в среде "Приложения контейнеров", при этом уже добавлены необходимые параметры приложения. При необходимости вы можете добавить другие параметры в приложение функций стандартным способом для функций. Дополнительные сведения см. в разделе "Использование параметров приложения".
Tip
При внесении последующих изменений в код функции необходимо перестроить контейнер, повторно опубликовать образ в реестре и обновить приложение-функцию с новой версией образа. Дополнительные сведения см. в разделе "Обновление образа в реестре"
Проверка функций в Azure
С помощью образа, развернутого в приложении-функции в Azure, теперь можно вызвать функцию через HTTP-запросы.
Выполните следующую
az functionapp function show
команду, чтобы получить URL-адрес новой функции:az functionapp function show --resource-group AzureFunctionsContainers-rg --name <APP_NAME> --function-name HttpExample --query invokeUrlTemplate
Замените
<APP_NAME>
на имя приложения-функции.
- Используйте URL-адрес, который вы только что получили для вызова конечной
HttpExample
точки функции, добавив строку?name=Functions
запроса.
- Используйте URL-адрес, который вы только что получили для вызова конечной
HttpExample
точки функции.
При переходе к этому URL-адресу в браузере должны отображаться выходные данные, аналогичные данным при локальном запуске функции.
URL-адрес запроса должен выглядеть примерно так:
https://myacafunctionapp.kindtree-796af82b.eastus.azurecontainerapps.io/api/httpexample?name=functions
https://myacafunctionapp.kindtree-796af82b.eastus.azurecontainerapps.io/api/httpexample
Очистка ресурсов
Если вы хотите продолжить работу с функцией Azure с помощью ресурсов, созданных в этой статье, можно оставить все эти ресурсы.
После завершения работы с развертыванием приложения-функции удалите AzureFunctionsContainers-rg
группу ресурсов, чтобы очистить все ресурсы в этой группе:
az group delete --name AzureFunctionsContainers-rg