Todos os produtos
Search
Central de documentação

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

Última atualização: Aug 28, 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 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 da Enterprise Edition do Alibaba Cloud Container Registry usando a resolução padrão da virtual private cloud (VPC) configurada ou os endereços IP de acesso resolvidos automaticamente pelo Alibaba Cloud DNS PrivateZone.

    • 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 Container Registry (ACR) Enterprise Edition, a lista Access IP contiver um endereço IP marcado com Default Resolution, esse será o endereço IP de resolução padrão de uma VPC. Selecione essa configuração de 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 afetará as 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 armazene sua função em cache para reduzir tempos de cold start, as invocações ainda dependem da imagem original.

    • Verifique se a imagem usada na sua função não foi sobrescrita por um digest diferente. Se isso ocorrer, reimplante a função com as informações mais recentes da imagem. 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

  • Container Registry

    • Create an Enterprise Edition instance

      Nota
      • A Personal Edition do Alibaba Cloud Container Registry (ACR) destina-se a desenvolvedores individuais. É oferecida como teste gratuito com cotas durante o beta público. Esta edição não inclui Service Level Agreement (SLA) nem compensação por danos e possui limites de uso. Para mais detalhes sobre esses limites, consulte as observações de uso em Create a Personal Edition instance.

  • Serverless Devs (necessário apenas se você criar a função usando Serverless Devs)

    Install and configure Serverless Devs

  • 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 com base nas instruções e no seu cenário real e, em seguida, 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 dentro da mesma conta e região, além de 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, e o tipo de instância não pode ser alterado após a criação da função.

        • On-demand instances

          Item de Configuração

          Descrição

          Exemplo

          Instance Type

          Selecione On-demand Instance. As instâncias dimensionam conforme o volume de solicitações e são liberadas quando não há requisições. Faturamento por uso.

          On-demand Instance

          GPU Card Type

          Escolha um tipo de placa GPU. As especificações disponíveis variam conforme o tipo (Instance types and specifications).

          Ada series

          Specifications

          Defina as especificações de GPU Memory, vCPU, Memory e Disk. Faturamento por especificação × duração (Billing overview).

          Nota
          • GPU Memory: 48 GB

          • vCPU: 8 vCPU

          • Memory: 64 GB

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

          Minimum Instances

          Para cargas de trabalho sensíveis à latência, selecione Elastic Instance e defina o mínimo como 1 ou mais para reduzir a latência de cold start.

          Nota

          Se nenhuma política elástica estiver configurada ou ativa, a contagem mínima de instâncias assume este valor como padrão.

          Com múltiplas políticas elásticas ativas, o maior valor de Minimum Number Of Instances torna-se o Minimum Number Of Instances efetivo.

          How is the current minimum number of instances calculated?

          1

          Idle Mode

          Permite que uma única instância GPU processe múltiplas solicitações simultaneamente. Configure concurrency per instance.

        • Provisioned instances

          Item de Configuração

          Descrição

          Exemplo

          Instance Type

          Selecione Provisioned Instance. As instâncias provêm de um pool de recursos pré-adquirido.

          Ideal para custos previsíveis, baixa latência e alta utilização.

          Provisioned Instance

          Provisioned Resource Pool

          Pool de instâncias pré-adquirido para a função. Se a capacidade for insuficiente, clique em Scale-out na coluna Actions. Provisioned resource pools (subscription).

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

          • GPU Card Type: Ada

          Specifications

          Defina as especificações de GPU Memory, vCPU, Memory e Disk. Faturamento por especificação × duração (Billing overview).

          Nota

          GPU Memory: 48 GB

          vCPU: 8 vCPU

          Memory: 64 GB

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

          Number Of Provisioned Instances

          Aloque instâncias a partir da capacidade disponível do pool.

          1

          Concurrency Per Instance

          Permite que uma única instância GPU processe múltiplas solicitações simultaneamente. Configure concurrency per instance.

          20

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

        Parâmetro

        Descrição

        Exemplo

        Code

        • Use Sample Images : 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.

        • Use Container Registry Images : Clique em Select ACR Image abaixo do parâmetro Container Image. No painel Select Container Image , selecione a Container Registry Instance e o ACR Image Repository existentes. Em seguida, localize a imagem desejada 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, consulte Usage notes.

        • Ao usar uma instância Enterprise Edition, selecione apenas imagens não aceleradas. Não exclua as imagens originais ou aceleradas, pois isso afetará as invocações da função. Para mais informações, consulte Usage notes.

        • Instâncias Enterprise Edition não suportam endereços de imagem no 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 esteja habilitada no index-only mode. Isso se aplica a instâncias Container Registry Enterprise Edition (Standard e Advanced).

        • Após a introdução do recurso index-only mode pelo Alibaba Cloud Container Registry, 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. Para mais detalhes sobre o index-only mode, consulte Load container images on demand.

        Container Image

        Custom Container

        Selecione a imagem desejada.

        SpringBoot Web App Sample Image

        Container Image

        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

        Porta na qual o servidor HTTP do seu código escuta.

        9000

        Listening Port

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

        60

      • Execution Timeout Period: Pré-aquece o modelo para eliminar a latência de cold start na primeira solicitação em cenários de inferência de IA.

        Item de Configuração

        Descrição

        Exemplo

        Instance Prefetch

        Instance Prefetch

        Executa um script ou chama uma interface para carregar o modelo após a inicialização da instância, mas antes de ela processar solicitações.

        Configure the instance lifecycle.

        Enabled

        Instance Prefetch

        Timeout para o hook Initializer.

        60

        Timeout

        Dois tipos de hook: Prefetch Program Type e Execute Instruction.

        Execute Instruction

        Invoke Code

        Instrução a ser executada. Suporta shells personalizados: /bin/bash, /bin/sh, /bin/csh, /bin/zsh. Certifique-se de que o runtime suporte o shell selecionado.

        Callback method implementation

      • Permissions, Network, and Storage: Configure a função de execução, a rede e a montagem de armazenamento.

        Item de Configuração

        Descrição

        Exemplo

        Instruction Content

        O Function Compute assume esta função do Resource Access Management (RAM) para gerar credenciais temporárias de acesso aos recursos da Alibaba Cloud e as repassa ao código. Para mais informações, consulte Use a function role to access other cloud services.

        mytestrole

        Execution Role

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

        Enable

        VPC Access

        Obrigatório quando VPC Access estiver definido como Yes. Crie uma nova VPC ou selecione o ID da VPC de acesso na lista suspensa.

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

        VPC

        Obrigató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****

        vSwitch

        Obrigató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 pela interface de rede padrão.

        Importante

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

        Enable

        Security Group

        Monte o Configure a NAS file system na função para armazenamento persistente de dados compartilhados entre funções, como modelos usados por múltiplas funções de inferência.

        Se você selecionar Automatic Configuration, o sistema usará por padrão o sistema de arquivos network-attached storage (NAS) de uso geral existente chamado Alibaba-Fc-V3-Component-Generated. Se não houver um sistema de arquivos NAS elegível na conta atual, o sistema criará um automaticamente.

        Enable

        NAS Mounting

        Monte o Object Storage Service (OSS) na função para armazenamento persistente de logs, arquivos de negócios, entre outros. Para mais informações, consulte Configure an OSS mount.

        Enable

      • Logging and Tracing

        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 Configure the logging feature.

        • 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 OSS Mounting e o Log Project desejados.

        Enable

      • Logstore

        Item de Configuração

        Descrição

        Exemplo

        Other Configurations

        Selecione o fuso horário da função. Após definir o fuso horário, uma variável de ambiente TZ é adicionada automaticamente com o valor correspondente ao fuso escolhido.

        UTC

        Timezone

        Defina Configure tags para a função visando o gerenciamento por grupos. É necessário definir tanto a chave quanto o valor da tag.

        key : value

        Tags

        Selecione o Configure resource groups da função para gerenciar funções por grupo.

        Default Resource Group

        Resource Group

        Utilize variáveis de ambiente para ajustar o comportamento da função sem modificar o código. Para mais informações, consulte Configure environment variables.

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

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

    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 e não especificar uma durante a atualização, o sistema manterá a configuração original da porta.

    Criar uma função com Serverless Devs

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

    1. Execute o comando a seguir para inicializar um projeto.

      sudo s init

      Siga as instruções na tela para selecionar uma conta Alibaba Cloud, um modelo de contêiner personalizado e uma linguagem (Node.js é usado neste exemplo). Em seguida, defina o nome do projeto, selecione uma região de implantação e insira sua imagem ACR.

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

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

      O código a seguir serve como 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 em Step 1, não será 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: 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. Execute o comando a seguir para implantar o projeto.

      sudo s deploy

      A saída a seguir serve como 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:              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. Execute o comando a seguir para depurar a função.

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

      A saída a seguir serve como 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

    Documentação relacionada

    • Ao usar uma função de contêiner personalizado, o ambiente base do qual a imagem depende requer tempo adicional para download e descompactação. Para reduzir o tempo de cold start, consulte Best practices for optimizing cold starts in Function Compute.

    • Também é possível criar funções chamando uma operação de API. Para mais informações, consulte CreateFunction.

    • Para mais detalhes sobre os cenários aplicáveis e as diferenças entre os runtimes integrados, runtimes personalizados e runtimes de contêiner personalizado fornecidos pelo Function Compute, consulte Technology selection.