Para desplegar una función de Java en Function Compute, empaquete su código y sus dependencias en un archivo ZIP o JAR. Después, cargue el paquete mediante la consola de Function Compute o Serverless Devs.
Este tema aborda dos rutas de despliegue:
Despliegue con Maven: compile y cargue el código manualmente desde la consola.
Deploy with Serverless Devs: compile y despliegue con un solo comando del CLI.
Bibliotecas de dependencias
Function Compute proporciona dos bibliotecas de Java:
|
Biblioteca |
ID del artefacto |
Versión |
Descripción |
|
|
|
1.4.1 |
Define la interfaz del handler y el objeto de contexto. |
|
|
|
1.2.0 |
Proporciona tipos de eventos para orígenes de eventos comunes. |
Obtenga ambas bibliotecas del repositorio central de Maven y agréguelas a su archivo pom.xml:
<!-- 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>
Si el paquete de dependencias es demasiado grande, empaquételas en una capa para mantener pequeño el paquete de código. Para obtener más información, consulte Create a custom layer .
Desplegar con Maven
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Java instalado (sitio web oficial de Java).
Maven instalado (Instalación de Apache Maven).
Pasos
-
Cree un proyecto de Java. Coloque su handler en
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()); } }Para consultar más ejemplos de handlers, vea Handlers y Context.
-
En el archivo
pom.xml, agregue el pluginmaven-shade-plugina la sección<build>. Este plugin agrupa las dependencias en un solo archivo JAR adecuado para el despliegue.También puede usar Apache Maven Assembly en lugar de 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>Ejemplo completo de 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>
-
Desde el directorio raíz del proyecto, ejecute el siguiente comando:
ImportanteEn macOS y Linux, asegúrese de que el archivo de código tenga permisos de lectura y ejecución antes de comprimirlo.
mvn clean packageUna compilación exitosa termina con el siguiente resultado:
[INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 11.681 s [INFO] Finished at: 2020-03-26T15:55:05+08:00 [INFO] ------------------------------------------------------------------------El archivo JAR generado toma su nombre de los campos
artifactIdyversiondel archivopom.xml. En el ejemplo anterior, el archivo estarget/HelloFCJava-1.0-SNAPSHOT.jar. Si la compilación falla, revise el mensaje de error y corrija el código antes de volver a intentarlo. -
Inicie sesión en la consola de Function Compute y cargue el archivo JAR.

-
En la página Function Details, vaya a la pestaña Configuration y compruebe el valor de Handler. El handler debe seguir el formato
[Package name].[Class name]::[Method name]. En el ejemplo anterior, el handler esexample.App::handleRequest. Si es necesario, haga clic en Modify dentro de la sección Basic Configurations para actualizarlo.
-
En la pestaña Code, haga clic en Test Function para comprobar el despliegue.

Desplegar con Serverless Devs
Serverless Devs gestiona la compilación y el despliegue con un solo comando. El comando s deploy ejecuta mvn package automáticamente antes de cargar el código.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Serverless Devs y sus dependencias instalados. Consulte Instalar Serverless Devs y sus dependencias.
Serverless Devs configurado. Consulte Configure Serverless Devs.
Java Development Kit (JDK) instalado. Descárguelo desde Descargas de Java.
Maven instalado. Descárguelo desde Descargas de Apache Maven.
Pasos
-
Inicialice un proyecto:
s initCuando el sistema lo solicite, seleccione Alibaba Cloud como proveedor y elija una plantilla de Java, un entorno de ejecución, una región y un nombre de función.
-
Acceda al directorio del proyecto:
cd start-fc-event-java8La estructura del proyecto es la siguiente:
start-fc-event-java8 ├── src │ └── main │ └── java │ └── example │ └── App.java ├── pom.xml ├── readme └── s.yaml -
Despliegue el proyecto:
s deployServerless Devs ejecuta primero
mvn package(mediante el hookpre-deploy) y luego carga y despliega el archivo JAR. Un despliegue exitoso finaliza con un resultado similar al siguiente:[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 -
Invoque la función para comprobar que se ejecuta correctamente:
s invokeResultado esperado:
========= 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