Todos los productos
Search
Centro de documentos

Function Compute:Crear una función de contenedor personalizado

Última actualización: Sep 21, 2026

Si los entornos de ejecución integrados en Function Compute no satisfacen sus requisitos de negocio, cree una función de contenedor personalizado desde la consola de Function Compute o mediante la herramienta Serverless Devs.

Notas de uso

  • Para crear una función de contenedor personalizado en Function Compute, debe usar una imagen de Alibaba Cloud Container Registry que pertenezca a la misma región y cuenta de Alibaba Cloud. Si compila imágenes en computadoras con Apple silicon u otras arquitecturas basadas en ARM, especifique la plataforma de compilación como linux/amd64. Ejemplo: docker build --platform linux/amd64 -t $IMAGE_NAME ..

  • Function Compute resuelve los nombres de dominio de las imágenes de Alibaba Cloud Container Registry Enterprise Edition mediante la resolución predeterminada de la virtual private cloud (VPC) configurada o las direcciones IP de acceso que Alibaba Cloud DNS PrivateZone resuelve automáticamente.

    • Escenario 1: si el identificador Default Resolution no aparece junto a ninguna dirección IP en la página Access Control de la instancia, Alibaba Cloud DNS PrivateZone resuelve automáticamente todas las direcciones IP de la lista Access IP. En este caso, se puede utilizar cualquier configuración de VPC.

      image

    • Escenario 2: si en la página Access Control de una instancia de Container Registry (ACR) Enterprise Edition la lista Access IP contiene una dirección IP marcada con Default Resolution, dicha dirección corresponde a la resolución predeterminada de una VPC. Seleccione esa configuración de VPC, tal como se muestra en la siguiente figura.

      image

  • Cuando utiliza una instancia Enterprise Edition, solo puede seleccionar imágenes no aceleradas. Cada vez que actualiza la configuración de imagen de una función, el sistema genera una nueva imagen acelerada basada en la última imagen original seleccionada y sobrescribe cualquier imagen acelerada existente. No elimine las imágenes originales ni las aceleradas, ya que esto afectaría las invocaciones de la función.

  • Asegúrese de actualizar la función de inmediato si cambia la imagen configurada para ella. De lo contrario, las invocaciones fallarán.

    • Asegúrese de que la imagen original exista. De lo contrario, la función entrará en estado Failed y no se podrá invocar. Aunque Function Compute almacena la función en caché para reducir los tiempos de arranque en frío, las invocaciones siguen requiriendo la imagen original.

    • Asegúrese de que la imagen utilizada en su función no se sobrescriba con un digest diferente. Si esto ocurre, vuelva a desplegar la función con la información de imagen más reciente. Function Compute registra tanto la etiqueta como el digest de la versión de imagen que seleccione durante la creación y actualización de la función. Si la etiqueta de la imagen se actualiza en otro lugar para apuntar a un nuevo digest, las invocaciones fallarán.

Requisitos previos

  • Container Registry

    • Create an Enterprise Edition instance

      Nota
      • La edición Personal de Alibaba Cloud Container Registry (ACR) está diseñada para desarrolladores individuales. Se ofrece como prueba gratuita con cuotas durante la beta pública. Esta edición no incluye un acuerdo de nivel de servicio (SLA) ni compensación por daños, y tiene límites de uso. Para obtener más información sobre dichos límites, consulte las notas de uso en Create a Personal Edition instance.

  • Serverless Devs (obligatorio solo si crea la función con Serverless Devs)

    Install and configure Serverless Devs

