Implementación de una puerta de enlace autohospedada de Azure API Management en Azure Container Apps
SE APLICA A: Desarrollador | Premium
En este artículo, se detallan los pasos para implementar un componente de puerta de enlace autohospedada de Azure API Management en Azure Container Apps.
Implemente una puerta de enlace autohospedada en una aplicación de contenedor para acceder a las API hospedadas en el mismo entorno de Azure Container Apps.
Requisitos previos
Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management.
Para la CLI de Azure:
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.
Nota:
Los ejemplos de comandos de la CLI de Azure en este artículo requieren la extensión
containerapp
de la CLI de Azure. Si no ha utilizado comandosaz containerapp
, la extensión se instala dinámicamente cuando ejecuta el primer comandoaz containerapp
. Obtenga más información sobre las extensiones de la CLI de Azure.
Aprovisionamiento de una puerta de enlace en la instancia de API Management
Antes de aprovisionar una puerta de enlace autohospedada, aprovisione un recurso de puerta de enlace en la instancia de Azure API Management. Para ver los pasos, consulte Aprovisionamiento de una puerta de enlace autohospedada. En los ejemplos de este artículo, la puerta de enlace se denomina my-gateway
.
Obtener la configuración de implementación de puerta de enlace de API Management
Para implementar la puerta de enlace, necesita los valores de Token y de Punto de conexión de configuración. Puede encontrarlos en Azure Portal:
- Inicie sesión en Azure Portal y vaya a la instancia de API Management.
- En el menú de la izquierda, en Implementación e infraestructura, seleccione Puertas de enlace.
- Seleccione el recurso de puerta de enlace que aprovisionó y, luego, Implementación.
- Copie los valores de Token y de Punto de configuración.
Implementación de la puerta de enlace autohospedada en una aplicación de contenedor
Puede implementar la imagen de contenedor de la puerta de enlace autohospedada en una aplicación de contenedor con Azure Portal, la CLI de Azure u otras herramientas. En este artículo, se muestran los pasos con la CLI de Azure.
Creación de un entorno de Container Apps
En primer lugar, cree un entorno de Container Apps con el comando az containerapp env create:
#!/bin/bash
az containerapp env create --name my-environment --resource-group myResourceGroup \
--location centralus
Este comando crea lo siguiente:
- Un entorno de aplicación de contenedor denominado
my-environment
, que se usa para agrupar aplicaciones de contenedor. - Un área de trabajo de Log Analytics
Creación de una aplicación de contenedor para la puerta de enlace autohospedada
Para implementar la puerta de enlace autohospedada en una aplicación contenedora en el entorno, ejecute el comando az containerapp create.
Primero, establezca variables para los valores de Token y Punto de conexión de configuración del recurso de puerta de enlace de API Management.
#!/bin/bash
endpoint="<API Management configuration endpoint>"
token="<API Management gateway token>"
Cree la app de contenedor con el comando az containerapp create
:
#!/bin/bash
az containerapp create --name my-gateway \
--resource-group myResourceGroup --environment 'my-environment' \
--image "mcr.microsoft.com/azure-api-management/gateway:2.5.0" \
--target-port 8080 --ingress external \
--min-replicas 1 --max-replicas 3 \
--env-vars "config.service.endpoint"="$endpoint" "config.service.auth"="$token" "net.server.http.forwarded.proto.enabled"="true"
Este comando crea lo siguiente:
Una aplicación de contenedor denominada
my-gateway
en el grupo de recursosmyResourceGroup
. En este ejemplo, la aplicación contenedora se crea con la imagenmcr.microsoft.com/azure-api-management/gateway:2.5.0
. Obtenga más información sobre las imágenes de contenedor de la puerta de enlace autohospedada.Compatibilidad con la entrada externa a la aplicación contenedora en el puerto 8080.
Un mínimo de 1 y un máximo de 3 réplicas de la aplicación contenedora.
Una conexión de la puerta de enlace autohospedada a la instancia de API Management mediante valores de configuración pasados en variables de entorno. Para obtener más detalles, consulte los valores de configuración del contenedor de la puerta de enlace autohospedada.
Nota:
La entrada de Azure Container Apps reenvía las solicitudes HTTPS a la aplicación contenedora de la puerta de enlace autohospedada como HTTP. Aquí, la variable de entorno
net.server.http.forwarded.proto.enabled
se establece entrue
, de modo que la puerta de enlace autohospedada use el encabezadoX-Forwarded-Proto
para determinar el protocolo original de la solicitud.
Confirmación de que la aplicación contenedora se está ejecutando
Inicie sesión en Azure Portal y navegue a la aplicación de contenedor.
En la página Información de la aplicación de contenedor, compruebe que elemento contenedor Estado sea En ejecución.
Envíe una solicitud de prueba al punto de conexión de estado en
/status-012345678990abcdef
. Por ejemplo, use un comandocurl
similar al siguiente.curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/status-012345678990abcdef
Una solicitud correcta muestra una respuesta
200 OK
.
Sugerencia
Con la CLI, también puede ejecutar el comando az containerapp show para comprobar el estado de la aplicación contenedora.
Confirmación de que la puerta de enlace está en buen estado
Inicie sesión en Azure Portal y vaya a la instancia de API Management.
En el menú de la izquierda, en Implementación e infraestructura, seleccione Puertas de enlace.
En la página Información general, compruebe el Estado de la puerta de enlace. Si la puerta de enlace está en buen estado, notifica latidos de puerta de enlace normales.
Escenario de ejemplo
En el ejemplo siguiente, se muestra cómo puede usar la puerta de enlace autohospedada para acceder a una API hospedada en una aplicación contenedora en el mismo entorno. Como se muestra en el diagrama siguiente, se puede acceder a la puerta de enlace autohospedada desde Internet, mientras que la API solo es accesible dentro del entorno de Container Apps.
- Implemente una aplicación contenedora que hospede una API en el mismo entorno que la puerta de enlace autohospedada.
- Agregue una API a la instancia de API Management.
- Llame a la API mediante la puerta de enlace autohospedada.
Implemente una aplicación contenedora que hospede una API en el mismo entorno que la puerta de enlace autohospedada.
Por ejemplo, implemente una API de álbum de música de ejemplo en una aplicación de contenedor. Para obtener acceso a la API posteriormente mediante la puerta de enlace autohospedada, implemente la API en el mismo entorno que la puerta de enlace autohospedada. Para ver los pasos detallados y la información sobre los recursos usados en este ejemplo, consulte Inicio rápido: Compilación e implementación desde código fuente local en Azure Container Apps. Siga los pasos abreviados:
Descargue el código fuente de Python en la máquina local. Si lo prefiere, descargue el código fuente en otro idioma de su elección.
Extraiga el código fuente en una carpeta local y cambie a la carpeta containerapps-albumapi-python-main/src.
Ejecute el siguiente comando az containerapp up para implementar la API en una aplicación contenedora en el mismo entorno que la puerta de enlace autohospedada. Tenga en cuenta el
.
al final del comando, que especifica la carpeta actual como origen para la aplicación contenedora.#!/bin/bash az containerapp up --name albums-api \ --resource-group myResourceGroup --location centralus \ --environment my-environment --source .
Confirme que la aplicación contenedora se está ejecutando y es accesible externamente en el FQDN devuelto en la salida del comando. De forma predeterminada, la API es accesible en el punto de conexión
/albums
. Ejemplo:https://albums-api.happyvalley-abcd1234.centralus.azurecontainerapps.io/albums/albums
.
Configuración de la API para la entrada interna
Ahora, actualice la aplicación contenedora que hospeda la API de ejemplo para habilitar la entrada solo en el entorno del contenedor. Esta configuración restringe el acceso a la API solo desde la puerta de enlace autohospedada que implementó.
- Inicie sesión en Azure Portal y navegue a la aplicación de contenedor.
- En el menú de la izquierda, seleccione Entrada.
- Establezca Entrada en Habilitado.
- En Tráfico de entrada, seleccione Limitada al entorno de Container Apps.
- Revise los valores de las opciones restantes y seleccione Guardar.
Agregue una API a la instancia de API Management.
A continuación, se muestran los pasos de ejemplo para agregar una API a la instancia de API Management y configurar un back-end de API. Para obtener más información, consulte cómo agregar una API a Azure API Management.
Agregue una API a la instancia de API Management.
- En el portal, vaya a la instancia de API Management donde configuró la puerta de enlace autohospedada.
- En el menú izquierdo, seleccione API>+Agregar API.
- Seleccione HTTP y Completo. Escriba la siguiente configuración:
- Nombre para mostrar: escriba un nombre descriptivo. Ejemplo: API de álbumes.
- Dirección URL del servicio web: escriba el FQDN interno de la aplicación contenedora que hospeda la API. Ejemplo:
http://albums-api.internal.happyvalley-abcd1234.centralus.azurecontainerapps.io
. - Esquema de URL: seleccione HTTP(S).
- Sufijo de dirección URL de API: escriba un sufijo de su elección. Ejemplo: albumapi.
- Puertas de enlace: seleccione la puerta de enlace autohospedada que aprovisionó. Ejemplo: my-gateway.
- Configure otras opciones de API según su escenario. Seleccione Crear.
Agregar una operación de API
- En el menú izquierdo, seleccione, seleccione API>API de álbumes.
- Seleccione + Agregar operación.
- Escriba la configuración de la operación:
- Nombre para mostrar: escriba un nombre descriptivo para la operación. Ejemplo: Obtener álbumes.
- Dirección URL: seleccione Obtener y escriba
/albums
en el punto de conexión. - Seleccione Guardar.
Llame a la API mediante la puerta de enlace autohospedada.
Llame a la API mediante el FQDN de la puerta de enlace autohospedada que se ejecuta en la aplicación contenedora. Busque el FQDN en la página Información general de la aplicación de contenedor en Azure Portal o ejecute el comando az containerapp show
siguiente.
#!/bin/bash
az containerapp show --name my-gateway --resource-group myResourceGroup \
--query "properties.configuration.ingress.fqdn" --output tsv
Por ejemplo, ejecute el comando curl
siguiente para llamar a la API en el punto de conexión /albumapi/albums
. Si la API requiere una clave de suscripción, pase una clave de suscripción válida para la instancia de API Management como encabezado en la solicitud:
curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/albumapi/albums -H "Ocp-Apim-Subscription-Key: <subscription-key>"
Cuando la prueba se realiza correctamente, el back-end responde con un código de respuesta HTTP correcto y algunos datos.
HTTP/1.1 200 OK
content-length: 751
content-type: application/json
date: Wed, 28 Feb 2024 22:45:09 GMT
[...]
[{"id":1,"title":"You, Me and an App Id","artist":"Daprize","price":10.99,"image_url":"https://aka.ms/albums-daprlogo"},{"id":2,"title":"Seven Revision Army","artist":"The Blue-Green Stripes","price":13.99,"image_url":"https://aka.ms/albums-containerappslogo"},{"id":3,"title":"Scale It Up","artist":"KEDA Club","price":13.99,"image_url":"https://aka.ms/albums-kedalogo"},{"id":4,"title":"Lost in Translation","artist":"MegaDNS","price":12.99,"image_url":"https://aka.ms/albums-envoylogo"},{"id":5,"title":"Lock Down Your Love","artist":"V is for VNET","price":12.99,"image_url":"https://aka.ms/albums-vnetlogo"},{"id":6,"title":"Sweet Container O' Mine","artist":"Guns N Probeses","price":14.99,"image_url":"https://aka.ms/albums-containerappslogo"}]
Sugerencia
Si ha habilitado el registro de la API en Application Insights, puede consultar los registros para ver las solicitudes y las respuestas.