Las imágenes de contenedor personalizadas le permiten desplegar funciones como imágenes de contenedor en Function Compute. Esto facilita la migración a bajo costo, el almacenamiento en caché por capas y la integración con CI/CD.
Beneficios
Function Compute admite imágenes de contenedor personalizadas como artefactos de entrega para las funciones:
Migración a bajo costo sin modificar el código ni recompilar archivos binarios. Los archivos de objetos compartidos (*.so) mantienen la consistencia entre los entornos de desarrollo y producción.
Simplificación de la distribución y el despliegue al empaquetar el código junto con sus dependencias.
Mayor eficiencia en la carga y extracción del código mediante el almacenamiento en caché por capas.
Aprovechamiento de herramientas de CI/CD de código abierto para compilar, compartir y versionar de forma estandarizada el código y las bibliotecas de terceros.
Interacción con Function Compute mediante HTTP.
Ejecución de imágenes no interactivas.
Funcionamiento
Antes de inicializar una instancia, Function Compute asume el rol de servicio de la función. Con ello obtiene un nombre de usuario y una contraseña temporales para extraer la imagen. Una vez extraída, inicia el contenedor con los parámetros Command y Args especificados.
La imagen de contenedor debe incluir un servidor HTTP. Function Compute escucha su servidor HTTP personalizado en el CAPort configurado. Este servidor gestiona todas las solicitudes dirigidas a Function Compute, incluidas las invocaciones de API y HTTP. Las funciones se pueden invocar de dos maneras:
Mediante una llamada a la API

Mediante una solicitud HTTP

Límites
Límite de tamaño de imagen
En ACR Personal Edition o Enterprise Edition (Basic, Standard o Premium), el tamaño máximo de la imagen sin comprimir es de 10 GB para instancias de CPU y de 15 GB para instancias aceleradas por GPU.
Repositorio de imágenes
Function Compute es compatible con imágenes provenientes de repositorios de Container Registry Personal Edition y Enterprise Edition.
ACR Economy Edition no admite la aceleración de imágenes y no es compatible con Function Compute. Utilice imágenes de instancias de ACR Personal Edition o Enterprise Edition (Basic, Standard o Premium).
Acceso a imágenes
Solo las imágenes públicas de ACR Personal Edition admiten acceso entre cuentas dentro de la misma región. El resto de las imágenes se restringe a repositorios privados de la misma cuenta y región.
Permisos de lectura y escritura de archivos en contenedores
De forma predeterminada, los contenedores se ejecutan como root (UID=0). Si se especifica un usuario en el Dockerfile, el contenedor se ejecuta con dicho usuario.
Límite de almacenamiento de la capa de escritura en contenedores
La capa de escritura del contenedor tiene un límite de 512 MB o 10 GB, según el tamaño de disco definido en la configuración avanzada de la función. Create a function.
Los datos de la capa de escritura no son persistentes y se eliminan cuando se destruye el contenedor. Para disponer de almacenamiento persistente, monte un sistema de archivos NAS o un bucket de OSS en Function Compute. Configure a NAS file system. Configure Object Storage Service. También se admiten otros servicios de almacenamiento compartido, como Tablestore.
Límite de arquitectura de imagen
Actualmente, Function Compute solo admite imágenes AMD64. En equipos basados en ARM (como las computadoras Mac con chips de Apple), especifique la plataforma de compilación como linux/amd64. Un comando de ejemplo: docker build --platform linux/amd64 -t $IMAGE_NAME ..
Ejecute docker inspect para comprobarlo. Si la salida incluye "Architecture" : "amd64", la imagen es correcta.
Requisitos del servidor HTTP
Estos requisitos aplican a las funciones de contenedor personalizado que incluyen un servidor web:
-
El servidor HTTP debe escuchar en
0.0.0.0:CAPorto en*:CAPort. Si el servicio escucha en127.0.0.1:CAPort, las solicitudes agotan el tiempo de espera y se produce el siguiente error:{ "ErrorCode":"FunctionNotStarted", "ErrorMessage":"TheCA'shttpservercannotbestarted:ContainerStartDuration:25000000000.PingCAfaileddueto:dialtcp21.0.XX.XX:9000:getsockopt:connectionrefusedLogs:2019-11-29T09:53:30.859837462ZListeningonport9000" }El puerto de escucha es 9000 de forma predeterminada y se configura mediante la propiedad
CAPort. Su servidor HTTP debe escuchar en ese mismo puerto. -
El servidor debe admitir
Connection: Keep-Alivecon un tiempo de espera de solicitud de 15 minutos o más:// For example, when using Express in Node.js. var server = app.listen(PORT, HOST); server.timeout = 0; // never timeout server.keepAliveTimeout = 0; // keepalive, never timeout El servidor HTTP debe iniciarse en un plazo máximo de 120 segundos.
Encabezados de solicitud comunes
Las imágenes de contenedor personalizadas usan los mismos encabezados de solicitud que los runtimes personalizados. Common request headers in Function Compute.
Formato de registro
Todos los registros stdout de las imágenes de contenedor personalizadas se recopilan automáticamente en el proyecto de Simple Log Service que usted especifique. Configure the logging feature.
Las imágenes de contenedor personalizadas usan el mismo formato de registro que los runtimes personalizados. Function log format.
Optimización del arranque en frío
Las imágenes de contenedor tardan más en descargarse y descomprimirse que los paquetes de código. Para reducir la latencia del arranque en frío, aplique a continuación estas recomendaciones:
Utilice una dirección de imagen VPC en la misma región que Function Compute para disminuir la latencia de extracción y mejorar la estabilidad.
Reduzca al mínimo el tamaño de la imagen. Emplee una imagen base mínima, como Alpine o Ubuntu, e incluya únicamente las dependencias necesarias.
Use instancias aprovisionadas para mantener los contenedores activos. Configure a minimum instance count elasticity policy.
En funciones seguras para hilos, habilite la concurrencia de instancia única para reducir los arranques en frío y los costos, siempre que sus recursos lo permitan. Create a web function.
Facturación
Las imágenes de contenedor personalizadas siguen el mismo modelo de facturación que los demás runtimes. Billing overview.
El tiempo de extracción de la imagen se contabiliza como uso de recursos. Se calcula desde el inicio hasta el final de la extracción. Por ejemplo, una instancia de 1,024 MB que tarda 10 segundos en extraer una imagen genera un consumo de 10 GB-seconds.
Las imágenes se almacenan en caché durante un periodo determinado, por lo que no todos los arranques en frío generan cargos de extracción.