DataWorks menyediakan pemeriksaan bawaan, seperti tinjauan kode sebelum penerapan tugas dan validasi dari Pusat Tata Kelola Data. Anda juga dapat mengintegrasikan logika validasi kustom untuk menerapkan kontrol proses di DataWorks. Topik ini menjelaskan cara menggunakan ekstensi untuk melarang fungsi tertentu di ruang kerja, dengan contoh yang memeriksa keberadaan fungsi MAX_PT selama commit atau penerapan.
Skenario
Praktik terbaik ini memberikan contoh cara memeriksa keberadaan fungsi MAX_PT dalam kode yang dikomit dan diterapkan.
|
Langkah |
Proses inti |
Fitur utama |
|
1 |
OpenEvent mengirim pesan commit file dan penerapan file dari ruang kerja ke EventBridge. EventBridge kemudian menyaring pesan event tersebut dan mengirimkannya ke layanan Anda. |
Saat Anda mengaktifkan subscription pesan, Anda menggunakan aturan event untuk berlangganan jenis event tertentu, seperti commit file (dataworks:FileChange:CommitFile) dan penerapan file (dataworks:FileChange:DeployFile). Untuk detail konfigurasi, lihat Praktik terbaik: (Fitur lanjutan) Larang penggunaan fungsi MAX_PT. |
|
2 |
Layanan lokal atau online menerima pesan tersebut. Ekstensi dikonfigurasi untuk menangani event sebagai berikut:
|
Untuk detail konfigurasi, lihat Praktik terbaik: (Fitur lanjutan) Larang penggunaan fungsi MAX_PT. |
Prasyarat
-
Anda telah mengaktifkan EventBridge. Untuk informasi lebih lanjut, lihat Penagihan.
-
Anda telah mengaktifkan DataWorks. Untuk informasi lebih lanjut, lihat Panduan pembelian.
-
Anda telah membuat ruang kerja di DataWorks. Untuk informasi lebih lanjut, lihat Buat ruang kerja.
Prosedur
Langkah 1: Konfigurasikan event bus kustom
-
Masuk ke Konsol EventBridge. Di panel navigasi kiri, klik Event Bus.
-
Klik ikon
untuk Create Custom Event Bus.-
Pada bagian Event Bus, masukkan Name untuk event bus kustom, lalu klik Next step untuk mengonfigurasi sumber event.
-
Klik Skip untuk melewati konfigurasi Event Source, Rule, dan Target. Anda juga harus memasukkan Description.
-
-
Di panel navigasi kiri, klik Event Bus. 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 didefinisikan untuk menerima pesan event commit file dan penerapan file dari DataWorks. Contoh berikut menunjukkan pengaturan parameter inti.
-
Configure basic info: Tentukan nama kustom untuk aturan tersebut.
-
Configure event pattern.
-
Event Source Type: Pilih Custom Event Source.
-
Event Source: Biarkan tidak dikonfigurasi.
-
Pattern content: Masukkan konten berikut dalam format JSON.
{ "source": [ "acs.dataworks" ], "type": [ "dataworks:FileChange:CommitFile", "dataworks:FileChange:DeployFile" ] }-
source: Menentukan identifier nama produk event, yaitu acs.dataworks.
-
type: Menentukan identifier jenis event untuk produk tersebut. Atur parameter ini ke dataworks:FileChange:CommitFile dan dataworks:FileChange:DeployFile.
-
-
Event pattern debugging: Ubah nilai source dan type, lalu uji event tersebut. Jika pengujian berhasil, klik Next Step. Klik Test untuk memverifikasi apakah event kustom sesuai dengan pola. Jika pengujian lolos, halaman akan menampilkan pesan bahwa kecocokan berhasil dan event dapat dipicu.
-
-
Configure targets.
-
Service Type: Pilih HTTPS atau HTTP. Untuk informasi lebih lanjut tentang jenis layanan, lihat Kelola aturan event.
-
URL: Masukkan URL untuk menerima pesan dari event bus kustom. Misalnya, masukkan
https://server_address:port_number/extensions/consumer. -
Body: Pilih Complete Event.
-
Network Type: Pilih Public Network.
-
-
-
Langkah 2: Konfigurasikan 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 parameter dalam dialog tersebut.
-
Workspace for Distribution of Event Messages: Pilih ruang kerja yang telah Anda buat.
-
Specify Custom Event Bus in EventBridge for Distribution of Event Messages: Pilih event bus yang telah Anda buat di Langkah 1.
-
-
Setelah menyimpan saluran distribusi event, temukan saluran tersebut dan klik Enable di kolom Operation untuk mengaktifkannya.
Langkah 3: Daftarkan dan konfigurasikan ekstensi
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. Lalu, klik Register Extension dan konfigurasikan parameter dalam dialog tersebut.
-
Deployment Method: Pilih Deploy based on self-managed service.
-
Daftarkan ekstensi
-
Extension Name: Masukkan nama kustom.
-
Extension Point Event: Pilih Pre-event for Node Commit dan Pre-event for Node Deployment.
-
Workspace for Testing: Setelah mengonfigurasi parameter ini, Anda dapat menguji ekstensi di ruang kerja yang ditentukan setelah ekstensi dibuat tetapi sebelum diajukan.
-
Parameter Configurations for Extension
Gunakan parameter ini untuk mengontrol cakupan ekstensi. Di ruang kerja yang ditentukan:
-
Saat node dikomit (Pre-event for Node Commit), pemeriksaan ekstensi tidak dipicu, dan proses commit tidak diblokir.
-
Saat node diterapkan (Pre-event for Node Deployment), pemeriksaan ekstensi dipicu. Jika validasi gagal, proses penerapan diblokir.
Atur parameter menjadi
extension.project.commit-file.disabled=YourProjectId. Ganti YourProjectId dengan ID ruang kerja tempat ekstensi dinonaktifkan untuk event titik ekstensi tertentu. -
-
Options for Extension: Gunakan ini untuk menentukan opsi tanggapan untuk validasi yang gagal. Dalam contoh berikut, opsi yang tersedia adalah Alert dan Disable.
{ "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 Determine untuk menyimpan ekstensi yang telah didaftarkan.
-
Di kolom Operation untuk ekstensi yang Anda buat, klik Submit untuk memulai proses peninjauan.
Catatan-
Ekstensi ditinjau oleh platform DataWorks. Peninjauan biasanya selesai dalam tiga hari kerja.
-
Untuk menguji ekstensi yang Anda buat, Anda harus mengonfigurasi Workspace for Testing.
-
-
Setelah ekstensi disetujui, klik Publish di kolom Actions.
-
Klik tombol Manage Extensions untuk membuka halaman . Pilih ekstensi yang telah Anda buat, aktifkan, lalu klik Settings untuk mengonfigurasi tingkat kontrol penggunaan fungsi MAX_PT di ruang kerja.
Kembangkan dan konfigurasikan ekstensi
EventBridge menerima event dalam format JSON dari DataWorks melalui permintaan HTTP, mengurai pesan tersebut, lalu mendorongnya ke program layanan target. Setelah memproses event, program tersebut mengembalikan hasilnya ke DataWorks.
Kode contoh
Kode contoh ini memanggil API UpdateIDEEventResult untuk mengembalikan hasil pemrosesan. Kode ini menggunakan parameter messageId dalam API untuk mengambil informasi detail event, memeriksa apakah fungsi terlarang termasuk di dalamnya, lalu mengembalikan hasilnya ke DataWorks menggunakan UpdateIDEEventResult. Untuk informasi lebih lanjut, lihat Kembangkan ekstensi.
Lingkungan build: 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;
/**
* Menerima pesan yang didorong dari 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)) {
// Inisialisasi client.
Client client = dataWorksOpenApiClient.createClient();
try {
// Dapatkan informasi tentang parameter event saat ini.
String messageId = jsonObj.getString("id");
JSONObject data = jsonObj.getObject("data", JSONObject.class);
Long projectId = data.getLong("projectId");
// Inisialisasi callback event.
UpdateIDEEventResultRequest updateIDEEventResultRequest = new UpdateIDEEventResultRequest();
updateIDEEventResultRequest.setMessageId(messageId);
updateIDEEventResultRequest.setExtensionCode(extensionParamProperties.getExtensionCode());
// Kueri snapshot data titik ekstensi saat event titik ekstensi dipicu.
GetIDEEventDetailRequest getIDEEventDetailRequest = new GetIDEEventDetailRequest();
getIDEEventDetailRequest.setMessageId(messageId);
getIDEEventDetailRequest.setProjectId(projectId);
GetIDEEventDetailResponse getIDEEventDetailResponse = client.getIDEEventDetail(getIDEEventDetailRequest);
String content = getIDEEventDetailResponse.getBody().getEventDetail().getCommittedFile().getContent();
// Periksa apakah kode berisi fungsi terlarang.
if (content.contains(Constants.CHECK_CODE)) {
// Dapatkan konfigurasi opsi ekstensi di ruang kerja.
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());
// Catatan: Anda harus mengisi format berdasarkan pengaturan aktual di DataWorks.
String checkStatus = jsonObject.getString("checkStatus");
updateIDEEventResultRequest.setCheckResult(checkStatus);
updateIDEEventResultRequest.setCheckResultTip("Kode berisi fungsi terlarang.");
} else {// Callback berhasil.
updateIDEEventResultRequest.setCheckResult(EventCheckEnum.OK.getCode());
updateIDEEventResultRequest.setCheckResultTip(EventCheckEnum.OK.getName());
}
// Kirim callback ke DataWorks.
UpdateIDEEventResultResponse response = client.updateIDEEventResult(updateIDEEventResultRequest);
// ID unik permintaan, digunakan untuk troubleshooting selanjutnya.
System.out.println("response:" + response.getBody().getRequestId());
} catch (Exception e) {
// Deskripsi error.
System.out.println("ErrMsg:" + e.getMessage());
}
} else {
System.out.println("Gagal menyaring event lainnya. Periksa langkah konfigurasi.");
}
}
}
Terapkan proyek contoh
-
Persiapkan lingkungan dan proyek
-
Dependencies: Java 8 atau yang lebih baru dan tool build Maven.
-
Tautan unduh proyek: extensions-demo-maxpt.zip (219 KB).
-
-
Metode penerapan
-
Penerapan lokal: Kemas proyek menjadi file JAR. Di server lokal dengan Java 8 dan Maven, jalankan perintah
java -jar yourapp.jaruntuk menjalankan layanan. -
Penerapan di platform cloud: Kemas proyek menjadi file JAR dan unggah ke lingkungan runtime, seperti kontainer Docker atau Instance ECS, untuk penerapan.
CatatanPastikan EventBridge dapat mengakses layanan yang diterapkan melalui Internet.
-
-
Di direktori root proyek, jalankan perintah pengemasan untuk mengemas proyek menjadi 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"hello world!"dikembalikan, aplikasi berhasil diterapkan. Setelah jaringan terhubung, Anda dapat berlangganan pesan dari EventBridge.
Verifikasi hasil
Setelah menerapkan kode dan memastikan layanan Anda dapat diakses dari EventBridge, verifikasi hasilnya di ruang kerja tempat ekstensi diaktifkan.
Langkah verifikasi
-
Di halaman Pengembangan Data, buat node. Di node tersebut, edit kode agar menyertakan fungsi
MAX_PTyang dilarang, lalu simpan dan komit node tersebut. -
Klik tombol Publish. Di halaman Create Deployment Package, terapkan node tersebut secara langsung. Ini akan memicu pemeriksaan ekstensi.
CatatanSesuai konfigurasi ekstensi, pemeriksaan tidak berlaku untuk event commit file di ruang kerja yang ditentukan. Oleh karena itu, pemeriksaan ekstensi tidak dipicu saat Anda mengkomit node yang berisi fungsi
MAX_PT. Pemeriksaan hanya dipicu saat Anda menerapkan node yang berisi fungsiMAX_PT.