As extensões do DataWorks permitem definir lógicas personalizadas para monitorar operações de usuários, interceptar ações inadequadas, enviar notificações de eventos e gerenciar fluxos de trabalho. Este tópico descreve como desenvolver e implantar uma extensão usando o Function Compute.
Informações básicas
O Function Compute é um service de computação totalmente gerenciado e orientado a eventos. Implante a extensão no ambiente de execução do Function Compute para que o DataWorks envie mensagens de eventos de pontos de extensão à classe ExtensionRequest. No código da extensão, implemente o método handleRequest da interface PojoRequestHandler para construir um objeto ExtensionRequest. Esse objeto recebe as mensagens de eventos de pontos de extensão e o contexto (Context) do DataWorks. Defina a lógica de processamento da extensão e retorne o resultado por meio da classe ExtensionResponse. O DataWorks recupera automaticamente o resultado de processamento do ExtensionResponse para decidir se deve bloquear o fluxo de operação do ponto de extensão atual.
Limitações
Somente usuários do DataWorks Enterprise Edition podem usar o módulo Extensions.
O módulo Extensions está disponível nas seguintes regiões: China (Beijing), China (Hangzhou), China (Shanghai), China (Zhangjiakou), China (Shenzhen), China (Chengdu), US (Silicon Valley), US (Virginia), Germany (Frankfurt), Japan (Tokyo), China (Hong Kong) e Singapore.
Observações
Apenas o Open Platform administrator, o tenant administrator, contas Alibaba Cloud e usuários RAM com a política AliyunDataWorksFullAccess anexada têm permissões de leitura e gravação no backend de desenvolvedor. Para mais informações sobre gerenciamento de permissões, consulte Permission control for global services e RAM policies for service and console permissions.
Limitações de versão: Se a assinatura do DataWorks Enterprise Edition expirar, todas as extensões ficarão inativas e não poderão mais ser acionadas para verificações de eventos. Verificações já acionadas, mas ainda sem estado final definido, serão aprovadas automaticamente.
Limitações de nó: Quando um nó composto contendo nós internos, como um Platform for AI node, um do-while node ou um for-each node, aciona uma verificação, todos os nós internos devem ser aprovados antes que as operações subsequentes prossigam.
Acionamento: Associe várias extensões ao mesmo evento de ponto de extensão. Assim, um único evento pode acionar múltiplas extensões.
Limitações de eventos: Atualmente, as extensões implantadas via Function Compute suportam pré-eventos para download de dados, pré-eventos para publicação e despublicação de ativos e pré-eventos para upload de dados.
Como funciona
O diagrama a seguir ilustra como uma extensão baseada em Function Compute processa eventos de pontos de extensão:
Após o acionamento de um evento de ponto de extensão, o processo associado entra no estado Checking enquanto aguarda o retorno de um resultado pela extensão via callback de API. O processo permanece nesse estado até que a extensão envie o resultado ao DataWorks. Com base no resultado retornado, o DataWorks determina se deve bloquear o processo.
Tarefas do desenvolvedor
Desenvolva a extensão antes de implantá-la no Function Compute. Use a biblioteca fc-java-core para executar o handler. Um código de exemplo está disponível no arquivo fc_dataworks_demo01-1.0-SNAPSHOT.jar. Para mais informações, consulte Event handlers.
Etapa 1: Configurar dependências da extensão
Ao desenvolver a extensão, adicione as seguintes dependências ao arquivo pom.xml.
Dependência do DataWorks
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dataworks_public20200518</artifactId>
<version>5.6.0</version>
</dependency>
Dependência do Function Compute
<!-- https://mvnrepository.com/artifact/com.aliyun.fc.runtime/fc-java-core -->
<dependency>
<groupId>com.aliyun.fc.runtime</groupId>
<artifactId>fc-java-core</artifactId>
<version>1.4.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.aliyun.fc.runtime/fc-java-event -->
<dependency>
<groupId>com.aliyun.fc.runtime</groupId>
<artifactId>fc-java-event</artifactId>
<version>1.2.0</version>
</dependency>
Dependência de empacotamento
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Use o plugin Apache Maven Shade ou o plugin Apache Maven Assembly. O exemplo anterior usa o plugin Apache Maven Shade.
Etapa 2: Desenvolver o código da extensão
Para desenvolver uma extensão no Function Compute, implemente o método handleRequest da interface PojoRequestHandler. Esse método recebe objetos ExtensionRequest e o Context, retornando o resultado do processamento por meio da classe ExtensionResponse .
-
Considere os pontos abaixo durante o desenvolvimento do código.
Analisar o conteúdo da mensagem
Para obter informações sobre o formato das mensagens de evento enviadas pelo DataWorks, consulte Developer reference: Event list and message format. Nesse formato, o campo
messageBodycontém o conteúdo específico da mensagem. Durante o desenvolvimento, use o campomessageBody.eventCodepara identificar o tipo de mensagem e o campomessageIdpara obter os detalhes da mensagem.Lógica de processamento
Escreva a lógica de processamento de mensagens conforme seus requisitos de negócio. Os métodos a seguir podem aumentar a eficiência:
Use o Advanced feature: Configure parameters for an extension. Por exemplo, use o parâmetro
extension.project.disabledpara desativar a extensão em um workspace específico.Ao processar pontos de extensão relacionados ao módulo DataStudio, chame a operação GetIDEEventDetail e use o
MessageIdpara obter um snapshot dos dados no momento em que o evento do ponto de extensão foi acionado.
NotaO parâmetro
MessageIdcorresponde ao campoidna mensagem de evento. Para mais informações, consulte Appendix: Format of messages sent from DataWorks to EventBridge.Resultado do processamento
Ao empacotar o resultado
ExtensionResponse, especifique umCheckResult. O DataWorks lê oCheckResultfinal para determinar se o processo falhou.OK: A verificação da extensão foi aprovada para este evento de ponto de extensão.FAIL: A verificação da extensão falhou para este evento de ponto de extensão. Investigue e resolva o erro para garantir que os processos subsequentes sejam executados conforme esperado.WARN: A verificação da extensão foi aprovada para este evento de ponto de extensão, mas um aviso foi gerado.
Baixe o arquivo de código de exemplo fc_dataworks_demo01-1.0-SNAPSHOT.jar e faça upload dele no Function Compute para validação. O código abaixo fornece mais detalhes:
-
Após desenvolver o código, empacote o programa em um arquivo
.jarou.zipexecutável para o Function Compute.Abra uma janela de linha de comando no editor de código, navegue até o diretório raiz e execute o comando mvn clean package para empacotar o código.
Se a compilação falhar, ajuste o código com base nas mensagens de erro na saída.
Se a compilação for bem-sucedida, o arquivo JAR compilado estará localizado no diretório target do projeto. O nome do arquivo segue os campos artifactId e version definidos no arquivo pom.xml, por exemplo, java-example-1.0-SNAPSHOT.jar.
NotaNo macOS e Linux, certifique-se de que os arquivos de código tenham permissões de leitura e execução antes do empacotamento.
Tarefas do Function Compute
Etapa 1: Implantar a extensão
Faça login no console do Function Compute 2.0 e acesse a página Tasks.
-
Clique em Create Function para criar um service e a função necessária e, em seguida, implante a extensão. Mensagens de eventos específicas da extensão desenvolvida serão enviadas diretamente para este service. Para mais informações, consulte Create a service e Create a function. No painel Create Function, selecione Create with built-in runtimes, escolha Process event requests para o tipo de handler, selecione Upload code via JAR package como método de upload de código e faça upload do pacote de código preparado.
Selecione um ambiente de execução compatível com seu código. O pacote de exemplo fornecido na Etapa 1,
fc_dataworks_demo01-1.0-SNAPSHOT.jar, corresponde ao ambiente Java 8. Baixe o arquivofc_dataworks_demo01-1.0-SNAPSHOT.jarpara o computador local e faça upload dele como o code package. Configure os demais parâmetros conforme necessário.Para mais informações sobre operações de funções, consulte Manage functions.
-
Modifique o handler da função.
Configure o handler diretamente no console do Function Compute. Para funções Java, o formato do handler é
[Nome do pacote].[Nome da classe]::[Nome do método]. Por exemplo:Nome do pacote:
example.Nome da classe:
HelloFC.Nome do método:
handleRequest.
O handler pode ser configurado como
example.HelloFC::handleRequest.NotaO handler padrão no Function Compute é example.App::handleRequest. Modifique o handler de acordo com o seu código real. Para mais informações sobre handlers, consulte Handlers.
Etapa 2: Testar a função
Após criar a função, acesse a página de detalhes da função, clique na aba Code e clique em Test Function. Se a mensagem Execution succeeded for retornada, prossiga com o registro da extensão no DataWorks.
Tarefas do DataWorks
Etapa 1: Registrar a extensão
Após implantar a extensão no Function Compute, registre-a no DataWorks.
-
Faça login no console do DataWorks. Na região desejada, clique em no painel de navegação à esquerda. Clique em Go to Open Platform para abrir a página Developer Backend.
-
Registre a extensão.
No painel de navegação à esquerda, clique em Extensions para acessar a página Extensions.
-
Clique em , selecione Deploy Based on Function Compute e configure as informações da extensão.
Configure os parâmetros conforme suas necessidades. A tabela a seguir descreve os parâmetros disponíveis.
-
Conclua o registro.
Clique em OK. Após concluir o registro, visualize a extensão na List of Extensions.
Etapa 2: Publicar a extensão
Após desenvolver, implantar e registrar a extensão no DataWorks, teste-a, aprove-a e publique-a. Uma vez publicada, administradores que não sejam proprietários da extensão poderão ativá-la no Management Center. Para mais informações, consulte Apply an extension.
Apêndice: Formato de mensagem de evento do DataWorks
O código abaixo apresenta o formato comum de mensagem ao usar o Function Compute. O campo messageBody contém os detalhes do evento do DataWorks e varia conforme o tipo de mensagem.
{
"blockBusiness": true,
"eventCategoryType": "resources-download",// The event category.
"eventType": "upload-data-to-table",// The event type.
"extensionBizId": "job_6603643923728775070",
"messageBody": {
// The message content varies by message type. The following two fields are fixed.
"tenantId": 28378****10656, // The tenant ID. Each Alibaba Cloud account corresponds to a tenant in DataWorks, and each tenant has a unique ID. You can find this ID in the user information section in the upper-right corner of DataStudio.
"eventCode": "xxxx"//
},
"messageId": "52d44ee7-b51f-4d4d-afeb-*******" // The event ID. This is a unique identifier for the event.
}
O conteúdo do campo messageBody varia conforme o tipo de mensagem. Para detalhes sobre mensagens de evento, consulte Developer reference: Event list and message format.
Documentação relacionada
Para mais informações sobre o Function Compute, consulte What is Function Compute?
Também é possível implantar uma extensão usando um service autogerenciado. Para mais informações, consulte Develop and deploy an extension by using a self-managed service.