DataWorks menyediakan pemeriksaan proses bawaan, seperti tinjauan kode sebelum penerapan tugas dan pemeriksaan bawaan untuk item tata kelola di pusat Data Governance. DataWorks juga mendukung logika pemeriksaan kustom yang dapat Anda integrasikan untuk mengelola proses DataWorks. Topik ini menggunakan contoh pemeriksaan keberadaan fungsi MAX_PT dalam kode saat commit dan penerapan untuk menunjukkan cara menggunakan ekstensi guna melarang penggunaan fungsi tertentu di ruang kerja.
Deskripsi skenario
Praktik terbaik ini memberikan contoh pemeriksaan keberadaan fungsi MAX_PT dalam kode yang dikomit dan dipublikasikan. Proses pemeriksaannya adalah sebagai berikut:
No. | Proses inti | Fitur inti |
1 | Kirim pesan commit dan publikasi file dari ruang kerja ke EventBridge melalui OpenEvent. EventBridge kemudian memfilter pesan tersebut dan meneruskannya ke layanan Anda. | Saat Anda mengaktifkan langganan pesan, tentukan jenis event sebagai commit file dan publikasi file (dataworks:FileChange:CommitFile dan dataworks:FileChange:DeployFile) dalam aturan event. Untuk informasi selengkapnya, lihat Praktik terbaik: Larang penggunaan fungsi MAX_PT (Lanjutan). |
2 | Layanan lokal atau online menerima pesan tersebut. Konfigurasikan ekstensi untuk mencapai hasil berikut:
|
Untuk informasi selengkapnya, lihat Praktik terbaik: Larang penggunaan fungsi MAX_PT (Lanjutan). |
Prasyarat
EventBridge telah diaktifkan. Untuk informasi selengkapnya, lihat Billing.
DataWorks telah diaktifkan. Untuk informasi selengkapnya, lihat Panduan pembelian.
Ruang kerja telah dibuat di DataWorks. Untuk informasi selengkapnya, lihat Buat ruang kerja.
Prosedur
Langkah 1: Konfigurasikan event bus kustom
Masuk ke konsol EventBridge. Di panel navigasi kiri, klik Event Buses untuk membuka halaman pembuatan event bus.
Klik tombol
Create Custom Event Bus.Pada modul Bus, atur Custom Event Bus Name dan klik Next untuk mengonfigurasi sumber event.
Klik Skip untuk melewati konfigurasi Event Source, Rule, dan Target Module.

Di panel navigasi kiri, klik Event Buses untuk menuju halaman Event Buses. Temukan event bus yang telah Anda buat dan klik namanya untuk membuka halaman ikhtisar.
Di panel navigasi kiri, klik Event Rules. Lalu, klik Create Rule.
Dalam praktik terbaik ini, event bus EventBridge kustom dikonfigurasi untuk menerima pesan event commit file dan publikasi file dari DataWorks. Konfigurasi parameter intinya adalah sebagai berikut.
Configure Basic Information: Tentukan nama untuk aturan kustom.
Practice Mode Content
Untuk Event Source Type, pilih Custom event source.
Event Source: Anda tidak perlu mengonfigurasi parameter ini.
Pattern Content: Masukkan konten dalam format JSON sebagai berikut.
{ "source": [ "acs.dataworks" ], "type": [ "dataworks:FileChange:CommitFile", "dataworks:FileChange:DeployFile" ] }source: Identifier nama produk event. Atur nilai ini menjadi acs.dataworks.
type: Identifier jenis event untuk produk. Atur nilai ini menjadi dataworks:FileChange:CommitFile dan dataworks:FileChange:DeployFile.
Event Pattern Debugging: Tambahkan atau ubah nilai untuk source dan type, lalu uji event tersebut. Jika pengujian berhasil, klik Next.

Configure Event Target.
Service Type: Pilih HTTPS atau HTTP. Untuk informasi selengkapnya, lihat Manage event rules.
URL: Masukkan URL untuk menerima pesan yang didorong dari event bus kustom. Contohnya,
https://server_address:port_number/extensions/consumer.Untuk Body, pilih Complete event.
Atur Network Type ke Public Network.

Langkah 2: Konfigurasikan saluran distribusi event
Buka tab Developer Backend.
Masuk ke Konsol DataWorks. Di bilah navigasi atas, pilih wilayah yang diinginkan. Di panel navigasi kiri, pilih . Di halaman yang muncul, klik Go to Open Platform. Tab Developer Backend akan muncul.
Di halaman Developer Backend, klik OpenEvent di panel navigasi kiri. Di halaman yang muncul, klik Add Event Distribution Channel dan konfigurasikan parameter dalam dialog.
Workspace for Event Distribution: Pilih ruang kerja yang telah Anda buat.
Custom EventBridge Bus for Distribution: Pilih event bus yang telah Anda buat di Langkah 1.
Setelah menyimpan saluran distribusi event, temukan saluran tersebut dan klik Enable di kolom Actions.

Langkah 3: Daftarkan dan konfigurasikan ekstensi (Extension)
Buka tab Developer Backend.
Masuk ke Konsol DataWorks. Di bilah navigasi atas, pilih wilayah yang diinginkan. Di panel navigasi kiri, pilih . Di halaman yang muncul, klik Go to Open Platform. Tab Developer Backend akan muncul.
Di halaman Developer Backend, klik Extensions di panel navigasi kiri. Lalu, klik Register Extension dan konfigurasikan parameter dalam dialog.
Metode penerapan: Pilih Deploy using a self-built service.
Daftarkan ekstensi
Extension Name: Masukkan nama kustom.
Untuk Processed Extension Points, pilih Pre-event For File Commit dan Pre-event For File Publish.
Test Workspace: Menentukan ruang kerja tempat Anda dapat menguji ekstensi setelah dibuat tetapi sebelum diajukan.
Extension Parameter Configuration
Anda dapat menggunakan parameter ini untuk mengontrol cakupan ekstensi. Di ruang kerja yang ditentukan:
Saat node dikomit (Pre-event for File Commit), proses commit tidak diblokir karena pemeriksaan ekstensi tidak dipicu.
Saat node dipublikasikan, event Pre-event for File Publish memicu pemeriksaan ekstensi. Jika kondisi pemeriksaan tidak terpenuhi, proses publikasi diblokir.
Konfigurasikan parameter sebagai
extension.project.commit-file.disabled=YourProjectId. Ganti YourProjectId dengan ID ruang kerja tempat Anda ingin menonaktifkan ekstensi untuk event tertentu.Extension Option Configuration: Menentukan metode tanggapan, seperti Alert atau Disable, yang digunakan ketika kondisi pemeriksaan tidak terpenuhi.
{ "type":"object", "properties":{ "checkStatus":{ "type":"number", "title":"Check method for MAX-PT function", "x-decorator":"FormItem", "x-component":"Radio.Group", "x-decorator-props":{ "tooltip":"Description file" }, "x-component-props":{ "dataSource":[ { "value":"WARN", "label":"Alert" }, { "value":"FAIL", "label":"Disable" } ], "mode":"multiple" } } } }
Setelah menyelesaikan konfigurasi, klik OK untuk menyimpan ekstensi yang terdaftar.
Di kolom Actions untuk ekstensi, klik Submit untuk memulai proses peninjauan.
CatatanEkstensi akan ditinjau oleh platform DataWorks. Peninjauan biasanya memerlukan waktu tiga hari kerja. Harap bersabar.
Untuk menguji ekstensi yang Anda buat, Anda harus mengonfigurasi Test Workspace.
Setelah ekstensi disetujui, klik Publish di kolom Actions untuk mempublikasikannya.
Klik tombol Extension Management untuk menuju halaman . Pilih ekstensi yang Anda buat, aktifkan di kolom Enable, dan klik Settings untuk mengonfigurasi tingkat kontrol fungsi MAX_PT di ruang kerja.

Kembangkan dan konfigurasikan ekstensi
EventBridge menerima event berformat JSON yang dikirim dari DataWorks melalui permintaan HTTP, mengurai pesan tersebut, dan mendorongnya ke program layanan tujuan. Setelah memproses event, program tersebut mengembalikan hasilnya ke DataWorks.
Kode contoh
Kode contoh ini memanggil API UpdateIDEEventResult untuk mengirim hasil sebagai callback. Kode ini menggunakan parameter messageId dalam API untuk mengambil informasi detail event, lalu melakukan pemeriksaan logis untuk menentukan apakah fungsi terlarang termasuk di dalamnya. Hasil pemeriksaan dikembalikan ke DataWorks menggunakan UpdateIDEEventResult. Untuk informasi selengkapnya, lihat Develop an extension.
Lingkungan: Java 8 dan tool build Maven.
package com.aliyun.dataworks.demo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.dataworks.config.Constants;
import com.aliyun.dataworks.config.EventCheckEnum;
import com.aliyun.dataworks.config.ExtensionParamProperties;
import com.aliyun.dataworks.services.DataWorksOpenApiClient;
import com.aliyun.dataworks_public20200518.Client;
import com.aliyun.dataworks_public20200518.models.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author dataworks demo
*/
@RestController
@RequestMapping("/extensions")
public class ExtensionsController {
@Autowired(required = false)
private DataWorksOpenApiClient dataWorksOpenApiClient;
@Autowired
private ExtensionParamProperties extensionParamProperties;
/**
* Receive messages pushed from EventBridge.
*
* @param jsonParam
*/
@PostMapping("/consumer")
public void consumerEventBridge(@RequestBody String jsonParam) {
JSONObject jsonObj = JSON.parseObject(jsonParam);
String eventCode = jsonObj.getString(Constants.EVENT_CODE_FILED);
if (Constants.COMMIT_FILE_EVENT_CODE.equals(eventCode) || Constants.DEPLOY_FILE_EVENT_CODE.equals(eventCode)) {
// Initialize the client.
Client client = dataWorksOpenApiClient.createClient();
try {
// Information about the parameters for the current event.
String messageId = jsonObj.getString("id");
JSONObject data = jsonObj.getObject("data", JSONObject.class);
Long projectId = data.getLong("projectId");
// Initialize the event callback.
UpdateIDEEventResultRequest updateIDEEventResultRequest = new UpdateIDEEventResultRequest();
updateIDEEventResultRequest.setMessageId(messageId);
updateIDEEventResultRequest.setExtensionCode(extensionParamProperties.getExtensionCode());
// Query the data snapshot of the extension point when the extension point event is triggered.
GetIDEEventDetailRequest getIDEEventDetailRequest = new GetIDEEventDetailRequest();
getIDEEventDetailRequest.setMessageId(messageId);
getIDEEventDetailRequest.setProjectId(projectId);
GetIDEEventDetailResponse getIDEEventDetailResponse = client.getIDEEventDetail(getIDEEventDetailRequest);
String content = getIDEEventDetailResponse.getBody().getEventDetail().getCommittedFile().getContent();
// Check whether the code contains the restricted function.
if (content.contains(Constants.CHECK_CODE)) {
// Obtain the configuration of the extension options in the project.
GetOptionValueForProjectRequest getOptionValueForProjectRequest = new GetOptionValueForProjectRequest();
getOptionValueForProjectRequest.setProjectId(String.valueOf(projectId));
getOptionValueForProjectRequest.setExtensionCode(extensionParamProperties.getExtensionCode());
GetOptionValueForProjectResponse getOptionValueForProjectResponse = client.getOptionValueForProject(getOptionValueForProjectRequest);
JSONObject jsonObject = JSON.parseObject(getOptionValueForProjectResponse.getBody().getOptionValue());
// Note: You must fill in the format based on the actual settings in DataWorks.
String checkStatus = jsonObject.getString("checkStatus");
updateIDEEventResultRequest.setCheckResult(checkStatus);
updateIDEEventResultRequest.setCheckResultTip("The code contains a restricted function.");
} else {// Successful callback.
updateIDEEventResultRequest.setCheckResult(EventCheckEnum.OK.getCode());
updateIDEEventResultRequest.setCheckResultTip(EventCheckEnum.OK.getName());
}
// Callback to DataWorks.
UpdateIDEEventResultResponse response = client.updateIDEEventResult(updateIDEEventResultRequest);
// The unique identifier of the request, used for subsequent troubleshooting.
System.out.println("response:" + response.getBody().getRequestId());
} catch (Exception e) {
// Error description message.
System.out.println("ErrMsg:" + e.getMessage());
}
} else {
System.out.println("Failed to filter other events. Check the configuration steps.");
}
}
}
Penerapan proyek contoh
Persiapkan lingkungan dan proyek
Dependencies: Java 8 atau versi lebih baru, tool build Maven.
Tautan unduhan proyek: extensions-demo-maxpt.zip (219 KB).
Metode penerapan
Penerapan lokal: Kemas proyek menjadi file JAR. Di server lokal tempat Java 8 dan tool Maven diterapkan, jalankan perintah
java -jar yourapp.jaruntuk menjalankan program layanan.Penerapan di platform cloud: Kemas proyek menjadi file JAR dan unggah ke lingkungan runtime, seperti kontainer Docker atau instans Elastic Compute Service (ECS), untuk penerapan.
CatatanLayanan yang diterapkan harus dapat diakses dari EventBridge melalui jaringan publik.
Setelah mengunduh proyek, buka direktori root proyek dan jalankan perintah pengemasan untuk mengemas proyek menjadi file JAR.
mvn clean package -Dmaven.test.skip=true spring-boot:repackageJalankan file JAR:
java -jar target/extensions-demo-maxpt-1.0.jarProyek berhasil dimulai, seperti yang ditunjukkan pada gambar berikut.
Masukkan http://localhost:8080/indexdi browser. Jika"hello world!"dikembalikan, aplikasi berhasil diterapkan. Setelah jaringan terhubung, Anda dapat berlangganan pesan dari EventBridge.
Verifikasi hasil
Setelah Anda menerapkan kode dan menghubungkan jaringan ke EventBridge, Anda dapat memverifikasi hasilnya di ruang kerja tempat ekstensi diaktifkan.
Langkah verifikasi
Di halaman Data Development, buat node. Di node tersebut, edit kode agar menyertakan fungsi terlarang
MAX_PT, lalu simpan dan komit.Klik tombol Publish. Di halaman Create Deployment Package, publikasikan node tersebut. Tindakan ini memicu pemeriksaan ekstensi.
CatatanEkstensi dikonfigurasi untuk mengabaikan event commit file di ruang kerja tertentu. Oleh karena itu, pemeriksaan ekstensi tidak dipicu saat Anda mengomit node yang berisi fungsi
MAX_PT. Pemeriksaan dipicu saat Anda mempublikasikan node yang berisi fungsiMAX_PT.