Todos os produtos
Search
Central de documentação

Function Compute:Criar uma função de contêiner personalizado

Última atualização: Jun 29, 2026

Se os runtimes integrados do Function Compute não atenderem aos seus requisitos de negócios, crie uma função de contêiner personalizado. Este tópico descreve como criar uma função de contêiner personalizado no console do Function Compute ou com a ferramenta Serverless Devs.

Observações de uso

  • Para criar uma função de contêiner personalizado no Function Compute, use uma imagem do Alibaba Cloud Container Registry da mesma região e conta Alibaba Cloud. Se você compilar imagens em computadores com Apple silicon ou outras arquiteturas baseadas em arm, especifique a plataforma de compilação como linux/amd64. Exemplo: docker build --platform linux/amd64 -t $IMAGE_NAME ..

  • O Function Compute resolve nomes de domínio para imagens do Alibaba Cloud Container Registry Enterprise Edition usando a resolução padrão da VPC configurada ou os endereços IP de acesso resolvidos automaticamente pelo recurso Configurar controle de acesso à VPC.

    • Cenário 1: Se o identificador Default Resolution não aparecer para nenhum endereço IP na página Access Control da instância, o Alibaba Cloud DNS PrivateZone resolverá automaticamente todos os endereços IP na lista Access IP. Nesse caso, qualquer configuração de VPC é válida.

      image

    • Cenário 2: Se, na página Access Control de uma instância ACR Enterprise Edition, a lista Access IP contiver um endereço IP marcado com Default Resolution correspondente ao endereço IP de resolução padrão de uma VPC, selecione apenas a primeira VPC, conforme ilustrado na figura a seguir.

      image

  • Ao usar uma instância Enterprise Edition, selecione apenas imagens não aceleradas. Sempre que você atualizar a configuração de imagem de uma função, o sistema gerará uma nova imagem acelerada com base na imagem original mais recente selecionada, substituindo qualquer imagem acelerada existente. Não exclua as imagens originais ou aceleradas, pois isso causará falhas nas invocações da função.

  • Atualize sua função prontamente se a imagem configurada for alterada. Caso contrário, as invocações da função falharão.

    • Garanta que a imagem original exista. Sem ela, a função entra em estado de Falha e não pode ser invocada. Embora o Function Compute faça cache da função para reduzir o tempo de inicialização a frio, as invocações ainda dependem da imagem original.

    • Verifique se a imagem usada na função não foi substituída por outra com um digest diferente. Se isso ocorrer, reimplante a função com as informações de imagem mais recentes. O Function Compute registra tanto a tag quanto o digest da versão da imagem selecionada durante a criação e atualização da função. Se a tag da imagem for atualizada externamente para apontar para um novo digest, as invocações da função falharão.

Pré-requisitos

Criar uma função no console

  1. Faça login no console do Function Compute. No painel de navegação à esquerda, escolha Function Management > Functions.

  2. Na barra de navegação superior, selecione uma região. Na página Functions, clique em Create Function.

  3. Na caixa de diálogo exibida, selecione o tipo GPU Function de acordo com seu cenário e clique em Create GPU Function.

  4. Na página Create GPU Function, configure os parâmetros a seguir e clique em Create.

    • Basic Configurations: Insira um Function Name. O nome deve ser exclusivo na mesma conta e região da Alibaba Cloud e seguir as convenções de nomenclatura.

    • Scaling Policy: Selecione um tipo de instância. Não é possível usar instâncias provisionadas e sob demanda simultaneamente. O tipo de instância não pode ser alterado após a criação da função.

      • Instâncias sob demanda

        Item de Configuração

        Descrição

        Exemplo

        Instance Type

        Selecione On-demand Instance. As instâncias são dimensionadas automaticamente com base no volume de solicitações e liberadas quando não há requisições. A cobrança é baseada no uso.

        On-demand Instance

        GPU Card Type

        Escolha um tipo de placa GPU.

        Ada series

        Specifications

        Defina as especificações de GPU Memory, vCPU, Memory e Disk para a função conforme suas necessidades de negócios. Após definir as especificações, o uso de cada recurso é calculado multiplicando-se a especificação pela duração de uso.

        Nota
        • Todos os diretórios no disco são graváveis. O espaço em disco é compartilhado.

        • O disco está vinculado ao ciclo de vida da instância da função subjacente. Quando o sistema recupera a instância, os dados no disco são perdidos. Se precisar de armazenamento persistente, monte um sistema de arquivos NAS ou um bucket do OSS.

        • GPU Memory: 48 GB

        • vCPU: 8 vCPU

        • Memory: 64 GB

        • Disk: 512 MB (não cobrado, o Function Compute fornece uma cota gratuita de 10 GB de espaço em disco)

        Minimum Instances

        Se o seu negócio for sensível à latência, após selecionar Elastic Instance, recomendamos definir o número mínimo de instâncias como 1 ou mais para reservar recursos antecipadamente e reduzir a latência de inicialização a frio.

        Nota

        Após definir Minimum Instances como 1 ou mais, se nenhuma política elástica para o número mínimo de instâncias estiver configurada ou se nenhuma política elástica estiver ativa por um período, o número mínimo atual de instâncias será o valor definido aqui.

        Se várias políticas elásticas estiverem configuradas, o sistema calcula o Minimum Number Of Instances necessário quando cada política é acionada. O sistema então usa o maior valor entre as políticas ativas como o Minimum Number Of Instances atual.

        1

        Idle Mode

        Configure múltiplas solicitações simultâneas para uma única instância de função GPU. Isso permite que uma única instância processe várias requisições ao mesmo tempo.

      • Instâncias provisionadas

        Item de Configuração

        Descrição

        Exemplo

        Instance Type

        Selecione Provisioned Instance. As instâncias são alocadas para a função a partir de um pool de recursos provisionados pré-comprado.

        Instâncias provisionadas são recomendadas para cenários onde custos previsíveis, baixa latência e alta utilização de recursos são importantes para garantir a estabilidade dos negócios.

        Provisioned Instance

        Provisioned Resource Pool

        Um pool de recursos provisionados é um conjunto de instâncias provisionadas que podem ser alocadas para a função alvo. Se o pool tiver capacidade insuficiente, clique em Scale-out na coluna Actions e siga as instruções na tela para expandi-lo. Para mais informações, consulte Pools de recursos residentes (assinatura).

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

        • GPU Card Type: Ada

        Specifications

        Defina as especificações de GPU Memory, vCPU, Memory e Disk para a função conforme suas necessidades de negócios. Após definir as especificações, o uso de cada recurso é calculado multiplicando-se a especificação pela duração de uso. Para mais informações, consulte Visão geral de faturamento.

        Nota
        • Todos os diretórios no disco são graváveis. O espaço em disco é compartilhado.

        • O disco está vinculado ao ciclo de vida da instância da função subjacente. Quando o sistema recupera a instância, os dados no disco são perdidos. Se precisar de armazenamento persistente, monte um sistema de arquivos NAS ou um bucket do OSS.

        GPU Memory: 48 GB

        vCPU: 8 vCPU

        Memory: 64 GB

        Disk: 512 MB (não cobrado, o Function Compute fornece uma cota gratuita de 10 GB de espaço em disco)

        Number Of Provisioned Instances

        Aloque um número de instâncias provisionadas para a função alvo com base nos recursos disponíveis no pool de recursos provisionados.

        1

        Concurrency Per Instance

        Configure múltiplas solicitações simultâneas para uma única instância de função GPU. Isso permite que uma única instância processe várias requisições ao mesmo tempo. Para mais informações, consulte Configurar concorrência de instância.

        20

    • Concurrency Per Instance: Configure o ambiente de runtime da função e as configurações relacionadas ao código.

      Parâmetro

      Descrição

      Exemplo

      Code

      • Usar imagens de exemplo: Selecione uma imagem de exemplo fornecida pelo Function Compute para implantar rapidamente uma função de contêiner personalizado. Escolha uma imagem alvo na lista sob o parâmetro Runtime.

      • Usar imagens do registro de contêiner: Clique em Select ACR image sob o parâmetro Container Image. No painel Select container image, selecione a Container registry instance e o Image repository. Em seguida, localize a imagem alvo na lista abaixo e clique em Select na coluna Actions.

      Nota
      • Não é possível criar uma função usando uma imagem pública de uma instância do Alibaba Cloud Container Registry pertencente a outra conta.

      • Atualize sua função prontamente se a imagem configurada for alterada. Caso contrário, as invocações da função falharão. Para mais informações,

      • Ao usar uma instância Enterprise Edition, selecione apenas imagens não aceleradas. Não exclua as imagens originais ou aceleradas, pois isso causará falhas nas invocações da função.

      • Instâncias Enterprise Edition não suportam endereços de imagem em formato de nome de domínio personalizado.

      • Não é possível criar funções usando imagens de repositórios nos quais a aceleração de imagem está habilitada no index-only mode. Isso se aplica a instâncias Container Registry Enterprise Edition (Standard e Advanced).

      • Após o Alibaba Cloud Container Registry introduzir o recurso index-only mode, não é mais possível criar funções usando imagens de repositórios recém-criados em instâncias Enterprise Edition (Basic) se a aceleração de imagem estiver habilitada. No entanto, você ainda pode usar imagens de repositórios acelerados existentes nessas instâncias.

      Container Image

      Custom Container

      Selecione a imagem alvo.

      SpringBoot Web App Sample Image

      Container Image

      O comando de inicialização do programa. Se não especificado, o Function Compute usa o Entrypoint ou CMD da imagem por padrão.

      None

      Startup Command

      A porta na qual o servidor HTTP no seu código escuta.

      9000

      Listening Port

      Defina o período de tempo limite. O Execution Timeout Period tem como padrão 60 segundos, com um máximo de 86.400 segundos.

      60

    • Execution Timeout Period: Em cenários de inferência de IA, configure o prefetch de instância para pré-aquecer o modelo. Isso elimina a latência de inicialização a frio na primeira solicitação.

      Item de Configuração

      Descrição

      Exemplo

      Instance Prefetch

      Instance Prefetch

      Configure um hook Initializer para pré-aquecer a instância e otimizar as inicializações a frio. O hook executa um script especificado ou chama uma interface para carregar o modelo após a instância da função iniciar, mas antes de processar solicitações.

      Enabled

      Instance Prefetch

      Defina o período de tempo limite para o hook Initializer.

      60

      Timeout

      Configure dois tipos de hooks Initializer para pré-aquecer o modelo: Prefetch Program Type e Execute Instruction.

      Execute Instruction

      Invoke Code

      Configure o conteúdo da instrução a ser executada. Use implementações de shell personalizadas, como /bin/bash, /bin/sh, /bin/csh e /bin/zsh. Certifique-se de que o ambiente de runtime da função suporte o shell selecionado.

    • Permissões, Rede e Armazenamento: Configure a função de execução, a rede e a montagem de armazenamento da função.

      Item de Configuração

      Descrição

      Exemplo

      Instruction Content

      O Function Compute assume esta função RAM para gerar credenciais temporárias de acesso aos recursos da Alibaba Cloud e as passa para o código. Para mais informações, consulte .

      mytestrole

      Execution Role

      Permite que a função acesse recursos dentro de uma VPC. Para mais informações, consulte .

      Enable

      VPC Access

      Necessário quando VPC Access estiver definido como Yes. Crie uma nova VPC ou selecione o ID da VPC para acessar na lista suspensa.

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

      VPC

      Necessário quando VPC Access estiver definido como Yes. Crie um novo vSwitch ou selecione um ID de vSwitch na lista suspensa.

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

      VPC Access

      Necessário quando VPC Access estiver definido como Yes. Crie um novo grupo de segurança ou selecione um na lista suspensa.

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

      Allow Default NIC to Access Internet

      Selecione Yes ou No para permitir que a função acesse a Internet através da interface de rede padrão.

      Importante

      Ao usar o recurso de endereço IP público fixo, desative Allow Function to Access the Internet via Default NIC. Caso contrário, o endereço IP público fixo configurado não terá efeito. Para mais informações, consulte .

      Enable

      vSwitch

      Monte um Sistema de arquivos NAS configurado na função para armazenamento persistente de dados compartilhados entre funções, como modelos compartilhados por várias funções de inferência.

      Se selecionar Automatic Configuration, o sistema usará o sistema de arquivos NAS de uso geral existente chamado Alibaba-Fc-V3-Component-Generated por padrão. Se não existir nenhum sistema de arquivos NAS elegível na conta atual, o sistema criará um automaticamente.

      Enable

      VPC Access

      Monte o OSS na função para armazenamento persistente de logs, arquivos de negócios e muito mais. Para mais informações, consulte .

      Enable

    • Logs e Rastreamento

      Item de Configuração

      Descrição

      Exemplo

      Log Feature

      Configure esta opção para persistir logs de execução da função no Log Service, facilitando a depuração de código, solução de problemas e análise de dados. Para mais informações, consulte .

      • Automatic Configuration: Seleciona automaticamente o Log Project que começa com serverless-<region_id>.

        Apenas um Log Project desse tipo é criado por região. Se o sistema detectar um Log Project existente na região atual, ele será usado diretamente.

      • Custom Configuration: Especifique manualmente o Security Group e o VPC Access alvo.

      Enable

    • NAS Mounting

      Item de Configuração

      Descrição

      Exemplo

      OSS Mounting

      Selecione o fuso horário para a função. Após definir o fuso horário, uma variável de ambiente TZ é adicionada automaticamente com o valor definido para o fuso horário alvo.

      UTC

      Log Project

      Defina Tags configuradas para a função a fim de facilitar o gerenciamento em grupo. Defina tanto a chave quanto o valor da tag.

      key : value

      Logstore

      Selecione os Grupos de recursos configurados para a função a fim de gerenciar funções por grupo.

      Default Resource Group

      Other Configurations

      Use variáveis de ambiente para ajustar flexivelmente o comportamento da função sem modificar o código.

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

    Após criar a função, visualize e atualize-a na página Function List.

Nota

Ao atualizar a função, altere a porta de escuta configurada, mas não adicione nem remova portas. Se você configurou uma porta de escuta ao criar a função, o sistema mantém a configuração original da porta caso nenhuma porta de escuta seja especificada durante uma atualização.

Criar uma função com Serverless Devs

Use o Serverless Devs para construir e enviar imagens de contêiner e implantar funções com um único fluxo de comandos.

  1. Execute o seguinte comando para inicializar um projeto.

    sudo s init

    Siga as instruções para selecionar uma conta Alibaba Cloud, um modelo de imagem personalizada e uma linguagem de programação (este tópico usa Node.js como exemplo). Em seguida, defina um nome de projeto, selecione uma região de implantação e insira as informações da imagem do Alibaba Cloud Container Registry.

  2. Execute o seguinte comando para entrar no diretório do projeto.

    cd start-fc3-custom-container-nodejs
  3. Edite o arquivo s.yaml. Para obter mais informações sobre os parâmetros no arquivo YAML, consulte Especificação YAML.

    O código a seguir fornece um exemplo.

    Neste exemplo, image refere-se à sua imagem do Alibaba Cloud Container Registry. Substitua <your namespace>, <your image> e <your tag> pelo seu namespace real, nome do repositório de imagens e tag da imagem. Se você já inseriu as informações corretas da imagem ao inicializar o projeto na Etapa 1, não é necessário modificá-las aqui.

    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: 512
     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. Execute o seguinte comando para implantar o projeto.

    sudo s deploy

    A saída a seguir é um exemplo:

      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:              512
    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. Execute o seguinte comando para depurar a função.

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

    A saída a seguir é um exemplo:

     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