All Products
Search
Document Center

DataWorks:Kembangkan dan deploy ekstensi berdasarkan Function Compute

Last Updated:Feb 28, 2026

Di DataWorks, Anda dapat membuat ekstensi kustom untuk memantau tindakan pengguna. Misalnya, Anda dapat mencegat dan memblokir tindakan yang tidak sesuai, atau mengirim notifikasi serta mengelola proses untuk event tertentu. Topik ini menjelaskan cara mengembangkan dan mendeploy ekstensi menggunakan Function Compute.

Informasi latar belakang

Function Compute adalah layanan komputasi yang sepenuhnya dikelola dan berbasis event. Anda dapat mendeploy ekstensi di lingkungan eksekusi Function Compute. DataWorks mendorong pesan event titik ekstensi ke kelas ExtensionRequest. Dalam kode ekstensi Anda, implementasikan metode handleRequest dari antarmuka PojoRequestHandler untuk membuat objek ExtensionRequest yang menerima pesan event dan konteks (Context) dari DataWorks. Anda kemudian dapat menentukan logika pemrosesan ekstensi tersebut dan menggunakan kelas ExtensionResponse untuk mengembalikan hasilnya. DataWorks secara otomatis mengambil hasil dari kelas ExtensionResponse guna menentukan apakah operasi saat ini harus diblokir.

Batasan

  • Hanya pengguna DataWorks Enterprise Edition yang dapat menggunakan modul Extensions.

  • Modul Extensions tersedia di wilayah berikut: Tiongkok (Beijing), Tiongkok (Hangzhou), Tiongkok (Shanghai), Tiongkok (Zhangjiakou), Tiongkok (Shenzhen), Tiongkok (Chengdu), AS (Silicon Valley), AS (Virginia), Jerman (Frankfurt), Jepang (Tokyo), Tiongkok (Hong Kong), dan Singapura.

Peringatan

  • Hanya Open Platform administrator, tenant administrator, akun Alibaba Cloud, dan Pengguna RAM yang memiliki kebijakan AliyunDataWorksFullAccess yang memiliki izin baca dan tulis pada backend developer. Untuk informasi lebih lanjut tentang pengelolaan izin, lihat Kontrol izin modul global dan Kelola akses tingkat produk dan konsol dengan kebijakan RAM.

  • Batasan versi: Jika langganan DataWorks Enterprise Edition Anda kedaluwarsa, semua ekstensi menjadi tidak valid dan tidak dapat lagi memicu pemeriksaan event. Setiap pemeriksaan yang telah dipicu tetapi belum mencapai status akhir akan secara otomatis lolos.

  • Batasan node: Saat pemeriksaan dipicu untuk node komposit yang berisi node internal, seperti node machine learning (PAI), node do-while, atau node for-each, semua node internal harus lolos pemeriksaan sebelum operasi selanjutnya dapat dilanjutkan.

  • Deskripsi pemicu: Beberapa ekstensi dapat dikaitkan dengan event titik ekstensi yang sama. Artinya, satu event dapat memicu beberapa ekstensi.

  • Batasan event: Ekstensi yang dideploy menggunakan Function Compute saat ini hanya mendukung pre-event untuk unduh data.

Proses

Gambar berikut menunjukkan proses dasar bagaimana ekstensi yang dikembangkan dan dideploy menggunakan Function Compute menangani event titik ekstensi.

image
Catatan

Setelah event titik ekstensi dipicu, proses terkait memasuki status Checking dan menunggu hasil dari API callback ekstensi. DataWorks kemudian memutuskan apakah akan memblokir proses berdasarkan hasil tersebut.

Sisi pengguna

Sebelum mendeploy ekstensi Function Compute, Anda harus mengembangkan ekstensi tersebut. Anda dapat menggunakan library fc-java-core untuk menjalankan handler. Paket kode contoh tersedia: fc_dataworks_demo01-1.0-SNAPSHOT.jar. Untuk informasi lebih lanjut, lihat Event Handler.

Langkah 1: Konfigurasikan dependensi ekstensi

Saat mengembangkan ekstensi, tambahkan dependensi berikut ke file pom.xml.

Library dependensi DataWorks

<dependency>
 <groupId>com.aliyun</groupId>
 <artifactId>dataworks_public20200518</artifactId>
 <version>5.6.0</version>
</dependency>

Library dependensi 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>

Pengemasan dependensi

<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>

Anda dapat menggunakan plugin Apache Maven Shade atau plugin Apache Maven Assembly. Contoh di atas menggunakan plugin Apache Maven Shade.

Langkah 2: Kembangkan kode ekstensi

Untuk mengembangkan ekstensi di Function Compute, gunakan antarmuka PojoRequestHandler dan implementasikan metode handleRequest-nya. Metode ini menerima objek ExtensionRequest dan Context. Anda kemudian dapat menentukan logika pemrosesan dan menggunakan kelas ExtensionResponse untuk mengembalikan hasilnya.

  1. Saat mengembangkan kode, perhatikan hal berikut:

    Uraikan konten pesan

    Untuk informasi lebih lanjut tentang format pesan event yang didorong oleh DataWorks, lihat Referensi Pengembangan: Daftar Event dan Format Pesan. Dalam pesan event, bidang messageBody berisi konten pesan. Selama pengembangan, Anda dapat menggunakan bidang messageBody.eventCode untuk mengidentifikasi jenis pesan dan bidang messageId untuk mengambil detail pesan.

    Tulis logika pemrosesan

    Tulis logika untuk memproses jenis pesan tertentu. Selama pengembangan ekstensi, Anda dapat menggunakan metode berikut untuk meningkatkan efisiensi pengembangan dan kinerja aplikasi:

    • Gunakan Fitur lanjutan: Konfigurasikan parameter ekstensi, seperti extension.project.disabled, untuk menonaktifkan ekstensi pada ruang kerja tertentu.

    • Saat memproses titik ekstensi yang terkait dengan modul Data Studio, Anda dapat memanggil API GetIDEEventDetail untuk mengambil snapshot data pada saat event titik ekstensi dipicu berdasarkan MessageId.

    Catatan

    MessageId berkorespondensi dengan bidang id dalam pesan. Untuk informasi lebih lanjut, lihat Lampiran: Format pesan yang dikirim dari DataWorks ke EventBridge.

    Kembalikan hasil pemrosesan ke DataWorks

    Saat membungkus hasil dalam objek ExtensionResponse, tentukan hasil pemrosesan di bidang CheckResult. DataWorks secara otomatis membaca CheckResult akhir untuk menentukan apakah operasi gagal.

    • OK: Ekstensi lolos pemeriksaan untuk event titik ekstensi ini.

    • FAIL: Ekstensi gagal dalam pemeriksaan untuk event titik ekstensi ini. Segera tinjau dan tangani error tersebut untuk mencegah dampak pada eksekusi program selanjutnya.

    • WARN: Ekstensi lolos pemeriksaan untuk event titik ekstensi ini, tetapi dengan peringatan.

    Anda dapat mengunduh paket kode contoh, fc_dataworks_demo01-1.0-SNAPSHOT.jar, dan mengunggahnya ke Function Compute untuk verifikasi dan pengujian. Bagian berikut menyediakan kodenya:

    Detail kode

    APP

    Kode ini mengimplementasikan metode handleRequest menggunakan antarmuka PojoRequestHandler dari Function Compute. Metode ini menerima objek ExtensionRequest dan Context, menentukan logika pemrosesan, lalu mengembalikan hasil sebagai objek ExtensionResponse.

    Contoh kode ini mencegah data diunggah secara manual ke tabel AnalyticDB for MySQL (ADS).

    package com.aliyun.example;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import com.aliyun.dataworks.ExtensionRequest;
    import com.aliyun.dataworks.ExtensionResponse;
    import com.aliyun.fc.runtime.Context;
    import com.aliyun.fc.runtime.PojoRequestHandler;
    
    
    public class App implements PojoRequestHandler<ExtensionRequest, ExtensionResponse> {
    
        public ExtensionResponse handleRequest(ExtensionRequest extensionRequest, Context context) {
            // Cetak konten permintaan untuk debugging.
             System.out.println(JSON.toJSONString(extensionRequest));
            // Buat objek respons.
            ExtensionResponse extensionResponse = new ExtensionResponse();
            // Periksa apakah eventType adalah 'upload-data-to-table'.
            if ("upload-data-to-table".equals(extensionRequest.getEventType())) {
                try {
                    // Ubah messageBody menjadi string lalu uraikan menjadi JSONObject.
                    String messageBodyStr = JSON.toJSONString(extensionRequest.getMessageBody());
                    JSONObject messageBody = JSON.parseObject(messageBodyStr);
                    String tableGuid = messageBody.getString("tableGuid");
                    // Periksa apakah tableGuid mengandung 'ads'.
                    if (tableGuid != null && tableGuid.contains("ads")) {
                        extensionResponse.setCheckResult("FAIL");
                    } else {
                        extensionResponse.setCheckResult("OK");
                    }
                } catch (Exception e) {
                    extensionResponse.setCheckResult("FAIL");
                    extensionResponse.setErrorMessage("Error processing request: " + e.getMessage());
                    return extensionResponse;
                }
            } else {
                extensionResponse.setCheckResult("FAIL");
            }
    
            // Tetapkan pesan error sebagai umpan balik.
            extensionResponse.setErrorMessage("This is a test!");
    
            // Kembalikan objek respons.
            return extensionResponse;
        }
    }
    
    

    ExtensionRequest

    Menentukan struktur permintaan untuk ekstensi agar dapat membungkus pesan event yang dikirim oleh DataWorks.

    public class ExtensionRequest {
        private Object messageBody;
        private String messageId;
        private String extensionBizId;
        private String extensionBizName;
        private String eventType;
        private String eventCategoryType;
        private Boolean blockBusiness;
    
        public ExtensionRequest() {
        }
    
        public Object getMessageBody() {
            return this.messageBody;
        }
    
        public void setMessageBody(Object messageBody) {
            this.messageBody = messageBody;
        }
    
        public String getMessageId() {
            return this.messageId;
        }
    
        public void setMessageId(String messageId) {
            this.messageId = messageId;
        }
    
        public String getExtensionBizId() {
            return this.extensionBizId;
        }
    
        public void setExtensionBizId(String extensionBizId) {
            this.extensionBizId = extensionBizId;
        }
    
        public String getExtensionBizName() {
            return this.extensionBizName;
        }
    
        public void setExtensionBizName(String extensionBizName) {
            this.extensionBizName = extensionBizName;
        }
    
        public String getEventType() {
            return this.eventType;
        }
    
        public void setEventType(String eventType) {
            this.eventType = eventType;
        }
    
        public String getEventCategoryType() {
            return this.eventCategoryType;
        }
    
        public void setEventCategoryType(String eventCategoryType) {
            this.eventCategoryType = eventCategoryType;
        }
    
        public Boolean getBlockBusiness() {
            return this.blockBusiness;
        }
    
        public void setBlockBusiness(Boolean blockBusiness) {
            this.blockBusiness = blockBusiness;
        }
    }

    ExtensionResponse

    Menentukan struktur respons untuk ekstensi agar dapat membungkus hasil pemrosesan.

    public class ExtensionResponse {
        private String checkResult;
        private String errorMessage;
    
        public ExtensionResponse() {
        }
    
        public String getCheckResult() {
            return this.checkResult;
        }
    
        public void setCheckResult(String checkResult) {
            this.checkResult = checkResult;
        }
    
        public String getErrorMessage() {
            return this.errorMessage;
        }
    
        public void setErrorMessage(String errorMessage) {
            this.errorMessage = errorMessage;
        }
    }
  2. Setelah mengembangkan kode, kemas program menjadi paket .jar atau .zip yang dapat dijalankan untuk konfigurasi selanjutnya di Function Compute.

    Buka jendela command line editor kode, alihkan ke direktori root, lalu jalankan perintah mvn clean package untuk mengemas kode.

    • Jika kompilasi gagal, perbaiki kode berdasarkan pesan error yang ditampilkan.

    • Jika kompilasi berhasil, paket JAR yang dikompilasi berada di direktori target folder proyek. Paket tersebut diberi nama java-example-1.0-SNAPSHOT.jar berdasarkan bidang artifactId dan version dalam file pom.xml.

    Catatan

    Untuk sistem operasi macOS dan Linux, pastikan file kode memiliki izin baca dan eksekusi sebelum mengemasnya.

Sisi Function Compute

Langkah 1: Deploy ekstensi

  1. Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Tasks untuk membuka halaman Tasks.

  2. Klik Create Function untuk membuat layanan Function Compute dan fungsi yang diperlukan, serta mendeploy ekstensi. Ekstensi tersebut kemudian akan mengirim pesan event tertentu langsung ke layanan yang dibuat. Untuk informasi lebih lanjut, lihat Buat layanan dan Buat fungsi. Gambar berikut menunjukkan cara mengonfigurasi fungsi.image

    • Pilih lingkungan runtime berdasarkan kode Anda. Jika Anda menggunakan paket contoh fc_dataworks_demo01-1.0-SNAPSHOT.jar yang disediakan di Langkah 1, atur parameter Runtime ke Java 8. Untuk melakukan ini, Anda harus mengunduh paket fc_dataworks_demo01-1.0-SNAPSHOT.jar ke mesin lokal Anda dan mengunggahnya ke Code Package. Anda dapat mengonfigurasi parameter sesuai kebutuhan.

    • Untuk informasi lebih lanjut tentang operasi fungsi, lihat Kelola fungsi.

  3. Ubah titik masuk fungsi

    Di Konsol Function Compute, Anda dapat mengonfigurasi handler (titik masuk fungsi). Untuk fungsi Java, konfigurasikan handler menggunakan format [Nama paket].[Nama kelas]::[Nama metode]. Contohnya:

    • Nama paket: example.

    • Kelas: HelloFC.

    • Metode: handleRequest.

    Handler dapat dikonfigurasi sebagai example.HelloFC::handleRequest.

    Catatan

    Handler default untuk Function Compute adalah example.App::handleRequest. Anda harus mengubah handler sesuai dengan kode Anda. Untuk informasi lebih lanjut, lihat Handler.

Langkah 2: Uji fungsi

Setelah pendaftaran selesai, buka halaman detail fungsi, pilih tab Function Code, lalu klik Test Function. Setelah pesan Execution Successful ditampilkan, Anda dapat kembali ke DataWorks untuk mendaftarkan ekstensi.

Sisi DataWorks

Langkah 1: Daftarkan ekstensi

Setelah mendeploy ekstensi di Function Compute, Anda harus mendaftarkannya di DataWorks dengan langkah-langkah berikut:

  1. Buka tab Developer Backend.

    Masuk ke Konsol DataWorks. Pada bilah navigasi atas, pilih Wilayah yang diinginkan. Di panel navigasi sebelah kiri, pilih More > Open Platform. Pada halaman yang muncul, klik Go to Open Platform. Tab Developer Backend akan ditampilkan.

  2. Daftarkan ekstensi.

    1. Di panel navigasi kiri, klik Extensions.

    2. Klik Extension List > Register Extension, pilih Deploy With Function Compute, lalu konfigurasikan ekstensi.

    Anda dapat mengonfigurasi parameter sesuai kebutuhan. Tabel berikut menjelaskan parameter-parameter tersebut.

    Deskripsi parameter

    Parameter

    Cara mengonfigurasi

    Extension Name

    Nama kustom untuk ekstensi.

    Function Compute Service and Function

    Layanan dan fungsi Function Compute tempat ekstensi dideploy. Ekstensi mengirim pesan event tertentu langsung ke layanan ini.

    Processed Extension Points

    Saat ini, hanya pesan yang dipicu oleh pre-event untuk unduh data, pre-event untuk pencatatan dan pencabutan aset, dan pre-event untuk unggah data yang didukung.

    Catatan

    Setelah Anda membuat pilihan, antarmuka konfigurasi secara otomatis mencocokkan parameter Event dan Applicable Service. Tidak diperlukan konfigurasi manual.

    Owner

    Pemilik ekstensi. Hal ini memungkinkan pengguna menghubungi pemilik jika mengalami masalah.

    Workspace For Testing

    Ruang kerja yang digunakan untuk menguji ekstensi. Ekstensi berlaku di ruang kerja uji tanpa perlu dipublikasikan.

    Sebelum ekstensi dipublikasikan, developer dapat melakukan pengujian end-to-end di ruang kerja uji. Mereka dapat memicu event untuk menguji apakah DataWorks mengirim pesan menggunakan EventBridge dan apakah ekstensi menerima pesan, meninjau, serta mengirim callback.

    Catatan

    Jika Anda memilih event titik ekstensi tingkat tenant untuk Extension Point To Process, Anda tidak perlu mengonfigurasi Workspace For Testing.

    Extension Details Address

    URL halaman yang menyediakan detail ekstensi. Hal ini membantu pengguna memahami dan menggunakan ekstensi dengan lebih baik.

    Saat mengembangkan dan mendeploy ekstensi, Anda dapat membuat halaman detail dan mengonfigurasi URL-nya di sini. Hal ini memungkinkan pengguna melihat proses verifikasi lengkap, seperti jalur pemeriksaan dan alasan pemblokiran, saat pemeriksaan ekstensi dipicu.

    Extension Documentation Address

    URL dokumen bantuan untuk ekstensi. Hal ini memungkinkan pengguna membaca dokumen tersebut.

    Saat mengembangkan dan mendeploy ekstensi, Anda dapat membuat halaman dokumen bantuan dan mengonfigurasi URL-nya di sini. Hal ini memungkinkan pengguna mempelajari logika pemeriksaan dan properti ekstensi.

    Extension Parameter Configuration

    DataWorks memungkinkan Anda menggunakan parameter selama pengembangan ekstensi untuk meningkatkan efisiensi. Tambahkan parameter yang ingin Anda gunakan ke kode ekstensi di sini.

    Anda dapat menggunakan parameter bawaan yang disediakan DataWorks untuk skenario umum atau menentukan parameter kustom sendiri.

    Anda dapat menambahkan beberapa parameter dalam format key=value. Setiap parameter harus berada di baris terpisah. Untuk informasi lebih lanjut tentang cara menggunakan parameter ini, lihat Fitur lanjutan: Konfigurasikan parameter ekstensi.

    Extension Options Configuration

    Item konfigurasi untuk pengguna ekstensi. Item ini memungkinkan manajemen personalisasi ekstensi di ruang kerja berbeda. Developer ekstensi harus menentukan opsi sebagai string JSON di antarmuka ini.

    Sebagai contoh, developer ekstensi dapat memungkinkan pengguna mengelola panjang pernyataan SQL berdasarkan parameter ini. Untuk informasi lebih lanjut tentang format JSON, lihat Fitur lanjutan: Konfigurasikan opsi ekstensi.

  3. Selesaikan pendaftaran ekstensi.

    Klik OK untuk mendaftarkan ekstensi. Ekstensi tersebut kemudian akan muncul di Extension List.

