Краткое руководство. Отправка событий из частного реестра контейнеров в службу "Сетка событий"
Сетка событий Azure — это полностью управляемая служба маршрутизации событий, которая обеспечивает равномерное потребление событий с помощью модели "публикация — подписка". В этом кратком руководстве вы создадите реестр контейнеров, подпишитесь на события реестра, а затем развернете пример веб-приложения для получения событий, используя Azure CLI. Наконец, вы запускаете образ контейнера push
и delete
и просматриваете полезную нагрузку события в примере приложения.
Когда вы выполните шаги в этой статье, события, отправленные из вашего реестра контейнеров в Сетку событий, будут отображаться в примере веб-приложения:
Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
Необходимые компоненты
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.
Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.
Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
- Команды Azure CLI в этой статье отформатированы для выполнения в оболочке Bash. Если вы используете другую оболочку, такую как PowerShell или командную строку, вам может потребоваться соответственно откорректировать символы продолжения строки или строки назначения переменных. В этой статье используются переменные, чтобы минимизировать требуемое изменение команд.
Создание или изменение группы ресурсов
Группа ресурсов Azure — это логический контейнер, в котором происходит развертывание ресурсов Azure и управление ими. В следующем примере с помощью команды az group create создается группа ресурсов с именем myResourceGroup в регионе eastus. Если вы хотите использовать другое имя для своей группы ресурсов, установите другое значение для RESOURCE_GROUP_NAME
.
RESOURCE_GROUP_NAME=myResourceGroup
az group create --name $RESOURCE_GROUP_NAME --location eastus
Создание реестра контейнеров
Затем разверните реестр контейнеров в группе ресурсов с помощью следующих команд. Прежде чем выполнить команду az acr create, задайте ACR_NAME
в качестве имени вашего реестра. Имя реестра должно быть уникальным в пределах Azure и содержать от 5 до 50 буквенно-цифровых символов.
ACR_NAME=<acrName>
az acr create --resource-group $RESOURCE_GROUP_NAME --name $ACR_NAME --sku Basic
После создания реестра Azure CLI выводит данные, подобные следующим.
{
"adminUserEnabled": false,
"creationDate": "2018-08-16T20:02:46.569509+00:00",
"id": "/subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myregistry",
"location": "eastus",
"loginServer": "myregistry.azurecr.io",
"name": "myregistry",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"sku": {
"name": "Basic",
"tier": "Basic"
},
"status": null,
"storageAccount": null,
"tags": {},
"type": "Microsoft.ContainerRegistry/registries"
}
Создание конечной точки событий
В этом разделе вы используете шаблон Resource Manager, расположенный в репозитории GitHub, для развертывания предварительно созданного веб-приложения в службе приложение Azure. Позже вы подпишитесь на события Сетки событий вашего реестра и укажите это приложение как конечную точку, в которую отправляются события.
Чтобы развернуть пример приложения, задайте для SITE_NAME
уникальное имя своего веб-приложения и выполните следующие команды. Имя сайта должно быть уникальным в пределах Azure, так как оно является частью полного доменного имени (FQDN) веб-приложения. В следующем разделе вы перейдете к полному доменному имени приложения в веб-браузере, чтобы просмотреть события реестра.
SITE_NAME=<your-site-name>
az deployment group create \
--resource-group $RESOURCE_GROUP_NAME \
--template-uri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/master/azuredeploy.json" \
--parameters siteName=$SITE_NAME hostingPlanName=$SITE_NAME-plan
Как только развертывание завершится (это может занять несколько минут), откройте браузер и перейдите в свое веб-приложение, чтобы убедиться, что оно запущено:
http://<your-site-name>.azurewebsites.net
Вы должны увидеть пример приложения, в котором не отображаются сообщения о событиях:
Включение поставщика ресурсов службы "Сетка событий"
Если вы еще не использовали службу "Сетка событий" в подписке Azure, вам, возможно, потребуется зарегистрировать поставщик ресурсов этой службы. Выполните следующую команду для регистрации поставщика:
az provider register --namespace Microsoft.EventGrid
Регистрация может занять некоторое время. Чтобы проверить состояние, выполните следующую команду:
az provider show --namespace Microsoft.EventGrid --query "registrationState"
Когда состояние
registrationState
изменится наRegistered
, вы сможете продолжить работу.
Подписка на события реестра
Подпишитесь на раздел, чтобы определить в Сетке событий Azure, какие события необходимо отслеживать и куда их отправлять. Следующая az eventgrid event-subscription create
команда подписывается на созданный реестр контейнеров и указывает URL-адрес веб-приложения в качестве конечной точки, в которую она должна отправлять события. Переменные среды, которые вы заполнили в предыдущих разделах, используются здесь повторно, поэтому никаких изменений не требуется.
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)
APP_ENDPOINT=https://$SITE_NAME.azurewebsites.net/api/updates
az eventgrid event-subscription create \
--name event-sub-acr \
--source-resource-id $ACR_REGISTRY_ID \
--endpoint $APP_ENDPOINT
После создания подписки вы увидите выходные данные, аналогичные следующим:
{
"destination": {
"endpointBaseUrl": "https://eventgridviewer.azurewebsites.net/api/updates",
"endpointType": "WebHook",
"endpointUrl": null
},
"filter": {
"includedEventTypes": [
"All"
],
"isSubjectCaseSensitive": null,
"subjectBeginsWith": "",
"subjectEndsWith": ""
},
"id": "/subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myregistry/providers/Microsoft.EventGrid/eventSubscriptions/event-sub-acr",
"labels": null,
"name": "event-sub-acr",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"topic": "/subscriptions/<Subscription ID>/resourceGroups/myresourcegroup/providers/microsoft.containerregistry/registries/myregistry",
"type": "Microsoft.EventGrid/eventSubscriptions"
}
Активация событий реестра
Теперь, когда пример приложения запущен и вы подписались на свой реестр с помощью Сетки событий, вы можете создать события. В этом разделе вы используете задачи ACR для создания и перемещения образа контейнера в реестр. Задачи ACR — это функция Реестра контейнеров Azure, которая позволяет создавать образы контейнеров в облаке без необходимости установки подсистемы Docker на вашем локальном компьютере.
Создание и отправка образа
Выполните следующую команду Azure CLI, чтобы создать образ контейнера из содержимого репозитория GitHub. По умолчанию задачи ACR автоматически передает успешно созданный образ в ваш реестр, который генерирует событие ImagePushed
.
Примечание.
Файл Dockerfile, используемый в следующем примере, зависит от общедоступного базового образа контейнера из Docker Hub. Чтобы повысить надежность при использовании общедоступного содержимого, импортируйте образ и управляйте им в частном реестре контейнеров Azure, а также обновите Dockerfile для использования базового образа, управляемого в частном режиме. Узнайте больше о работе с общедоступными образами.
az acr build --registry $ACR_NAME --image myimage:v1 -f Dockerfile https://github.com/Azure-Samples/acr-build-helloworld-node.git#main
Вы должны увидеть выходные данные, аналогичные приведенному ниже во время сборки задач ACR, а затем отправить образ. Следующий пример выходных данных усечен для краткости.
Sending build context to ACR...
Queued a build with build ID: aa2
Waiting for build agent...
2018/08/16 22:19:38 Using acb_vol_27a2afa6-27dc-4ae4-9e52-6d6c8b7455b2 as the home volume
2018/08/16 22:19:38 Setting up Docker configuration...
2018/08/16 22:19:39 Successfully set up Docker configuration
2018/08/16 22:19:39 Logging in to registry: myregistry.azurecr.io
2018/08/16 22:19:55 Successfully logged in
Sending build context to Docker daemon 94.72kB
Step 1/5 : FROM node:9-alpine
...
Чтобы убедиться, что встроенный образ находится в реестре, выполните следующую команду, чтобы просмотреть теги в репозитории myimage
:
az acr repository show-tags --name $ACR_NAME --repository myimage
Тег v1 созданного вами образа должен появиться в выходных данных аналогично следующему:
[
"v1"
]
Удаление образа
Теперь сгенерируйте событие ImageDeleted
, удалив образ с помощью команды az acr repository delete:
az acr repository delete --name $ACR_NAME --image myimage:v1
Вы должны увидеть выходные данные, похожие на следующие, в которых запрашивается подтверждение для удаления манифеста и связанных с ним образов:
This operation will delete the manifest 'sha256:f15fa9d0a69081ba93eee308b0e475a54fac9c682196721e294b2bc20ab23a1b' and all the following images: 'myimage:v1'.
Are you sure you want to continue? (y/n):
Просмотр событий реестра
Вы передали образ в свой реестр, а затем удалили его. Перейдите к веб-приложению средства просмотра Сетки событий, и вы увидите события ImageDeleted
и ImagePushed
. Вы также можете увидеть событие проверки подписки, сгенерированное при выполнении команды в разделе Подписка на события реестра.
На следующем снимке экрана показан пример приложения с тремя событиями, а событие ImageDeleted
расширено, чтобы показать его подробности.
Поздравляем! Если вы видите события ImagePushed
и ImageDeleted
, ваш реестр отправляет события в Сетку событий, а она отправляет эти события в конечную точку веб-приложения.
Очистка ресурсов
Когда вы закончите работу с ресурсами, созданными в этом руководстве, вы можете удалить их с помощью следующей команды Azure CLI. При удалении группы ресурсов все входящие в нее ресурсы удаляются безвозвратно.
Внимание! Это действие необратимо. Прежде чем выполнять команду, убедитесь, что вам больше не нужны какие-либо ресурсы в группе.
az group delete --name $RESOURCE_GROUP_NAME
Схема событий службы "Сетка событий Azure"
Справочник по схеме сообщения событий для Реестра контейнеров Azure можно найти в документации по Сетке событий:
Схема событий службы "Сетка событий Azure" для Реестра контейнеров
Следующие шаги
В этом кратком руководстве вы развернули реестр контейнеров, создали образ с помощью задач ACR, удалили его и использовали события реестра из Сетки событий с помощью примера приложения. Теперь перейдите к руководству по задачам ACR, чтобы узнать больше о создании образов контейнеров в облаке, включая автоматическую сборку при обновлении базового образа: