DataWorks menyediakan pemeriksaan bawaan, seperti tinjauan kode sebelum penerapan tugas dan validasi dari Data Governance Center. Anda juga dapat mengintegrasikan logika validasi kustom untuk menerapkan kontrol proses di DataWorks. Topik ini menjelaskan cara menggunakan extension untuk melarang fungsi tertentu di ruang kerja, dengan contoh yang memeriksa keberadaan fungsi MAX_PT saat pengiriman atau penerapan.
Skenario
Praktik terbaik ini memberikan contoh cara memeriksa keberadaan fungsi MAX_PT dalam kode yang dikirim dan diterapkan. Tabel berikut menjelaskan proses validasi:
|
Langkah |
Proses inti |
Fitur utama |
|
1 |
Open Event mengirim pesan pengiriman dan penerapan file (seperti mengirim dan menerapkan node) dari ruang kerja ke EventBridge. EventBridge kemudian menyaring pesan event tersebut dan mengirimkannya ke layanan Anda. |
Saat Anda mengaktifkan subscription pesan, gunakan aturan event untuk berlangganan jenis event tertentu, seperti pengiriman file (dataworks:FileChange:CommitFile) dan penerapan file (dataworks:FileChange:DeployFile). Untuk detail konfigurasi, lihat Praktik terbaik: (fitur advanced) Larang fungsi MAX_PT. |
|
2 |
Layanan lokal atau online menerima pesan tersebut. Extension dikonfigurasi untuk menangani event sebagai berikut:
|
Untuk detail konfigurasi, lihat Praktik terbaik: (fitur advanced) Larang fungsi MAX_PT. |
Prasyarat
-
EventBridge telah diaktifkan. Untuk informasi selengkapnya, lihat Aktifkan EventBridge.
-
DataWorks telah diaktifkan. Untuk informasi selengkapnya, lihat Aktifkan DataWorks.
-
Ruang kerja DataWorks telah dibuat. Untuk informasi selengkapnya, lihat Buat ruang kerja.
Prosedur
Langkah 1: Konfigurasi custom event bus
-
Masuk ke Konsol EventBridge. Di panel navigasi kiri, klik Event Bus untuk membuka halaman event bus.
-
Klik tombol
untuk Create Custom Event Bus.-
Pada bagian Bus, konfigurasikan Custom Event Bus Name, lalu klik Next step untuk melanjutkan ke konfigurasi sumber event.
-
Klik Skip untuk melewati konfigurasi Event Source, Rule, dan Target Module. Masukkan Description.
-
-
Di panel navigasi kiri, klik Event Bus untuk membuka halaman event bus. Temukan event bus yang telah Anda buat dan klik namanya untuk membuka halaman ikhtisar.
-
Di panel navigasi kiri, klik Event Rules untuk membuka halaman aturan event, lalu klik Create Rule untuk membuat aturan event.
-
Dalam contoh ini, custom EventBridge bus dikonfigurasi untuk menerima pesan event pengiriman file dan penerapan file dari DataWorks. Bagian berikut menjelaskan demo konfigurasi dan parameter utamanya.
-
Configure Basic Information: Sesuaikan nama aturan.
-
Pattern Content.
-
Event Source Type: Pilih custom event source.
-
Event Source: Biarkan bidang ini kosong.
-
Pattern Content: Tulis dalam format JSON. Konfigurasinya sebagai berikut.
{ "source": [ "acs.dataworks" ], "type": [ "dataworks:FileChange:CommitFile", "dataworks:FileChange:DeployFile" ] }-
source: Menentukan identifier nama produk acs.dataworks.
-
type: Menentukan identifier jenis event di bawah produk tersebut. Atur ke dataworks:FileChange:CommitFile dan dataworks:FileChange:DeployFile.
-
-
Event Pattern Debugging: Isi dan ubah nilai source dan type, lalu lakukan uji coba event. Setelah uji coba berhasil, klik Next. Klik Test untuk memverifikasi bahwa event kustom sesuai dengan pola. Jika uji coba berhasil, halaman akan menampilkan Match passed, event can be triggered normally.
-
-
Configure Event Target.
-
Service Type: Pilih HTTPS atau HTTP. Untuk jenis layanan lainnya, lihat Event targets.
-
URL: Masukkan URL yang menerima pesan yang didorong oleh custom bus, misalnya
https://server-address:port/extensions/consumer. -
Body: Pilih Complete Event.
-
Network Type: Pilih Public Network.
-
-
-
Langkah 2: Konfigurasi saluran distribusi event
Masuk ke Konsol DataWorks. Di wilayah target, klik di panel navigasi kiri. Klik Go to Open Platform untuk membuka halaman Developer Backend.
-
Di halaman Developer Backend, klik OpenEvent di panel navigasi kiri. Di halaman yang muncul, klik Add Event Distribution Channel dan konfigurasikan pengaturan di dialog tersebut.
-
Workspace for Event Distribution: Pilih ruang kerja yang telah Anda buat.
-
Custom Bus in Eventbridge for Distribution: Pilih event bus yang dibuat pada Langkah 1.
-
-
Setelah Anda menyimpan saluran distribusi event, di kolom Operation saluran tersebut, klik Enable untuk mengaktifkan saluran distribusi event baru.
Langkah 3: Daftarkan dan konfigurasikan extension
Masuk ke Konsol DataWorks. Di wilayah target, klik di panel navigasi kiri. Klik Go to Open Platform untuk membuka halaman Developer Backend.
-
Di halaman Developer Backend, klik Extension di panel navigasi kiri. Di halaman yang muncul, klik Register Extension dan konfigurasikan pengaturan di dialog tersebut.
-
Metode deployment: Pilih Deploy via self-built service.
-
Daftarkan extension
-
Extension Name: Masukkan nama kustom.
-
Extension Point Event: Pilih Before File Commit dan Before File Deploy.
-
Workspace for Testing: Setelah Anda mengonfigurasi pengaturan ini, Anda dapat menguji extension di ruang kerja yang ditentukan sebelum mengirimkannya.
-
Parameter Configurations for Extension
Anda dapat menggunakan parameter ini untuk mengontrol cakupan extension. Di ruang kerja yang ditentukan:
-
Mengirim node (Before File Commit) tidak memicu validasi extension atau memblokir proses pengiriman.
-
Menerapkan node (Before File Deploy) memicu validasi extension. Jika validasi gagal, proses penerapan diblokir.
Atur ke
extension.project.commit-file.disabled=YourProjectId, di mana YourProjectId adalah ID ruang kerja tempat event titik extension tidak berlaku. -
-
Options for Extension: Digunakan untuk menentukan metode respons saat validasi gagal. Dalam contoh ini, metode respons yang ditentukan mencakup alert dan block.
{ "type":"object", "properties":{ "checkStatus":{ "type":"number", "title":"MAX-PT function check method", "x-decorator":"FormItem", "x-component":"Radio.Group", "x-decorator-props":{ "tooltip":"Description file" }, "x-component-props":{ "dataSource":[ { "value":"WARN", "label":"Warning" }, { "value":"FAIL", "label":"Disabled" } ], "mode":"multiple" } } } }Bidang dalam konfigurasi opsi dijelaskan sebagai berikut:
-
checkStatus: Nama bidang kustom (nama komponen, harus unik) yang ditentukan oleh developer extension dalam konfigurasi opsi. Server extension membaca nilai yang dikonfigurasi oleh administrator ruang kerja untuk ruang kerja tersebut melalui nama bidang ini. -
title: Judul opsi. Untuk nilai-nilainya, lihat contoh parsing dan konfigurasi parameter di Fitur advanced: Konfigurasi opsi extension. Dalam contoh ini, judulnya adalah MAX-PT Function Check Method. -
x-component: Komponen formulir yang digunakan oleh opsi tersebut. Dalam contoh ini, digunakan komponen tombol radio (Radio.Group). -
dataSource: Opsi yang dapat dipilih untuk komponen tombol radio, di manalabeladalah teks yang ditampilkan di UI danvalueadalah identifier yang sesuai. Contoh ini menyediakan dua nilai: Alert (WARN) dan Block (FAIL), yang memungkinkan administrator ruang kerja memilih metode respons saat fungsi MAX_PT terdeteksi selama pengaktifan extension.
Digabungkan dengan kode contoh dalam topik ini, Anda dapat memahami alur nilai
checkStatus: Saat administrator ruang kerja mengaktifkan extension, mereka memilih antara Alert atau Block dari MAX-PT Function Check Method. Server extension membaca konfigurasi ini melaluiGetOptionValueForProject, mengambil pilihan administrator melaluijsonObject.getString("checkStatus"), dan mengembalikan hasilnya ke DataWorks melaluisetCheckResultsebagai callback, yang akan memberikan peringatan atau memblokir proses penerapan node.CatatancheckStatushanyalah satu contoh konfigurasi yang menggunakan komponen tombol radio. Konfigurasi opsi saat ini mendukung tujuh jenis komponen: teks, input satu baris, input multi-baris, dropdown pilihan tunggal, dropdown pilihan ganda, checkbox, dan tombol radio. Untuk jenis komponen lengkap dan metode konfigurasinya, lihat Advanced: Configure extension options. -
-
-
-
Setelah menyelesaikan konfigurasi, klik Determine untuk menyimpan dan mendaftarkan extension.
-
Di kolom Operation extension yang dibuat, klik Submit untuk mengirimkan extension guna ditinjau.
Catatan-
Tinjauan extension dilakukan oleh platform DataWorks. Proses tinjauan biasanya membutuhkan waktu T+3 hari kerja untuk diselesaikan.
-
Untuk menguji extension yang dibuat, konfigurasikan Workspace for Testing.
-
-
Setelah tinjauan disetujui, klik Deploy di kolom Operation untuk mengaktifkan extension secara online.
-
Klik Manage Extensions untuk membuka halaman . Pilih extension yang Anda buat, aktifkan di kolom Enable, lalu klik Settings untuk mengonfigurasi tingkat kontrol penggunaan fungsi MAX_PT di ruang kerja.
Kembangkan dan konfigurasikan extension
EventBridge menerima pesan event DataWorks dalam format JSON melalui permintaan HTTP, mengurai pesan tersebut, lalu mendorongnya ke layanan target. Setelah layanan memproses event tersebut, hasilnya dikembalikan ke DataWorks.
Kode contoh
Kode contoh ini memanggil API UpdateIDEEventResult untuk mengembalikan hasil callback. Kode ini menggunakan parameter messageId dalam API untuk mendapatkan detail event, menjalankan logika untuk menentukan apakah fungsi terlarang digunakan, lalu mengembalikan hasilnya ke DataWorks melalui API UpdateIDEEventResult. Untuk informasi selengkapnya, lihat Kembangkan extension.
Persiapan lingkungan: Java 8, 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 by 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 client
Client client = dataWorksOpenApiClient.createClient();
try {
//Current event parameter information
String messageId = jsonObj.getString("id");
JSONObject data = jsonObj.getObject("data", JSONObject.class);
Long projectId = data.getLong("projectId");
//Initialize event callback
UpdateIDEEventResultRequest updateIDEEventResultRequest = new UpdateIDEEventResultRequest();
updateIDEEventResultRequest.setMessageId(messageId);
updateIDEEventResultRequest.setExtensionCode(extensionParamProperties.getExtensionCode());
//Query the extension point data snapshot when the extension point event was 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 restricted functions
if (content.contains(Constants.CHECK_CODE)) {
//Get the extension option configuration for the workspace
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: fill in according to the actual format configured in DataWorks
String checkStatus = jsonObject.getString("checkStatus");
updateIDEEventResultRequest.setCheckResult(checkStatus);
updateIDEEventResultRequest.setCheckResultTip("Restricted functions found in code");
} else {//Success callback
updateIDEEventResultRequest.setCheckResult(EventCheckEnum.OK.getCode());
updateIDEEventResultRequest.setCheckResultTip(EventCheckEnum.OK.getName());
}
//Callback to DataWorks
UpdateIDEEventResultResponse response = client.updateIDEEventResult(updateIDEEventResultRequest);
//Unique request ID for subsequent troubleshooting
System.out.println("response:" + response.getBody().getRequestId());
} catch (Exception e) {
//Error description
System.out.println("ErrMsg:" + e.getMessage());
}
} else {
System.out.println("Failed to filter other events, please check the configuration steps");
}
}
}
Deploy proyek contoh
-
Siapkan lingkungan dan proyek
-
Lingkungan yang dibutuhkan: Java 8 atau lebih baru, tool build Maven.
-
Tautan unduhan proyek: extensions-demo-maxpt.zip (219 KB).
-
-
Metode deployment
-
Deployment lokal: Kemas proyek sebagai file JAR, lalu jalankan perintah
java -jar yourapp.jardi server lokal yang telah menginstal Java 8 dan Maven untuk memulai layanan. -
Deployment cloud: Kemas proyek sebagai file JAR, lalu unggah ke lingkungan runtime yang sesuai, seperti kontainer Docker atau server cloud, untuk deployment.
CatatanLayanan yang dideploy harus dapat diakses oleh EventBridge melalui Internet.
-
-
Setelah mengunduh proyek, buka direktori root dan jalankan perintah pengemasan untuk membuat file JAR.
mvn clean package -Dmaven.test.skip=true spring-boot:repackage -
Jalankan file JAR:
java -jar target/extensions-demo-maxpt-1.0.jarProyek berhasil dimulai.
/\ / /'---'. __ __ ____ /'\'\\ ( ( )\'---'| '--'| '--'\/'--'| '\ \\\\ \/ /__) | |__| | | |__(___| | ) ) ) ) ' '__| | |__| |'| |___| | / / / / =========|_|===============|__/=/=/_/ :: Spring Boot :: (v2.7.2) 2022-08-22 11:17:35.261 INFO 28648 --- [ main] com.aliyun.dataworks.DemoStarter : Starting DemoStarter v1.0 using Java 1.8.0_151 on xxx.local with PID 28648 (/Users/xxx/ts/extensions-demo-maxpt) ns-demo-maxpt/target/extensions-demo-maxpt-1.0.jar started by guangzhen.zk in /Users/xxx/ts/extensions-demo-maxpt) 2022-08-22 11:17:35.264 INFO 28648 --- [ main] com.aliyun.dataworks.DemoStarter : No active profile set, falling back to 1 default profile: "default" 2022-08-22 11:17:35.276 INFO 28648 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2022-08-22 11:17:36.291 INFO 28648 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2022-08-22 11:17:36.291 INFO 28648 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.65] 2022-08-22 11:17:36.419 INFO 28648 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2022-08-22 11:17:36.419 INFO 28648 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1099 ms 2022-08-22 11:17:36.851 INFO 28648 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2022-08-22 11:17:36.860 INFO 28648 --- [ main] com.aliyun.dataworks.DemoStarter : Started DemoStarter in 1.98 seconds (JVM running for 2.449)Masukkan
http://localhost:8080/indexdi browser. Jika Anda menerima"hello world!", aplikasi berhasil dideploy. Setelah koneksi jaringan terbentuk, Anda dapat berlangganan pesan EventBridge.
Verifikasi hasil
Setelah Anda menyelesaikan deployment kode dan membentuk koneksi jaringan dengan EventBridge, Anda dapat memverifikasi konfigurasi di ruang kerja tempat extension diaktifkan.
Langkah verifikasi
-
Di halaman Data Studio, buat node, tulis fungsi
MAX_PTyang dilarang di node tersebut, simpan dan kirim node. -
Klik tombol Deploy untuk membuka halaman pembuatan paket penyebaran dan terapkan node tersebut. Ini akan memicu validasi extension.
CatatanBerdasarkan konfigurasi extension, extension tidak berlaku untuk event pengiriman file di ruang kerja yang ditentukan. Oleh karena itu, mengirim node yang berisi fungsi
MAX_PTtidak memicu validasi extension. Extension hanya dipicu saat Anda menerapkan node yang berisi fungsiMAX_PT.