Langkah 2: Publikasikan ekstensi

Setelah ekstensi dikembangkan, dideploy, dan didaftarkan di DataWorks, Anda harus menyelesaikan proses pengujian, persetujuan, dan penerbitan. Setelah itu, administrator selain pemilik ekstensi dapat mengaktifkan ekstensi di Management Center. Untuk informasi lebih lanjut, lihat Terapkan ekstensi.

Lampiran: Format pesan yang dikirim dari DataWorks ke Function Compute

Kode berikut menunjukkan format umum untuk semua jenis pesan di Function Compute. Bidang `messageBody` berisi detail pesan event DataWorks. Konten bidang ini bervariasi tergantung jenis pesan.

{
	"blockBusiness": true,
	"eventCategoryType": "resources-download",// Kategori event
	"eventType": "upload-data-to-table",// Jenis event
	"extensionBizId": "job_6603643923728775070",
	"messageBody": {
             // Konten pesan bervariasi tergantung jenis pesan. Berikut adalah dua bidang tetap dalam pesan.
             "tenantId": 28378****10656,// ID tenant. Setiap Akun Alibaba Cloud berkorespondensi dengan satu tenant di DataWorks, dan setiap tenant memiliki ID unik. Anda dapat melihat nilai ini di bagian informasi pengguna di pojok kanan atas halaman Pengembangan Data di DataWorks.
             "eventCode": "xxxx"//
	},
	"messageId": "52d44ee7-b51f-4d4d-afeb-*******"// ID event. Nilai unik yang mengidentifikasi event.
}
Catatan

Konten bidang messageBody bervariasi tergantung jenis pesan. Untuk informasi lebih lanjut tentang konten pesan event, lihat Referensi pengembangan: Daftar event dan format pesan.

Referensi