Crear una función en la consola

  1. Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, elija Function Management > Functions.

  2. En la barra de navegación superior, seleccione una región. En la página Functions, haga clic en Create Function.

  3. En el cuadro de diálogo que aparece, seleccione el tipo GPU Function según las indicaciones y su escenario real, y luego haga clic en Create GPU Function.

  4. En la página Create GPU Function, configure los siguientes parámetros y haga clic en Create.

    • Basic Configurations: introduzca un Function Name. El nombre debe ser único dentro de la misma cuenta y región, y cumplir con las convenciones de nomenclatura.

    • Scaling Policy: seleccione un tipo de instancia. No es posible usar instancias aprovisionadas e instancias bajo demanda al mismo tiempo, y el tipo de instancia no se puede modificar después de crear la función.

      • Instancias bajo demanda

        Elemento de configuración

        Descripción

        Ejemplo

        Instance Type

        Seleccione On-demand Instance. Las instancias escalan según el volumen de solicitudes y se liberan cuando no hay solicitudes. La facturación se realiza por uso.

        On-demand Instance

        GPU Card Type

        Seleccione un tipo de tarjeta GPU. Las especificaciones disponibles varían según el tipo (Instance types and specifications).

        Serie Ada

        Specifications

        Establezca las especificaciones de GPU Memory, vCPU, Memory y Disk. La facturación se calcula multiplicando la especificación por la duración (Billing overview).

        Nota
        • GPU Memory: 48 GB

        • vCPU: 8 vCPU

        • Memory: 64 GB

        • Disk: 512 MB (no se factura, Function Compute proporciona una cuota gratuita de 10 GB de espacio en disco)

        Minimum Instances

        Para cargas de trabajo sensibles a la latencia, seleccione Elastic Instance y establezca el mínimo en 1 o más para reducir la latencia de arranque en frío.

        Nota

        Si no hay ninguna política elástica configurada o activa, el recuento mínimo de instancias toma este valor de forma predeterminada.

        Cuando existen varias políticas elásticas activas, el valor más alto de Minimum Number Of Instances se convierte en el Minimum Number Of Instances efectivo.

        How is the current minimum number of instances calculated?

        1

        Idle Mode

        Permite que una sola instancia de GPU procese varias solicitudes de forma simultánea. Configure concurrency per instance.

      • Instancias aprovisionadas

        Elemento de configuración

        Descripción

        Ejemplo

        Instance Type

        Seleccione Provisioned Instance. Las instancias provienen de un pool de recursos adquirido previamente.

        Ideal para costos predecibles, baja latencia y alta utilización.

        Provisioned Instance

        Provisioned Resource Pool

        Un pool de instancias adquirido previamente para la función. Si la capacidad es insuficiente, haga clic en Scale-out en la columna Actions. Provisioned resource pools (subscription).

        • Provisioned Resource Pool: fc-pool-****

        • GPU Card Type: Ada

        Specifications

        Establezca las especificaciones de GPU Memory, vCPU, Memory y Disk. La facturación se calcula multiplicando la especificación por la duración (Billing overview).

        Nota

        GPU Memory: 48 GB

        vCPU: 8 vCPU

        Memory: 64 GB

        Disk: 512 MB (no se factura, Function Compute proporciona una cuota gratuita de 10 GB de espacio en disco)

        Number Of Provisioned Instances

        Asigne instancias a partir de la capacidad disponible del pool.

        1

        Concurrency Per Instance

        Permite que una sola instancia de GPU procese varias solicitudes de forma simultánea. Configure concurrency per instance.

        20

    • Concurrency Per Instance: configure el entorno de ejecución de la función y los ajustes relacionados con el código.

      Parámetro

      Descripción

      Ejemplo

      Code

      • Use Sample Images : seleccione una imagen de ejemplo proporcionada por Function Compute para desplegar rápidamente una función de contenedor personalizado. Debe elegir una imagen de destino en la lista situada bajo el parámetro Runtime.

      • Use Container Registry Images : haga clic en Select ACR Image bajo el parámetro Container Image. En el panel Select Container Image , seleccione la Container Registry Instance y el ACR Image Repository existentes. Luego, busque la imagen de destino en la lista inferior y haga clic en Select en la columna Actions.

      Nota
      • No es posible crear una función utilizando una imagen pública de una instancia de Alibaba Cloud Container Registry que pertenezca a otra cuenta.

      • Asegúrese de actualizar la función de inmediato si cambia la imagen configurada para ella. De lo contrario, las invocaciones fallarán. Para obtener más información, consulte Usage notes.

      • Cuando utiliza una instancia Enterprise Edition, solo puede seleccionar imágenes no aceleradas. No elimine las imágenes originales ni las aceleradas, ya que esto afectaría las invocaciones de la función. Para obtener más información, consulte Usage notes.

      • Las instancias Enterprise Edition no admiten direcciones de imagen con formato de nombre de dominio personalizado.

      • No es posible crear funciones utilizando imágenes de repositorios donde la aceleración de imágenes esté habilitada en index-only mode. Esto aplica a las instancias de Container Registry Enterprise Edition (Standard y Advanced).

      • Después de que Alibaba Cloud Container Registry introdujera la función index-only mode, ya no es posible crear funciones con imágenes de repositorios recién creados en instancias Enterprise Edition (Basic) si la aceleración de imágenes está habilitada. Sin embargo, aún puede utilizar imágenes de repositorios acelerados existentes en estas instancias. Para obtener más información sobre index-only mode, consulte Load container images on demand.

      Custom Container

      Custom Container

      Seleccione la imagen de destino.

      SpringBoot Web App Sample Image

      Container Image

      El comando de inicio del programa. Si no se especifica, Function Compute utiliza de forma predeterminada Entrypoint o CMD de la imagen.

      Ninguna

      Startup Command

      El puerto en el que escucha el servidor HTTP de su código.

      9000

      Listening Port

      Establezca el periodo de tiempo de espera. El Execution Timeout Period es de 60 segundos de forma predeterminada, con un máximo de 86,400 segundos.

      60

    • Execution Timeout Period: precalienta el modelo para eliminar la latencia de arranque en frío de la primera solicitud en escenarios de inference de IA.

      Elemento de configuración

      Descripción

      Ejemplo

      Instance Prefetch

      Instance Prefetch

      Ejecuta un script o llama a una interfaz para cargar el modelo después de que la instancia inicie, pero antes de que procese solicitudes.

      Configure the instance lifecycle.

      Enabled

      Instance Prefetch

      Tiempo de espera para el hook Initializer.

      60

      Timeout

      Dos tipos de hook: Prefetch Program Type y Execute Instruction.

      Execute Instruction

      Invoke Code

      La instrucción que se va a ejecutar. Admite shells personalizados: /bin/bash, /bin/sh, /bin/csh, /bin/zsh. Asegúrese de que el entorno de ejecución sea compatible con el shell seleccionado.

      Callback method implementation

    • Permissions, Network, and Storage: configure el rol de ejecución de la función, la red y el montaje de almacenamiento.

      Elemento de configuración

      Descripción

      Ejemplo

      Instruction Content

      Function Compute asume este rol de Resource Access Management (RAM) para generar credenciales temporales que permiten acceder a los recursos de Alibaba Cloud y las pasa al código. Para obtener más información, consulte Use a function role to access other cloud services.

      mytestrole

      Execution Role

      Permite que la función acceda a los recursos dentro de una VPC. Para obtener más información, consulte Configure network.

      Enable

      VPC Access

      Obligatorio cuando VPC Access se establece en Yes. Cree una nueva VPC o seleccione el ID de VPC al que desea acceder en la lista desplegable.

      fc.auto.create.vpc.1632317****

      VPC

      Obligatorio cuando VPC Access se establece en Yes. Cree un nuevo vSwitch o seleccione un ID de vSwitch en la lista desplegable.

      fc.auto.create.vswitch.vpc-bp1p8248****

      vSwitch

      Obligatorio cuando VPC Access se establece en Yes. Cree un nuevo security group o seleccione uno en la lista desplegable.

      fc.auto.create.SecurityGroup.vsw-bp15ftbbbbd****

      Allow Default NIC to Access Internet

      Seleccione Yes o No para permitir que la función acceda a internet a través de la interfaz de red predeterminada.

      Importante

      Cuando utilice la función de dirección IP pública fija, debe deshabilitar Allow Default NIC to Access Internet. De lo contrario, la dirección IP pública fija configurada no surtirá efecto. Para obtener más información, consulte Configure a static public IP address.

      Enable

      Security Group

      Monte Configure a NAS file system en la función para almacenar de forma persistente datos compartidos entre funciones, como modelos utilizados por varias funciones de inference.

      Si selecciona Automatic Configuration, el sistema utiliza de forma predeterminada el sistema de archivos network-attached storage (NAS) de uso general existente llamado Alibaba-Fc-V3-Component-Generated. Si no existe ningún sistema de archivos NAS válido en la cuenta actual, el sistema crea uno automáticamente.

      Enable

      NAS Mounting

      Monte Object Storage Service (OSS) en la función para almacenar de forma persistente registros, archivos de negocio y otros elementos. Para obtener más información, consulte Configure an OSS mount.

      Enable

    • Logging and Tracing

      Elemento de configuración

      Descripción

      Ejemplo

      Log Feature

      Configure esta opción para conservar los registros de ejecución de la función en Log Service, lo cual facilita la depuración de código, la resolución de problemas y el análisis de datos. Para obtener más información, consulte Configure the logging feature.

      • Automatic Configuration: selecciona automáticamente el Log Project cuyo nombre comienza con serverless-<region_id>.

        Solo se crea un Log Project de este tipo por región. Si el sistema detecta un Log Project existente en la región actual, lo utiliza directamente.

      • Custom Configuration: debe especificar manualmente el OSS Mounting y el Log Project de destino.

      Enable

    • Logstore

      Elemento de configuración

      Descripción

      Ejemplo

      Other Configurations

      Seleccione la zona horaria de la función. Después de establecerla, se añade automáticamente una variable de entorno TZ con el valor de la zona horaria de destino.

      UTC

      Timezone

      Establezca Configure tags para la función con el fin de gestionar grupos. Debe definir tanto la clave como el valor de la etiqueta.

      key : value

      Tags

      Seleccione el Configure resource groups de la función para gestionarla por grupo.

      Default Resource Group

      Resource Group

      Utilice variables de entorno para ajustar el comportamiento de la función sin modificar el código. Para obtener más información, consulte Configure environment variables.

      {
          "BUCKET_NAME": "MY_BUCKET",
          "TABLE_NAME": "MY_TABLE"
      }

    Una vez creada la función, puede consultarla y actualizarla en la página Functions .

