Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda/ FunctionGraph/ Guía del usuario/ Creación de una función de FunctionGraph/ Implementación de una función mediante una imagen de contenedor
Actualización más reciente 2022-11-07 GMT+08:00

Implementación de una función mediante una imagen de contenedor

Información general

Puede empaquetar y cargar directamente imágenes de contenedores. Las imágenes son cargadas e iniciadas por la plataforma y se pueden llamar de manera similar a las funciones HTTP. A diferencia del modo de carga de código anterior, puede usar un paquete de código personalizado, que es flexible y reduce los costos de migración. Puede crear imágenes personalizadas tanto para funciones de evento como para las de HTTP.

Se admiten las siguientes características:
  • Descarga de imágenes

    Las imágenes se almacenan en SWR y solo pueden ser descargadas por los usuarios con el permiso de SWR Admin. FunctionGraph llamará a la API de SWR para generar y establecer comandos de inicio de sesión temporales antes de crear instancias.

  • Definición de variables de entorno

    Se admite la configuración de cifrado y las variables de entorno. Para más detalles, consulte Configuración de variables de entorno.

  • Conexión de discos de datos externos

    Se pueden conectar con los discos de datos externos. Para más detalles, consulte Configuración del montaje en disco.

  • Facturación

    No se le facturará cuando descargue imágenes o espere a que las imágenes estén listas.

  • Instancias reservadas:

    Se admiten las instancias reservadas. Para más detalles, consulte Gestión de instancias reservadas.

Los contenedores de usuario se iniciarán usando UID 1003 y GID 1003, que son los mismos que otros tipos de funciones.

Prerrequisitos:

Ha creado una delegación con los permisos de SWR Admin haciendo referencia Configuración de permisos de delegación. Las imágenes se almacenan en SWR, y solo los usuarios con este permiso pueden invocar y extraer imágenes.

Procedimiento

  1. Inicie sesión en la consola de FunctionGraph. En el panel de navegación, seleccione Functions > Function List.
  2. En la página Function List, haga clic en Create Function en la esquina superior derecha.
  3. Seleccione Use container image. Para más detalles, consulte Tabla 1.
    Figura 1 Creación de una función mediante una imagen contenedora
    Tabla 1 Descripción del parámetro

    Parámetro

    Descripción

    *Function Type

    Seleccione un tipo de función.

    • Funciones de eventos: se activan por activadores.
    • Funciones HTTP: se activan una vez que las solicitudes HTTP se envían a URLs específicas.
      NOTA:
      • Las funciones HTTP no distinguen entre lenguajes de programación. El controlador debe estar establecido en el archivo bootstrap. Puede escribir directamente el comando startup y permitir el acceso a través del puerto 8000.
      • Las funciones HTTP solo admiten activadores APIG y APIC.
      • Para obtener más información sobre cómo usar las funciones HTTP, consulte Creación de una función HTTP.

    *Function Name

    Nombre de la función, que debe cumplir los siguientes requisitos:

    • Consta de 1 a 60 caracteres y puede contener letras, dígitos, guiones (-) y guiones bajos (_).
    • Comienza con una letra y termina con una letra o dígito.

    *Enterprise Project

    Seleccione un proyecto de empresa creado y agréguele la función. De forma predeterminada, se selecciona default.

    NOTA:

    Si EPS no está habilitado, este parámetro no estará disponible. Para obtener más información, consulte Habilitación de la función del proyecto empresarial.

    Container Image

    Introduzca una URL de imagen, es decir, la ubicación de la imagen contenedora. Puede hacer clic en View Image para ver imágenes privadas y compartidas.

    Imagen en SWR, por ejemplo, swr.myhuaweicloud.com/my_group/my_image:latest.

    Container Image Override

    • CMD: comando de inicio de contenedor. Ejemplo: /bin/sh. Si no se especifica ningún comando, se usará el punto de entrada o CMD en la configuración de imagen. Introduzca uno o más comandos separados por comas (,).
    • Args: parámetro de inicio de contenedor. Ejemplo: -args,value1. Si no se especifica ningún argumento, se usará CMD en la configuración de imagen. Introduzca uno o más argumentos separados por comas (,).
    • Working Dir: directorio de trabajo que ejecuta un contenedor. Si no se especifica ningún directorio, se utilizará el directorio en la configuración de la imagen. El directorio debe comenzar con una barra diagonal (/).
    • User ID: ID de usuario para ejecutar la imagen. Si no se especifica ningún ID de usuario, se usará el valor por defecto 1003.
    • Group ID: ID de grupo de usuario. Si no se especifica ningún ID de grupo de usuario, se usará el valor por defecto 1003.

    Agency

    Seleccione una delegación con permisos de SWR Admin. Para crear una delegación, consulte Creación de una delegación.

    • Command, Args, y Working dir pueden contener hasta 5120 caracteres.
    • Después de crear una función, puede determinar si desea habilitar la inicialización. Si la inicialización está habilitada para una función, se invocará un inicializador especificado para comenzar la función y, a continuación, se invocará un controlador para procesar solicitudes. Para más detalles, consulte Configuración de la inicialización.
    • Si la inicialización está habilitada, se accederá a 127.0.0.1:8000/init cuando se inicie la imagen por primera vez, y se accederá a 127.0.0.1:8000/invoke durante las llamadas a la API posteriores.
    • La imagen debe ser pública.
    • El puerto de ejecución de la función HTTP se establece en 8000.

Código de muestra

Lo siguiente utiliza NodeJS Express como ejemplo. Durante la inicialización de la función, el FunctionGraph utiliza el método POST para acceder a la ruta /init (opcional). Cada vez que se llama a una función, FunctionGraph utiliza el método POST para acceder a la ruta /invoke. La función obtiene context desde req.headers, obtiene event desde req.body y devuelve las estructuras de respuesta HTTP como resultado.

const express = require('express');
const app = express();
const PORT = 8000;

app.post('/init', (req, res) => {
  res.send('Hello init\n');
});

app.post('/invoke', (req, res) => {
  res.send('Hello invoke\n');
});

app.listen(PORT, () => {
  console.log(`Listening on http://localhost:${PORT}`);
});

Diferencias entre imágenes de contenedores, funciones de eventos y funciones HTTP

Tabla 2 Diferencias entre imágenes de contenedores, funciones de eventos y funciones HTTP

Artículo de comparación

Función de evento

Función HTTP

Imagen del contenedor

Lenguaje

Cualquier lenguaje

Cualquier lenguaje

Cualquier lenguaje

Modo de inicio

Inicio del proceso

Inicio del proceso

Inicio de contenedores

Entorno

Entornos especificados

Entornos especificados

Alta flexibilidad y personalización

Modo de conexión de FunctionGraph

Sirve como un cliente de HTTP

Sirve como un servidor de HTTP

Sirve como un servidor de HTTP

Modo de implementación de dependencias

Capa

Capa

En la imagen

Latencia de arranque en frío

Corto

Corto

Largo