Inicio rápido: Envío de eventos de registro de contenedor privado a Event Grid
Azure Event Grid es un servicio de enrutamiento de eventos completamente administrado que ofrece un consumo de eventos uniforme mediante un modelo de publicación-suscripción. En este tutorial de inicio rápido, usará la CLI de Azure para crear un registro de contenedor, suscribirse a eventos del registro e implementar una aplicación web de ejemplo para recibir los eventos. Por último, desencadenará los eventos push
y delete
de la imagen de contenedor, y verá la carga del evento en la aplicación de ejemplo.
Después de completar los pasos descritos en este artículo, los eventos enviados desde el registro de contenedor a Event Grid aparecerán en la aplicación web de ejemplo:
Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.
Requisitos previos
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Inicio rápido para Bash en Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
- Los comandos de la CLI de Azure que aparecen en este artículo tienen un formato para la shell de Bash. Si usa un shell diferente, como PowerShell o el símbolo del sistema, puede que tenga que ajustar los caracteres de continuación de línea o las líneas de asignación de variable según corresponda. En este artículo se usan variables para minimizar la edición de comandos necesaria.
Crear un grupo de recursos
Un grupo de recursos de Azure es un contenedor lógico en el que se implementan y se administran los recursos de Azure. El comando az group create siguiente crea un grupo de recursos denominado myResourceGroup en la región eastus. Si desea usar otro nombre para el grupo de recursos, establezca RESOURCE_GROUP_NAME
en otro valor.
RESOURCE_GROUP_NAME=myResourceGroup
az group create --name $RESOURCE_GROUP_NAME --location eastus
Creación de un Registro de contenedor
A continuación, implemente un registro de contenedor en el grupo de recursos con los siguientes comandos. Antes de ejecutar el comando az acr create, establezca ACR_NAME
en un nombre para el registro. El nombre debe ser único dentro de Azure y está restringido a entre 5 y 50 caracteres alfanuméricos.
ACR_NAME=<acrName>
az acr create --resource-group $RESOURCE_GROUP_NAME --name $ACR_NAME --sku Basic
Una vez creado el registro, la CLI de Azure devuelve un resultado similar al siguiente:
{
"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"
}
Creación de un punto de conexión de evento
En esta sección, se usará una plantilla de Resource Manager ubicada en un repositorio de GitHub para implementar una aplicación web precompilada de ejemplo en Azure App Service. Posteriormente, se suscribirá a los eventos de Event Grid del registro y especificará esta aplicación como punto de conexión al que se enviarán los eventos.
Para implementar la aplicación de ejemplo, establezca SITE_NAME
en un nombre único para la aplicación web y ejecute los comandos siguientes. El nombre del sitio debe ser único dentro de Azure porque forma parte del nombre de dominio completo (FQDN) de la aplicación web. En una sección posterior, navegará al FQDN de la aplicación en un explorador web para ver los eventos del registro.
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
Una vez que haya realizado correctamente la implementación (podría tardar unos minutos), abra un explorador y vaya a la aplicación web para asegurarse de que se está ejecutando:
http://<your-site-name>.azurewebsites.net
Debería ver la aplicación de ejemplo que se representa sin ningún mensaje de evento:
Habilitar el proveedor de recursos de Event Grid
Si aún no ha usado anteriormente Event Grid en su suscripción de Azure, puede que tenga que registrar el proveedor de recursos de Event Grid. Ejecute el siguiente comando para registrar el proveedor:
az provider register --namespace Microsoft.EventGrid
El registro puede tardar unos instantes en finalizar. Para comprobar el estado, ejecute el comando siguiente:
az provider show --namespace Microsoft.EventGrid --query "registrationState"
Cuando
registrationState
seaRegistered
, estará preparado para continuar.
Suscripción a eventos del registro
En Event Grid, suscríbase a un tema para indicarle a qué eventos desea realizar un seguimiento y adónde enviarlos. El siguiente comando az eventgrid event-subscription create
se suscribe al registro de contenedor que creó y especifica la dirección URL de la aplicación web como punto de conexión al que deben enviarse los eventos. Las variables de entorno que rellenó en las secciones anteriores se reutilizan aquí, por lo que no se requiere ninguna modificación.
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
Una vez completada la suscripción, debería ver una salida similar a la siguiente:
{
"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"
}
Desencadenamiento de eventos del registro
Ahora que la aplicación de ejemplo está en funcionamiento y que se suscribió al registro en Event Grid, está listo para generar algunos eventos. En esta sección, se usa ACR Tasks para compilar e insertar una imagen de contenedor en el registro. ACR Tasks es una característica de Azure Container Registry que permite crear imágenes de contenedor en la nube, sin necesidad de que el motor de Docker esté instalado en el equipo local.
Compilación e inserción de la imagen
Ejecute el siguiente comando de CLI de Azure para crear una imagen de contenedor desde el contenido de un repositorio de GitHub. De forma predeterminada, ACR Tasks inserta automáticamente una imagen compilada correctamente en el registro, lo que genera el evento ImagePushed
.
Nota
El Dockerfile usado en el ejemplo siguiente depende de una imagen de contenedor de base pública de Docker Hub. Para mejorar la confiabilidad al usar contenido público, importe y administre la imagen en un registro de contenedor privado de Azure y actualice el Dockerfile para usar la imagen base administrada de forma privada. Más información sobre cómo trabajar con imágenes públicas.
az acr build --registry $ACR_NAME --image myimage:v1 -f Dockerfile https://github.com/Azure-Samples/acr-build-helloworld-node.git#main
Debería ver una salida similar a la siguiente mientras ACR Tasks compila e inserta la imagen. El resultado de ejemplo siguiente se ha truncado por razones de espacio.
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
...
Para comprobar que la imagen compilada está en el registro, ejecute el siguiente comando para ver las etiquetas en el repositorio myimage
:
az acr repository show-tags --name $ACR_NAME --repository myimage
La etiqueta "v1" de la imagen que se ha compilado debe aparecer en el resultado, similar al siguiente:
[
"v1"
]
Eliminación de la imagen
Ahora, genere un evento ImageDeleted
eliminando la imagen con el comando az acr repository delete:
az acr repository delete --name $ACR_NAME --image myimage:v1
Debería ver un resultado similar al siguiente, que pida confirmación para eliminar el manifiesto y las imágenes asociadas:
This operation will delete the manifest 'sha256:f15fa9d0a69081ba93eee308b0e475a54fac9c682196721e294b2bc20ab23a1b' and all the following images: 'myimage:v1'.
Are you sure you want to continue? (y/n):
Visualización de eventos del registro
Ahora ha insertado una imagen en el registro y la ha eliminado. Vaya a la aplicación web de Visor de Event Grid, debería ver ambos eventos, ImageDeleted
y ImagePushed
. También puede que vea un evento de validación de suscripción generado al ejecutar el comando en la sección Suscripción a eventos del registro.
La captura de pantalla siguiente muestra la aplicación de ejemplo con los tres eventos, y el evento ImageDeleted
está expandido para mostrar sus detalles.
Felicidades. Si ve los eventos ImagePushed
y ImageDeleted
, el registro envía eventos a Event Grid, y Event Grid reenvía esos eventos al punto de conexión de la aplicación web.
Limpieza de recursos
Una vez que haya terminado con los recursos creados en este inicio rápido, puede eliminarlos todos con el siguiente comando de la CLI de Azure. Al eliminar un grupo de recursos, se eliminan de manera permanente todos los recursos que contiene.
ADVERTENCIA: Esta operación es irreversible. Asegúrese de que ya no necesita ninguno de los recursos en el grupo antes de ejecutar el comando.
az group delete --name $RESOURCE_GROUP_NAME
Esquema de eventos de Event Grid
Puede encontrar la referencia del esquema de mensajes de eventos de Azure Container Registry en la documentación de Event Grid:
Esquema de eventos de Azure Event Grid para Container Registry
Pasos siguientes
En esta guía de inicio rápido, ha implementado un registro de contenedor, compilado una imagen con ACR Tasks, la ha eliminado y ha consumido los eventos del registro desde Event Grid con una aplicación de ejemplo. A continuación, vaya al tutorial de ACR Tasks para más información acerca de la compilación de imágenes de contenedor en la nube, incluidas compilaciones automatizadas en la actualización de imagen base: