Untuk menerapkan fungsi Java ke Function Compute, kemas kode beserta dependensinya ke dalam file ZIP atau JAR, lalu unggah paket tersebut melalui Konsol Function Compute atau Serverless Devs.
Topik ini mencakup dua metode penerapan:
-
Terapkan dengan Maven — kompilasi dan unggah secara manual melalui konsol
-
Terapkan dengan Serverless Devs — kompilasi dan terapkan dalam satu perintah CLI
Library dependensi
Function Compute menyediakan dua library Java:
| Library | Artifact ID | Versi | Deskripsi |
|---|---|---|---|
com.aliyun:fc-java-core |
fc-java-core |
1.4.1 | Mendefinisikan antarmuka handler dan objek konteks |
com.aliyun:fc-java-events |
fc-java-event |
1.2.0 | Menyediakan tipe event untuk sumber event umum |
Dapatkan kedua library tersebut dari repositori pusat Maven, lalu tambahkan ke file pom.xml Anda:
<!-- fc-java-core: wajib -->
<dependency>
<groupId>com.aliyun.fc.runtime</groupId>
<artifactId>fc-java-core</artifactId>
<version>1.4.1</version>
</dependency>
<!-- fc-java-events: opsional, tambahkan jika fungsi Anda menangani event dari layanan Alibaba Cloud -->
<dependency>
<groupId>com.aliyun.fc.runtime</groupId>
<artifactId>fc-java-event</artifactId>
<version>1.2.0</version>
</dependency>
Jika ukuran paket dependensi terlalu besar, kemas dependensinya ke dalam layer agar ukuran paket kode tetap kecil. Untuk detailnya, lihat Buat layer kustom.
Terapkan dengan Maven
Prasyarat
Sebelum memulai, pastikan Anda telah:
-
Menginstal Java (website resmi Java)
-
Menginstal Maven (Instalasi Apache Maven)
Langkah-langkah
-
Buat proyek Java. Tempatkan handler Anda di
src/main/java/example/App.java:package example; import com.aliyun.fc.runtime.Context; import com.aliyun.fc.runtime.StreamRequestHandler; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class App implements StreamRequestHandler { @Override public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { outputStream.write(new String("hello world").getBytes()); } } -
Pada file
pom.xml, tambahkan pluginmaven-shade-pluginke bagian<build>. Plugin ini menggabungkan semua dependensi Anda ke dalam satu file JAR yang siap diterapkan.Anda juga dapat menggunakan Apache Maven Assembly sebagai pengganti Apache Maven Shade.
<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><details> <summary>Contoh lengkap pom.xml</summary>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>example</groupId> <artifactId>HelloFCJava</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>HelloFCJava</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.aliyun.fc.runtime</groupId> <artifactId>fc-java-core</artifactId> <version>1.4.1</version> </dependency> </dependencies> <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> <properties> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.source>1.8</maven.compiler.source> <maven.test.skip>true</maven.test.skip> </properties> </project></details>
-
Dari direktori root proyek, jalankan perintah berikut:
PentingPada macOS dan Linux, pastikan file kode dapat dibaca dan dieksekusi sebelum dikompresi.
mvn clean packageProses build yang berhasil akan diakhiri dengan:
[INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 11.681 s [INFO] Finished at: 2020-03-26T15:55:05+08:00 [INFO] ------------------------------------------------------------------------Nama file JAR hasil build mengikuti nilai bidang
artifactIddanversiondalam filepom.xml. Pada contoh di atas, file tersebut adalahtarget/HelloFCJava-1.0-SNAPSHOT.jar. Jika proses build gagal, periksa pesan error dan perbaiki kode sebelum mencoba lagi. -
Masuk ke Konsol Function Compute dan unggah file JAR tersebut.

-
Pada halaman Function Details, buka tab Configuration dan verifikasi nilai Handler. Format handler harus mengikuti pola
[Nama paket].[Nama kelas]::[Nama metode]. Pada contoh di atas, handler-nya adalahexample.App::handleRequest. Jika perlu, klik tombol Modify pada bagian Basic Configurations untuk memperbaruinya.
-
Pada tab Code, klik tombol Test Function untuk memverifikasi penerapan.

Terapkan dengan Serverless Devs
Serverless Devs menangani proses kompilasi dan penerapan dalam satu perintah — s deploy menjalankan mvn package secara otomatis sebelum mengunggah kode Anda.
Prasyarat
Sebelum memulai, pastikan Anda telah:
-
Menginstal Serverless Devs beserta dependensinya. Lihat Instal Serverless Devs dan dependensi.
-
Menkonfigurasi Serverless Devs. Lihat Konfigurasi Serverless Devs.
-
Menginstal Java Development Kit (JDK). Unduh dari Unduhan Java.
-
Menginstal Maven. Unduh dari Unduhan Apache Maven.
Langkah-langkah
-
Inisialisasi proyek:
s initSaat diminta, pilih Alibaba Cloud sebagai vendor dan pilih templat Java, runtime, wilayah, serta nama fungsi.
-
Masuk ke direktori proyek:
cd start-fc-event-java8Struktur proyek akan tampak seperti berikut:
start-fc-event-java8 ├── src │ └── main │ └── java │ └── example │ └── App.java ├── pom.xml ├── readme └── s.yaml -
Terapkan proyek:
s deployServerless Devs menjalankan
mvn packageterlebih dahulu (melalui hookpre-deploy), lalu mengunggah dan menerapkan file JAR tersebut. Penerapan yang berhasil akan menghasilkan output serupa berikut:[2022-04-07 12:00:09] [INFO] [S-CORE] - Start the pre-action [2022-04-07 12:00:09] [INFO] [S-CORE] - Action: mvn package [INFO] Scanning for projects... [INFO] ------------------------< example:HelloFCJava >------------------------- [INFO] Building HelloFCJava 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- ...... [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.617 s [INFO] Finished at: 2022-04-07T20:00:14+08:00 [INFO] ------------------------------------------------------------------------ [2022-04-07 12:00:14] [INFO] [S-CORE] - End the pre-action Checking Service, Function (0.64s) Creating Service, Function (0.71s) Tips for next step ====================== * Display information of the deployed resource: s info * Display metrics: s metrics * Display logs: s logs * Invoke remote function: s invoke * Remove Service: s remove service * Remove Function: s remove function * Remove Trigger: s remove trigger * Remove CustomDomain: s remove domain helloworld: region: cn-hangzhou service: name: hello-world-service function: name: start-fc-event-java8 runtime: java8 handler: example.App::handleRequest memorySize: 128 timeout: 60 -
Panggil fungsi untuk memverifikasi bahwa fungsi berjalan dengan benar:
s invokeOutput yang diharapkan:
========= FC invoke Logs begin ========= FC Initialize Start RequestId: b246c3bf-06bc-49e5-92b8-xxxxxxxx FC Initialize End RequestId: b246c3bf-06bc-49e5-92b8-xxxxxxxx FC Invoke Start RequestId: b246c3bf-06bc-49e5-92b8-xxxxxxxx FC Invoke End RequestId: b246c3bf-06bc-49e5-92b8-xxxxxxxx Duration: 7.27 ms, Billed Duration: 8 ms, Memory Size: 128 MB, Max Memory Used: 65.75 MB ========= FC invoke Logs end ========= FC Invoke Result: hello world