Untuk menerapkan fungsi Java ke Function Compute, kemas kode Anda 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 context |
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: required -->
<dependency>
<groupId>com.aliyun.fc.runtime</groupId>
<artifactId>fc-java-core</artifactId>
<version>1.4.1</version>
</dependency>
<!-- fc-java-events: optional, add if your function handles events from Alibaba Cloud services -->
<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 dependensi tersebut ke dalam layer untuk menjaga 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 alternatif 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, nama filenya 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 Configurations dan verifikasi nilai Handler. Format handler harus mengikuti pola
[Nama paket].[Nama kelas]::[Nama metode]. Pada contoh di atas, handler-nya adalahexample.App::handleRequest. Klik Modify untuk memperbarui nilainya jika diperlukan.
Pada tab Code, klik 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 proyeknya seperti berikut:
start-fc-event-java8 ├── src │ └── main │ └── java │ └── example │ └── App.java ├── pom.xml ├── readme └── s.yamlTerapkan proyek:
s deployServerless Devs menjalankan
mvn packageterlebih dahulu (melalui hookpre-deploy), lalu mengunggah dan menerapkan file JAR tersebut. Proses penerapan yang berhasil akan menghasilkan output seperti 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: 60Panggil fungsi tersebut untuk memverifikasi bahwa fungsinya 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