全部产品
Search
文档中心

:Praktik terbaik: (Fitur lanjutan) Larang penggunaan fungsi MAX_PT

更新时间:Dec 05, 2025

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 pesan tentang commit file di ruang kerja tertentu: Pemeriksaan tidak dipicu, dan proses berlanjut langsung.

  • Untuk pesan tentang publikasi file di ruang kerja tertentu: Pemeriksaan dipicu untuk menentukan apakah kode menggunakan fungsi MAX_PT, lalu memberikan tanggapan.

    Jika fungsi MAX_PT ada, API callback akan memblokir proses commit atau publikasi di DataWorks, atau mengirim peringatan.

  • Saat mendaftarkan ekstensi, Anda dapat menggunakan pengaturan Parameters For Extension untuk menentukan ruang kerja dan event tempat ekstensi dinonaktifkan. Misalnya, menentukan event commit file akan menonaktifkan ekstensi dan mencegah pemeriksaan ekstensi dipicu.

  • Saat mendaftarkan ekstensi, gunakan pengaturan Options For Extension untuk menentukan opsi tanggapan untuk event yang tidak memenuhi kondisi yang ditentukan. Kemudian, Anda dapat memilih metode tanggapan tertentu saat mengaktifkan ekstensi. Dalam contoh ini, opsi tanggapan yang tersedia adalah Alert dan Disable.

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

  1. Masuk ke konsol EventBridge. Di panel navigasi kiri, klik Event Buses untuk membuka halaman pembuatan event bus.

  2. Klik tombol image Create Custom Event Bus.

    1. Pada modul Bus, atur Custom Event Bus Name dan klik Next untuk mengonfigurasi sumber event.

    2. Klik Skip untuk melewati konfigurasi Event Source, Rule, dan Target Module.image

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

      1. Configure Basic Information: Tentukan nama untuk aturan kustom.

      2. 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.Test

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

  1. Buka tab Developer Backend.

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

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

  3. Setelah menyimpan saluran distribusi event, temukan saluran tersebut dan klik Enable di kolom Actions.image

Langkah 3: Daftarkan dan konfigurasikan ekstensi (Extension)

  1. Buka tab Developer Backend.

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

  2. Di halaman Developer Backend, klik Extensions di panel navigasi kiri. Lalu, klik Register Extension dan konfigurasikan parameter dalam dialog.

    1. Metode penerapan: Pilih Deploy using a self-built service.

    2. 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"
              }
            }
          }
        }
  3. Setelah menyelesaikan konfigurasi, klik OK untuk menyimpan ekstensi yang terdaftar.

  4. Di kolom Actions untuk ekstensi, klik Submit untuk memulai proses peninjauan.

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

  5. Setelah ekstensi disetujui, klik Publish di kolom Actions untuk mempublikasikannya.

  6. Klik tombol Extension Management untuk menuju halaman Management Center > Extensions. Pilih ekstensi yang Anda buat, aktifkan di kolom Enable, dan klik Settings untuk mengonfigurasi tingkat kontrol fungsi MAX_PT di ruang kerja.image

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

  1. Persiapkan lingkungan dan proyek

  2. Metode penerapan

    • Penerapan lokal: Kemas proyek menjadi file JAR. Di server lokal tempat Java 8 dan tool Maven diterapkan, jalankan perintah java -jar yourapp.jar untuk 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.

    Catatan

    Layanan yang diterapkan harus dapat diakses dari EventBridge melalui jaringan publik.

  3. 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:repackage
  4. Jalankan file JAR:

    java -jar target/extensions-demo-maxpt-1.0.jar

    Proyek berhasil dimulai, seperti yang ditunjukkan pada gambar berikut.maxpt Masukkan http://localhost:8080/index di 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

  1. Di halaman Data Development, buat node. Di node tersebut, edit kode agar menyertakan fungsi terlarang MAX_PT, lalu simpan dan komit.

  2. Klik tombol Publish. Di halaman Create Deployment Package, publikasikan node tersebut. Tindakan ini memicu pemeriksaan ekstensi.

    Catatan

    Ekstensi 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 fungsi MAX_PT.