Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функции Azure — это бессерверная служба вычислений, которая может выполнять скрипты или код в ответ на различные события, такие как HTTP-запрос, таймер или сообщение в очереди службы хранилища Azure.
В этом руководстве вы создадите функцию Azure, которая принимает HTTP-запрос и активирует развертывание группы контейнеров. В этом примере показаны основы использования Функций Azure для автоматического создания ресурсов в экземплярах контейнеров Azure. Измените или расширьте пример для более сложных сценариев или других триггеров событий.
Вы узнаете, как:
- Используйте Visual Studio Code с расширением Azure Functions, чтобы создать базовую функцию PowerShell с HTTP-триггером.
- Включите идентификационную учетную запись в функциональном приложении и предоставьте ей разрешения на создание ресурсов Azure.
- Измените и повторно опубликуйте функцию PowerShell, чтобы автоматизировать развертывание группы контейнеров с одним контейнером.
- Проверьте развертывание контейнера с триггером HTTP.
Предпосылки
См Создание первой функции в Azure с помощью Visual Studio Code для получения информации о предварительных условиях установки и использования Visual Studio Code с расширением "Функции Azure" в вашей операционной системе.
Дополнительные действия, описанные в этой статье, используют Azure PowerShell. Если вам нужно установить или обновить, см. статью "Установка Azure PowerShell и вход в Azure".
Создание базовой функции PowerShell
Выполните действия, описанные в статье "Создание первой функции PowerShell в Azure", чтобы создать функцию PowerShell с помощью шаблона триггера HTTP. Используйте имя функции Azure по умолчанию HttpTrigger. Как показано в кратком руководстве, протестируйте функцию локально и опубликуйте проект в приложении-функции в Azure. В этом примере показана базовая HTTP-триггерная функция, которая возвращает текстовую строку. В последующих шагах этой статьи вы измените функцию для создания группы контейнеров.
В этой статье предполагается, что проект публикуется с помощью имени myfunctionapp, в группе ресурсов Azure автоматически именуется в соответствии с именем приложения-функции (также myfunctionapp). Замените уникальное имя приложения-функции и имя группы ресурсов на последующих шагах.
Включить управляемое удостоверение Azure в функциональном приложении
Следующие команды включают системно назначенное управляемое удостоверение в вашем приложении функции. Хост PowerShell, на котором запущено приложение, может автоматически аутентифицироваться в Azure, используя это удостоверение, что позволяет функциям выполнять действия в службах Azure, к которым предоставлен доступ. В этом руководстве описано, как предоставить разрешения управляемого удостоверения для создания ресурсов в группе ресурсов приложения-функции.
Добавьте удостоверение в функциональное приложение.
Update-AzFunctionApp -Name myfunctionapp `
-ResourceGroupName myfunctionapp `
-IdentityType SystemAssigned
Назначьте удостоверение роли участника, заданной группе ресурсов:
$SP=(Get-AzADServicePrincipal -DisplayName myfunctionapp).Id
$RG=(Get-AzResourceGroup -Name myfunctionapp).ResourceId
New-AzRoleAssignment -ObjectId $SP -RoleDefinitionName "Contributor" -Scope $RG
Изменение функции HttpTrigger
Измените код PowerShell для функции HttpTrigger , чтобы создать группу контейнеров. В файле run.ps1
функции найдите следующий блок кода. Этот код отображает значение имени, если он передается в качестве строки запроса в URL-адресе функции:
[...]
if ($name) {
$body = "Hello, $name. This HTTP triggered function executed successfully."
}
[...]
Замените этот код на следующий пример блока. Здесь, если значение имени передается в строке запроса, оно используется для имени и создания группы контейнеров с помощью командлета New-AzContainerGroup . Обязательно замените имя группы ресурсов myfunctionapp именем группы ресурсов для приложения-функции:
[...]
if ($name) {
New-AzContainerGroup -ResourceGroupName myfunctionapp -Name $name `
-Image alpine -OsType Linux `
-Command "echo 'Hello from an Azure container instance triggered by an Azure function'" `
-RestartPolicy Never
if ($?) {
$body = "This HTTP triggered function executed successfully. Started container group $name"
}
else {
$body = "There was a problem starting the container group."
}
[...]
В этом примере создается группа контейнеров, состоящая из одного экземпляра контейнера, использующего alpine
образ. Контейнер выполняет одну echo
команду, а затем завершает работу. В реальном примере можно активировать создание одной или нескольких групп контейнеров для выполнения пакетного задания.
Локально тестируйте функциональное приложение
Убедитесь, что функция выполняется локально перед повторной публикацией проекта приложения-функции в Azure. При локальном запуске функция не создает ресурсы Azure. Однако можно протестировать поток функции с помощью и без передачи значения имени в строке запроса. См. статью "Отладка функций Azure PowerShell локально" для отладки функции.
Повторно опубликовать приложение-функцию Azure
После локального запуска функции повторно опубликуйте проект в существующее приложение-функцию в Azure.
- В Visual Studio Code откройте палитру команд. Найдите и выберите элемент
Azure Functions: Deploy to Function App...
. - Выберите текущую рабочую папку для архивирования и развертывания.
- Выберите подписку, а затем имя существующего приложения-функции (myfunctionapp). Подтвердите, что вы хотите перезаписать предыдущее развертывание.
После создания приложения-функции и применения пакета развертывания отобразится уведомление. Выберите "Просмотреть выходные данные " в этом уведомлении, чтобы просмотреть результаты создания и развертывания, включая обновленные ресурсы Azure.
Запуск функции в Azure
После успешного завершения развертывания получите URL-адрес функции. Например, используйте область "Функции" в Visual Studio Code, чтобы скопировать URL-адрес функции HttpTrigger или получить URL-адрес функции на портале Azure.
URL-адрес функции имеет форму:
https://myfunctionapp.azurewebsites.net/api/HttpTrigger
Выполнение функции без передачи имени
В качестве первого теста выполните curl
команду и передайте URL-адрес функции без добавления name
строки запроса.
curl --verbose "https://myfunctionapp.azurewebsites.net/api/HttpTrigger"
Функция возвращает код состояния 200 и текст This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response
:
[...]
> GET /api/HttpTrigger? HTTP/1.1
> Host: myfunctionapp.azurewebsites.net
> User-Agent: curl/7.64.1
> Accept: */*
>
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/1.1 200 OK
< Content-Length: 135
< Content-Type: text/plain; charset=utf-8
< Request-Context: appId=cid-v1:00001111-aaaa-2222-bbbb-3333cccc4444
< Date: Wed, 10 Jun 2020 17:50:27 GMT
<
* Connection #0 to host myfunctionapp.azurewebsites.net left intact
This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.* Closing connection 0
Запустите функцию и передайте имя группы контейнеров
Теперь выполните curl
команду и добавьте имя группы контейнеров (mycontainergroup) в качестве строки ?name=mycontainergroup
запроса:
curl --verbose "https://myfunctionapp.azurewebsites.net/api/HttpTrigger?name=mycontainergroup"
Функция возвращает код состояния 200 и запускает создание группы контейнеров:
[...]
> GET /api/HttpTrigger1?name=mycontainergroup HTTP/1.1
> Host: myfunctionapp.azurewebsites.net
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Length: 92
< Content-Type: text/plain; charset=utf-8
< Request-Context: appId=cid-v1:00001111-aaaa-2222-bbbb-3333cccc4444
< Date: Wed, 10 Jun 2020 17:54:31 GMT
<
* Connection #0 to host myfunctionapp.azurewebsites.net left intact
This HTTP triggered function executed successfully. Started container group mycontainergroup* Closing connection 0
Убедитесь, что контейнер запущен с помощью команды Get-AzContainerInstanceLog :
Get-AzContainerInstanceLog -ResourceGroupName myfunctionapp `
-ContainerGroupName mycontainergroup
Образец вывода:
Hello from an Azure container instance triggered by an Azure function
Очистка ресурсов
Если вам больше не нужен какой-либо из ресурсов, созданных в этом руководстве, можно выполнить команду [az group delete][az-group-delete], чтобы удалить группу ресурсов и все содержащиеся в ней ресурсы. Эта команда удаляет созданное приложение-функцию, запущенный контейнер и все связанные ресурсы.
az group delete --name myfunctionapp
Дальнейшие действия
В этом руководстве вы создали функцию Azure, которая принимает HTTP-запрос и активирует развертывание группы контейнеров. Вы узнали, как:
- Используйте Visual Studio Code с расширением "Функции Azure", чтобы создать базовую функцию PowerShell с активацией HTTP.
- Включите удостоверение в функциональном приложении и предоставьте ему разрешения на создание ресурсов Azure.
- Измените код функции PowerShell, чтобы автоматизировать развертывание группы контейнеров с одним контейнером.
- Проверьте развертывание контейнера с триггером HTTP.
Подробный пример запуска и мониторинга контейнерного задания см. в записи блога Event-Driven бессерверных контейнеров с помощью Функций Azure PowerShell и экземпляров контейнеров Azure и сопроводительных примеров кода.
Дополнительные сведения о создании функций Azure и публикации проекта функций см. в документации по функциям Azure .