Uma função de evento pode responder a diversos eventos de serviços de cloud, como o upload de um arquivo no Object Storage Service (OSS) ou um alerta disparado por um serviço de monitoramento. Ao utilizar uma função de evento, basta escrever a sua lógica de processamento. Você não precisa gerenciar a integração de eventos nem os recursos de computação subjacentes. O Function Compute executa uma instância apenas sob demanda, realiza o dimensionamento automático e encerra a instância assim que o evento é processado. A cobrança ocorre somente pelos recursos efetivamente consumidos.
Caso de uso
Suponha que você precise armazenar arquivos no OSS. Para acelerar os uploads, você primeiro compacta os arquivos no formato ZIP. Contudo, o objetivo é utilizar os arquivos diretamente, e não os pacotes ZIP. Esse cenário exige um processo automatizado para descompactar os arquivos e salvá-los novamente no OSS.
Uma abordagem tradicional exige a criação e integração de múltiplos programas para monitorar e tratar alterações de arquivos no OSS, além da implantação e manutenção contínua dessas aplicações. Com uma função de evento, o foco fica exclusivamente na lógica de processamento dos arquivos. Sempre que um arquivo é enviado para o OSS, um evento é gerado. Caso esse evento atenda às condições definidas, a função é acionada automaticamente para executar o seu handler. Ao final da tarefa, o Function Compute libera os recursos de computação de forma automática, garantindo economia de custos.
Considerando que você pode não ter um bucket do OSS disponível, este tutorial apresenta um exemplo prático para orientar a implementação de uma função de evento.
Você criará um evento simulado de upload de arquivo no OSS. Esse evento invocará uma função de evento para processar o arquivo e exibir informações no console, como o nome do arquivo e o nome do bucket.
Neste tutorial, você aprenderá a:
Use o console para criar uma função de evento, escrever um handler e testar a função de ponta a ponta.
Compreenda conceitos-chave, como o runtime do Function Compute e o runtime integrado.
Compreenda os parâmetros do handler
eventecontext.
Pré-requisitos
Procedimento
Etapa 1: Selecionar o tipo de função
Acesse o Function Compute console. No painel de navegação à esquerda, escolha . Na barra de navegação superior, selecione a região onde deseja criar a função, clique em Create Function e, em seguida, selecione e crie uma Event Function conforme as instruções na tela.
Etapa 2: Selecionar um runtime
Python
Para Runtime, selecione Built-in Runtimes > Python > Python 3.10.
Recomendamos o uso de um runtime integrado para funções de evento. Isso ocorre porque os runtimes integrados incluem as dependências necessárias para responder a eventos de outros serviços de nuvem (por exemplo, o módulo oss2 do Python). Para mais informações, consulte Visão geral do ambiente . Caso utilize um runtime personalizado ou um runtime de Custom Container , você precisará instalar as dependências por conta própria. Para uma comparação detalhada dos runtimes, consulte Selecionar um runtime .
Node.js
Para Runtime, selecione Built-in Runtimes > Node.js > Node.js 20.
Recomendamos o uso de um built-in runtime para funções de evento. Isso ocorre porque os built-in runtimes incluem as dependências necessárias para responder a eventos de outros serviços de cloud (por exemplo, o módulo Node.js ali-oss ). Para mais informações, consulte Visão geral do ambiente . Se você utilizar um custom runtime ou um Custom Container runtime , será necessário instalar as dependências por conta própria. Para uma comparação detalhada dos runtimes, consulte Selecionar um runtime .
Etapa 3: Criar a função
Selecione o exemplo Hello, world! para criar a função. Mantenha os valores padrão para Advanced Settings e clique em Create.
Após criar a função, visualize o código de exemplo gerado no WebIDE, na guia Code. O trecho a seguir mostra o código de exemplo em Python.
# -*- coding: utf-8 -*-
import logging
import json
# To enable the initializer feature (https://www.alibabacloud.com/help/document_detail/2513452.html)
# please implement the initializer function as below:
# def initializer(context):
# logger = logging.getLogger()
# logger.info('initializing')
def handler(event, context):
# evt = json.loads(event)
logger = logging.getLogger()
logger.info('hello world')
return 'hello world'
O código de exemplo Hello, world! gera automaticamente um modelo de função com um ponto de entrada. Nas etapas seguintes, você poderá desenvolver o código da sua aplicação com base nesse modelo.
Etapa 4: Modifique e implante o código de exemplo
Linguagens compiladas, como Java, não oferecem suporte ao WebIDE; elas exigem compilação local e upload do pacote de código.
Python
No WebIDE do console, abra o arquivo index.py, substitua o código existente pelo código a seguir e, em seguida, clique em Deploy.
Node.js
No WebIDE do console, abra o arquivo index.mjs, substitua o código existente pelo código a seguir e clique em Deploy.
Etapa 5: Teste a função
Para simular o acionamento de uma função por meio do upload de um arquivo no OSS, definiremos um evento simulado e o utilizaremos para disparar a execução.
Além de utilizar um evento simulado, você também pode usar um evento real do OSS para acionar a função e testá-la. Para mais informações, consulte Próximas etapas .
-
Crie um evento simulado: Na página Function Details, clique na aba Code. Clique na seta suspensa à direita de Test Function e selecione Configure Test Parameters. Na lista Event Template, selecione OSS. O console gera automaticamente um evento simulado com o mesmo formato de um evento real do OSS.
Você pode personalizar o Event Name e os valores dos parâmetros no objeto do evento, como o nome do bucket do OSS e o nome do arquivo. Ao terminar, clique em OK.
-
Na aba Code, clique em Test Function para acionar a função. Após a execução bem-sucedida, visualize a Response. Um valor de retorno 0 indica que o evento foi processado com sucesso. Clique em Log Output para visualizar os logs gerados durante a execução da função.
Ao testar uma função, o Function Compute transmite o conteúdo do evento simulado para o manipulador
handlerpor meio do parâmetroevente executa o código definido na etapa anterior para analisar o parâmetroevente processar o arquivo.A saída de log exibe as seguintes informações principais:
FunctionCompute python3 runtime inited, seguida por quatro entradas de log de nível [INFO]: Parsing event information..., OSS bucket name is test-bucket, file name is source/example.zip, Region is cn-hangzhou, Starting event processing..., Event processing completed..., indicando que a função analisou com sucesso as informações do evento simulado do OSS e concluiu o processamento do arquivo.
Etapa 6: (Opcional) Limpar recursos
O Function Compute cobra com base no uso real de recursos. Funções não invocadas não geram custos. Contudo, fique atento a outros produtos ou recursos de cloud associados à função, como os dados armazenados no OSS e no File Storage NAS (NAS).
Para excluir uma função, acesse o console do Function Compute, escolha e selecione uma região. Na coluna Actions da função de destino, clique em Delete. Na caixa de diálogo, confirme se a função não possui recursos associados, como gatilhos, e então confirme a exclusão.
Próximas etapas
Você já criou uma função de evento no console, modificou o handler e testou a função com um event simulado. Consulte as seguintes operações avançadas de acordo com as necessidades do seu negócio:
-
Adicione um gatilho:
Como talvez você não tenha um bucket do OSS, este exemplo utiliza um evento simulado de upload do OSS para testes. Em cargas de trabalho reais, adicione um gatilho do OSS à função. Para mais informações, consulte Configurar um gatilho nativo do OSS.
Além do armazenamento de objetos, eventos de diversos serviços da Alibaba Cloud (como várias filas de mensagens, Tablestore e SLS) também podem acionar o Function Compute. Para ver a lista de gatilhos compatíveis, consulte Visão geral dos gatilhos.
Adicione dependências: Os runtimes integrados incluem dependências comuns para o processamento de eventos, mas podem não atender às suas necessidades em produção. A abordagem mais simples é empacotar seu código e as dependências em um arquivo ZIP (um pacote de código) e fazer o deploy no Function Compute. Para mais informações, consulte Implantar um pacote de código. Para reduzir o tamanho do pacote de código e acelerar o cold start da função, utilize uma camada (layer) para gerenciar as dependências. Para mais informações, consulte Criar uma camada personalizada.
Configure logs: Para facilitar a depuração, a resolução de problemas ou a auditoria de segurança, recomendamos a configuração de logs para as suas funções. Para mais informações, consulte Configurar o recurso de log.
Referências
Além do console, é possível utilizar a ferramenta de linha de comando Serverless Devs para executar as operações mencionadas. Para mais informações, consulte Início rápido.
-
Recomendamos os tutoriais a seguir para aprofundar seus conhecimentos sobre funções de evento:
