Compartir vía


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

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:

  1. Inicie sesión en Azure Portal y vaya a la instancia de API Management.
  2. En el menú de la izquierda, en Implementación e infraestructura, seleccione Puertas de enlace.
  3. Seleccione el recurso de puerta de enlace que aprovisionó y, luego, Implementación.
  4. 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 recursos myResourceGroup. En este ejemplo, la aplicación contenedora se crea con la imagen mcr.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 en true, de modo que la puerta de enlace autohospedada use el encabezado X-Forwarded-Proto para determinar el protocolo original de la solicitud.

Confirmación de que la aplicación contenedora se está ejecutando

  1. Inicie sesión en Azure Portal y navegue a la aplicación de contenedor.

  2. En la página Información de la aplicación de contenedor, compruebe que elemento contenedor Estado sea En ejecución.

  3. Envíe una solicitud de prueba al punto de conexión de estado en /status-012345678990abcdef. Por ejemplo, use un comando curl 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

  1. Inicie sesión en Azure Portal y vaya a la instancia de API Management.

  2. En el menú de la izquierda, en Implementación e infraestructura, seleccione Puertas de enlace.

  3. 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.

    Captura de pantalla del estado de la puerta de enlace en el portal.

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.

Diagrama de escenario de ejemplo con puerta de enlace autohospedada.

  1. Implemente una aplicación contenedora que hospede una API en el mismo entorno que la puerta de enlace autohospedada.
  2. Agregue una API a la instancia de API Management.
  3. 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:

  1. 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.

  2. Extraiga el código fuente en una carpeta local y cambie a la carpeta containerapps-albumapi-python-main/src.

  3. 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 .
    
  4. 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ó.

  1. Inicie sesión en Azure Portal y navegue a la aplicación de contenedor.
  2. En el menú de la izquierda, seleccione Entrada.
  3. Establezca Entrada en Habilitado.
  4. En Tráfico de entrada, seleccione Limitada al entorno de Container Apps.
  5. 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.

  1. En el portal, vaya a la instancia de API Management donde configuró la puerta de enlace autohospedada.
  2. En el menú izquierdo, seleccione API>+Agregar API.
  3. Seleccione HTTP y Completo. Escriba la siguiente configuración:
    1. Nombre para mostrar: escriba un nombre descriptivo. Ejemplo: API de álbumes.
    2. 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.
    3. Esquema de URL: seleccione HTTP(S).
    4. Sufijo de dirección URL de API: escriba un sufijo de su elección. Ejemplo: albumapi.
    5. Puertas de enlace: seleccione la puerta de enlace autohospedada que aprovisionó. Ejemplo: my-gateway.
  4. Configure otras opciones de API según su escenario. Seleccione Crear.

Agregar una operación de API

  1. En el menú izquierdo, seleccione, seleccione API>API de álbumes.
  2. Seleccione + Agregar operación.
  3. Escriba la configuración de la operación:
    1. Nombre para mostrar: escriba un nombre descriptivo para la operación. Ejemplo: Obtener álbumes.
    2. Dirección URL: seleccione Obtener y escriba /albums en el punto de conexión.
    3. 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.