All Products
Search
Document Center

DataWorks:Kembangkan dan deploy ekstensi: Function Compute

Last Updated:Jun 21, 2026

Di DataWorks, Anda dapat menggunakan ekstensi untuk menentukan logika kustom guna memantau operasi pengguna. Fitur ini memungkinkan Anda mengintersepsi dan memblokir tindakan yang tidak sesuai, mengirim notifikasi untuk event tertentu, serta mengelola alur kerja. Topik ini menjelaskan cara mengembangkan dan mendeploy ekstensi menggunakan Function Compute.

Informasi latar belakang

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

Batasan

  • Hanya pengguna DataWorks Edisi Perusahaan yang dapat menggunakan modul Ekstensi.

  • Modul Ekstensi 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.

Catatan

  • Hanya Open Platform administrator, tenant administrator, akun Alibaba Cloud, dan Pengguna RAM yang memiliki kebijakan AliyunDataWorksFullAccess yang dilampirkan yang memiliki izin baca dan tulis pada backend developer. Untuk informasi lebih lanjut tentang pengelolaan izin, lihat Kontrol izin untuk layanan global dan Kebijakan RAM untuk izin layanan dan konsol.

  • Batasan versi: Jika langganan DataWorks Edisi Perusahaan Anda kedaluwarsa, semua ekstensi menjadi tidak aktif dan tidak dapat lagi dipicu untuk pemeriksaan event. Setiap pemeriksaan yang telah dipicu tetapi belum mencapai status akhir akan secara otomatis dilewati.

  • Batasan node: Saat node komposit yang berisi node internal—seperti node Platform for AI, node do-while, atau node for-each—memicu pemeriksaan, semua node internal harus lolos pemeriksaan sebelum operasi selanjutnya dapat dilanjutkan.

  • Pemicuan: Anda dapat mengaitkan beberapa ekstensi dengan event titik ekstensi yang sama. Artinya, satu event dapat memicu beberapa ekstensi.

  • Batasan event: Ekstensi yang dideploy menggunakan Function Compute saat ini mendukung pre-event untuk unduh data, pre-event untuk publikasi dan pembatalan publikasi aset, serta pre-event untuk unggah data.

Cara kerja

Gambar berikut menunjukkan alur kerja dasar bagaimana ekstensi yang dikembangkan dan dideploy menggunakan Function Compute memproses event titik ekstensi.

Catatan

Setelah event titik ekstensi dipicu, proses terkait memasuki status Checking sambil menunggu ekstensi mengembalikan hasil melalui callback API. Proses tetap dalam status ini hingga ekstensi mengirim hasil ke DataWorks. Berdasarkan hasil yang dikembalikan, DataWorks menentukan apakah akan memblokir proses tersebut.

Tugas developer

Anda harus mengembangkan ekstensi sebelum mendeploynya di Function Compute. Gunakan library fc-java-core untuk menjalankan handler. Kode contoh disediakan dalam file fc_dataworks_demo01-1.0-SNAPSHOT.jar. Untuk informasi lebih lanjut, lihat Event handlers.

Langkah 1: Konfigurasikan dependensi ekstensi

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

Dependensi DataWorks

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

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>

Dependensi pengemasan

<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, Anda harus menggunakan antarmuka PojoRequestHandler untuk mengimplementasikan metode handleRequest. Metode ini menerima permintaan dari kelas ExtensionRequest dan Context. Anda kemudian dapat menentukan logika pemrosesan ekstensi dan mengembalikan hasil menggunakan kelas ExtensionResponse .

  1. Pertimbangkan poin-poin berikut saat mengembangkan kode.

    Uraikan konten pesan

    Untuk informasi tentang format pesan event yang didorong oleh DataWorks, lihat Referensi developer: Daftar event dan format pesan. Dalam format pesan, messageBody berisi konten spesifik pesan tersebut. Selama pengembangan, Anda dapat menggunakan bidang messageBody.eventCode untuk mengidentifikasi jenis pesan dan bidang messageId untuk mendapatkan detail pesan.

    Logika pemrosesan

    Tulis logika pemrosesan pesan berdasarkan kebutuhan bisnis Anda. Selama pengembangan, Anda dapat menggunakan metode berikut untuk meningkatkan efisiensi dan efektivitas:

    • Gunakan Fitur lanjutan: Konfigurasikan parameter untuk ekstensi. Misalnya, Anda dapat menggunakan parameter extension.project.disabled untuk menonaktifkan ekstensi pada ruang kerja tertentu.

    • Saat memproses titik ekstensi yang terkait dengan modul DataStudio, panggil operasi GetIDEEventDetail dan gunakan MessageId untuk mendapatkan snapshot data saat event titik ekstensi dipicu.

    Catatan

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

    Hasil pemrosesan

    Saat mengemas hasil ExtensionResponse, Anda harus menentukan CheckResult. DataWorks secara otomatis membaca CheckResult akhir untuk menentukan apakah proses gagal.

    • OK: Pemeriksaan ekstensi lolos untuk event titik ekstensi ini.

    • FAIL: Pemeriksaan ekstensi gagal untuk event titik ekstensi ini. Anda harus menyelidiki dan menyelesaikan error tersebut agar proses selanjutnya berjalan sesuai harapan.

    • WARN: Pemeriksaan ekstensi lolos untuk event titik ekstensi ini, tetapi peringatan dihasilkan.

    Anda dapat mengunduh file kode contoh fc_dataworks_demo01-1.0-SNAPSHOT.jar dan mengunggahnya ke Function Compute untuk verifikasi. Kode berikut memberikan detail lebih lanjut:

    Detail kode

    App.java

    Kode ini mengimplementasikan antarmuka PojoRequestHandler dan metode handleRequest-nya untuk menerima permintaan bertipe ExtensionRequest dan Context. Kode ini menentukan logika pemrosesan dan mengembalikan hasil menggunakan tipe ExtensionResponse .

    Kode contoh ini melarang pengunggahan data secara manual ke tabel 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 {
                    // Konversi messageBody ke string lalu uraikan menjadi JSONObject.
                    String messageBodyStr = JSON.toJSONString(extensionRequest.getMessageBody());
                    JSONObject messageBody = JSON.parseObject(messageBodyStr);
                    String tableGuid = messageBody.getString("tableGuid");
                    // Periksa apakah tableGuid berisi '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 untuk umpan balik.
            extensionResponse.setErrorMessage("This is a test!");
            // Kembalikan objek respons.
            return extensionResponse;
        }
    }
    

    ExtensionRequest.java

    Menentukan struktur permintaan untuk ekstensi. Ini digunakan untuk mengenkapsulasi 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.java

    Menentukan struktur respons untuk ekstensi. Ini digunakan untuk mengenkapsulasi hasil pemrosesan ekstensi.

    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 file .jar atau .zip yang dapat dijalankan untuk Function Compute.

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

    • Jika kompilasi gagal, sesuaikan kode berdasarkan pesan error pada output.

    • Jika kompilasi berhasil, file JAR yang dikompilasi berada di direktori target proyek. Nama file tersebut didasarkan pada bidang artifactId dan version dalam file pom.xml, misalnya java-example-1.0-SNAPSHOT.jar.

    Catatan

    Pada macOS dan Linux, pastikan file kode memiliki izin baca dan eksekusi sebelum pengemasan.

Tugas Function Compute

Langkah 1: Deploy ekstensi

  1. Masuk ke Konsol Function Compute 2.0 dan buka halaman Tugas.

  2. Klik Create Function untuk membuat layanan dan fungsi yang diperlukan, lalu deploy ekstensi. Pesan event spesifik dari ekstensi yang dikembangkan dikirim langsung ke layanan ini. Untuk informasi lebih lanjut, lihat Buat layanan dan Buat fungsi. Di panel Create Function, pilih Create with built-in runtimes, pilih Process event requests sebagai tipe handler, pilih Upload code via JAR package sebagai metode unggah kode, lalu unggah paket kode yang telah disiapkan.

    • Pilih lingkungan runtime berdasarkan kode Anda. Paket contoh yang disediakan di Langkah 1, fc_dataworks_demo01-1.0-SNAPSHOT.jar, sesuai dengan lingkungan Java 8. Anda harus mengunduh fc_dataworks_demo01-1.0-SNAPSHOT.jar ke komputer lokal Anda dan mengunggahnya sebagai code package. Konfigurasikan parameter lain sesuai kebutuhan Anda.

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

  3. Ubah handler fungsi.

    Anda dapat mengonfigurasi handler di Konsol Function Compute. Untuk fungsi Java, format handler adalah [Nama paket].[Nama kelas]::[Nama metode]. Contohnya:

    • Nama paket: example.

    • Nama kelas: HelloFC.

    • Nama metode: handleRequest.

    Handler dapat dikonfigurasi sebagai example.HelloFC::handleRequest.

    Catatan

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

Langkah 2: Uji fungsi

Setelah membuat fungsi, buka halaman detail fungsi, klik tab Code, lalu klik Test Function. Jika pesan Execution succeeded dikembalikan, Anda dapat melanjutkan ke pendaftaran ekstensi di DataWorks.

Tugas DataWorks

Langkah 1: Daftarkan ekstensi

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

  1. Masuk ke Konsol DataWorks. Di wilayah target, klik More > Open Platform di panel navigasi kiri. Klik Go to Open Platform untuk membuka halaman Developer Backend.

  2. Daftarkan ekstensi.

    1. Di panel navigasi kiri, klik Extensions untuk membuka halaman Extensions.

    2. Klik List of Extensions > Register Extension, pilih Deploy Based on Function Compute, lalu konfigurasikan informasi ekstensi.

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

    Parameter

    Parameter

    Deskripsi

    Extension Name

    Nama kustom untuk mengidentifikasi ekstensi.

    Function Compute Service and Function

    Pilih layanan dan fungsi Function Compute untuk ekstensi. Pesan event dikirim ke layanan ini.

    Processed Extension Points

    Hanya pesan yang dipicu oleh pre-event untuk unduh data, pre-event untuk publikasi dan pembatalan publikasi aset, dan pre-event untuk unggah data yang dapat diproses.

    Catatan

    Setelah Anda melakukan pemilihan, bidang Event dan Applicable Service akan diisi secara otomatis. Anda tidak perlu mengonfigurasinya secara manual.

    Owner

    Pemilik ekstensi, yang dapat dihubungi pengguna jika mengalami masalah.

    Workspace for Testing

    Pilih ruang kerja untuk menguji ekstensi. Ekstensi aktif di ruang kerja uji tanpa perlu dipublikasikan.

    Sebelum mempublikasikan ekstensi, developer dapat melakukan pengujian end-to-end di ruang kerja uji. Dengan memicu event, Anda dapat menguji apakah DataWorks mengirim pesan melalui EventBridge dan apakah ekstensi menerima, meninjau, serta memberikan callback untuk pesan tersebut.

    Catatan

    Jika Anda memilih event titik ekstensi tingkat tenant untuk Processed Extension Points, Anda tidak perlu mengonfigurasi Workspace for Testing.

    Extension Details Address

    Masukkan URL halaman yang menjelaskan detail ekstensi. Hal ini membantu pengguna memahami dan menggunakan ekstensi.

    Anda dapat membuat halaman detail selama pengembangan dan memberikan URL-nya di sini. Hal ini memungkinkan pengguna melihat proses validasi lengkap saat pemeriksaan dipicu, seperti alur pemeriksaan dan alasan pemblokiran.

    Extension Documentation Address

    Masukkan URL dokumentasi bantuan ekstensi.

    Anda dapat membuat halaman dokumentasi selama pengembangan dan memberikan URL-nya di sini. Hal ini membantu pengguna memahami logika validasi dan properti ekstensi.

    Parameters for Extension

    DataWorks memungkinkan Anda menggunakan parameter untuk meningkatkan efisiensi pengembangan dan aplikasi. Tambahkan parameter yang diperlukan di sini selama pengembangan kode.

    Anda dapat menggunakan parameter bawaan untuk kasus penggunaan umum atau menentukan sendiri.

    Anda dapat menambahkan beberapa parameter, dengan satu parameter per baris dalam format key=value. Untuk informasi lebih lanjut tentang cara menggunakan parameter, lihat Aplikasi lanjutan: Konfigurasikan parameter ekstensi.

    Options for Extension

    Masukkan opsi konfigurasi yang tersedia bagi pengguna. Opsi ini memungkinkan kontrol personalisasi ekstensi di ruang kerja berbeda. Developer ekstensi harus menentukan opsi ini sebagai string JSON di antarmuka ini.

    Sebagai contoh, Anda dapat menggunakan opsi untuk memungkinkan pengguna mengontrol panjang maksimum SQL. Untuk format JSON, lihat Aplikasi lanjutan: Konfigurasikan opsi ekstensi.

  3. Selesaikan pendaftaran.

    Klik OK. Setelah pendaftaran selesai, Anda dapat melihat ekstensi di List of Extensions.

Langkah 2: Publikasikan ekstensi

Setelah mengembangkan, mendeploy, dan mendaftarkan ekstensi di DataWorks, Anda harus mengujinya, menyetujuinya, lalu mempublikasikannya. Setelah dipublikasikan, administrator selain pemilik ekstensi dapat mengaktifkan ekstensi di Management Center. Untuk informasi lebih lanjut, lihat Terapkan ekstensi.

Lampiran: Format pesan event DataWorks

Kode berikut menunjukkan format pesan umum untuk jenis pesan saat menggunakan Function Compute. messageBody berisi detail event DataWorks. Konten body pesan 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 berdasarkan jenis pesan. Dua bidang berikut bersifat tetap.
             "tenantId": 28378****10656, // ID tenant. Setiap Akun Alibaba Cloud berkorespondensi dengan satu tenant di DataWorks, dan setiap tenant memiliki ID unik. Anda dapat menemukan ID ini di bagian informasi pengguna di pojok kanan atas DataStudio.
             "eventCode": "xxxx"//
	},
	"messageId": "52d44ee7-b51f-4d4d-afeb-*******" // ID event. Ini adalah pengenal unik untuk event tersebut.
}
Catatan

Konten bidang messageBody bervariasi tergantung jenis pesan. Untuk detail tentang pesan event, lihat Referensi developer: Daftar event dan format pesan.

Dokumentasi terkait