Nota

Cuando actualice la función, puede cambiar el puerto de escucha configurado, pero no añadir ni quitar puertos. Si configuró un puerto de escucha al crear la función y no especifica ninguno durante la actualización, el sistema conserva la configuración original del puerto.

Crear una función con Serverless Devs

Utilice Serverless Devs para compilar y enviar imágenes de contenedor, así como para desplegar funciones con un solo flujo de comandos.

  1. Ejecute el siguiente comando para inicializar un proyecto.

    sudo s init

    Siga las instrucciones en pantalla para seleccionar una cuenta de Alibaba Cloud, una plantilla de contenedor personalizado y un lenguaje (en este ejemplo se usa Node.js). Luego, establezca el nombre del proyecto, seleccione una región de despliegue e introduzca su imagen de ACR.

  2. Ejecute el siguiente comando para acceder al directorio del proyecto.

    cd start-fc3-custom-container-nodejs
  3. Edite el archivo s.yaml. Para obtener más información sobre los parámetros del archivo YAML, consulte Especificación de YAML.

    El siguiente código muestra un ejemplo.

    En este ejemplo, image hace referencia a su imagen de Alibaba Cloud Container Registry. Reemplace <your namespace>, <your image> y <your tag> con su espacio de nombres real, el nombre del repositorio de imágenes y la etiqueta de la imagen. Si ya ingresó la información correcta de la imagen cuando inicializó el proyecto en Paso 1, no es necesario modificarla aquí.

    edition: 3.0.0
    name: hello-world-app
    # access specifies the key configuration required by the current application:
    # For key configuration, see: https://www.serverless-devs.com/serverless-devs/command/config
    # For key usage order, see: https://www.serverless-devs.com/serverless-devs/tool#key-usage-order-and-specifications
    access: "default"
    
    vars: # Global variables
      region: "cn-hangzhou"
    
    resources:
      hello_world:
        # To perform operations only on the hello_world business module, append hello_world to the command line. For example:
        # To build only hello_world: s hello_world build
        # If you run s build directly without specifying hello_world, the tool will build all business modules at the same level as hello_world in the current YAML file (if there are other sibling modules, such as the commented next_function below) in a certain order
        component: fc3 # Component name
        actions: # Custom execution logic
          pre-deploy: # Run before deploy
            - component: fc3 build --dockerfile ./code/Dockerfile # Component to run, in the format "component: component_name command parameters"
        props:
          region: ${vars.region} # For variable usage, see: https://docs.serverless-devs.com/serverless-devs/yaml#%E5%8F%98%E9%87%8F%E8%B5%8B%E5%80%BC
          functionName: "start-nodejs-ufrz"
          runtime: "custom-container"
          description: 'hello world by serverless devs'
          timeout: 30
          memorySize: 512
          cpu: 0.5
          diskSize: 10240
          code: ./code
          customContainerConfig:
            image: 'registry.${vars.region}.aliyuncs.com/<your namespace>/<your image>:<your tag>' # Your ACR image. Replace <your namespace>, <your image>, and <your tag> with the actual namespace name, image repository name, and image tag.
          # triggers:
          #   - triggerName: httpTrigger # Trigger name
          #     triggerType: http # Trigger type
          #     description: 'xxxx'
          #     qualifier: LATEST # Service version to trigger
          #     triggerConfig:
          #       authType: anonymous # Authentication type. Valid values: anonymous, function
          #       disableURLInternet: false # Specifies whether to disable public network access URL
          #       methods: # HTTP methods supported by the HTTP trigger. Valid values: GET, POST, PUT, DELETE, HEAD
          #         - GET
          #         - POST
  4. Ejecute el siguiente comando para desplegar el proyecto.

    sudo s deploy

    A continuación se muestra un ejemplo del resultado:

      Steps for [deploy] of [hello-world-app]
    ====================
    
    DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
                BuildKit is currently disabled; enable it by removing the DOCKER_BUILDKIT=0
                environment-variable.
    
    Sending build context to Docker daemon   5.12kB
    Step 1/7 : FROM node:14-buster
    14-buster: Pulling from library/node
    2ff1d7c41c74: Already exists 
    b253aeafeaa7: Already exists 
    3d2201bd995c: Already exists 
    1de76e268b10: Already exists 
    d9a8df589451: Already exists 
    6f51ee005dea: Already exists 
    5f32ed3c3f27: Already exists 
    0c8cc2f24a4d: Already exists 
    0d27a8e86132: Already exists 
    Digest: sha256:a158d3b9b4e3fa813fa6c8c590b8f0a860e015ad4e59bbce5744d2f6fd8461aa
    Status: Downloaded newer image for node:14-buster
     ---> 1d12470fa662
    Step 2/7 : WORKDIR /usr/src/
     ---> Running in 70a8e2e4d1ea
    Removing intermediate container 70a8e2e4d1ea
     ---> 0d67b8fa2901
    Step 3/7 : COPY package*.json ./
     ---> 09eb15f8770a
    Step 4/7 : RUN npm install
     ---> Running in 8ae492be973b
    Step 5/7 : COPY . .
     ---> 7560c7b14431
    Step 6/7 : EXPOSE 9000
     ---> Running in 66b38e54ced0
    Removing intermediate container 66b38e54ced0
     ---> f73cce48d2ae
    Step 7/7 : ENTRYPOINT [ "node", "server.js" ]
     ---> Running in 2fb2f83fd6c0
    Removing intermediate container 2fb2f83fd6c0
     ---> fe51ae71448c
    Successfully built fe51ae71448c
    Successfully tagged registry.cn-hangzhou.aliyuncs.com/z****/z****:latest
    
    [2024-01-29 16:33:06][INFO][hello_world] get instanceName= and region=cn-hangzhou from registry.cn-hangzhou.aliyuncs.com/z****/z****
    [2024-01-29 16:33:06][INFO][hello_world] try to docker push registry.cn-hangzhou.aliyuncs.com/z****/z**** ...
    
    WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    
    Login Succeeded
    
    Using default tag: latest
    The push refers to repository [registry.cn-hangzhou.aliyuncs.com/z****/z****]
    85c1ec915b45: Pushed 
    37c36543a431: Pushed 
    e4afd7f70434: Pushed 
    0d5f5a015e5d: Layer already exists 
    3c777d951de2: Layer already exists 
    f8a91dd5fc84: Layer already exists 
    cb81227abde5: Layer already exists 
    e01a454893a9: Layer already exists 
    c45660adde37: Layer already exists 
    fe0fb3ab4a0f: Layer already exists 
    f1186e5061f2: Layer already exists 
    b2dba7477754: Layer already exists 
    latest: digest: sha256:6bf1ed4119d197a46c99082577632957056cb625f2ee0276d2af53f60d22837d size: 2841
    
      [hello_world] completed (688.45s)
    
      Result for [deploy] of [hello-world-app]
    ====================
    region:                cn-hangzhou
    cpu:                   0.5
    customContainerConfig: 
      image:            registry.cn-hangzhou.aliyuncs.com/z****/z****
      resolvedImageUri: registry.cn-hangzhou.aliyuncs.com/z****/z****@sha256:6bf1ed4119d197a46c99082577632957056cb625f2ee0276d2af53f60d22837d
    description:           hello world by serverless devs
    diskSize:              10240
    functionName:          start-nodejs-ufrz
    handler:               handler
    instanceConcurrency:   1
    internetAccess:        true
    lastUpdateStatus:      Successful
    memorySize:            512
    role:                  
    runtime:               custom-container
    state:                 Active
    timeout:               30
    
    A complete log of this run can be found in: /root/.s/logs/0129162246
  5. Ejecute el siguiente comando para depurar la función.

    sudo s invoke -e "{\"key\":\"val\"}"

    A continuación se muestra un ejemplo del resultado:

     Steps for [invoke] of [hello-world-app]
    ====================
    ========= FC invoke Logs begin =========
    FC Invoke Start RequestId: 1-65b764db-15eb737f-0c67ab5cd968
    FC Invoke Start RequestId: 1-65b764db-15eb737f-0c67ab5cd968
    hello world!
    
    FC Invoke End RequestId: 1-65b764db-15eb737f-0c67ab5cd968
    
    Duration: 42.27 ms, Billed Duration: 43 ms, Memory Size: 512 MB, Max Memory Used: 47.77 MB
    ========= FC invoke Logs end =========
    
    Invoke instanceId: c-65b764db-15fa2aa8-bc50f7839399
    Code Checksum: undefined
    Qualifier: LATEST
    RequestId: 1-65b764db-15eb737f-0c67ab5cd968
    
    Invoke Result:
    OK
      [hello_world] completed (4.96s)
    
    A complete log of this run can be found in: /root/.s/logs/0129164202

Documentación relacionada

  • Cuando utiliza una función de contenedor personalizado, el entorno base del que depende la imagen de contenedor requiere tiempo adicional para descargarse y descomprimirse. Para reducir el tiempo de arranque en frío, consulte Best practices for optimizing cold starts in Function Compute.

  • También puede crear funciones mediante una llamada a una API. Para obtener más información, consulte CreateFunction.

  • Para conocer los escenarios aplicables y las diferencias entre los entornos de ejecución integrados, personalizados y de contenedores personalizados que ofrece Function Compute, consulte Technology selection.