Como trabalhar com camadas para funções do Lambda em Java
Use camadas do Lambda para empacotar o código e as dependências que você quiser reutilizar em várias funções. As camadas geralmente contêm dependências de biblioteca, um runtime personalizado ou arquivos de configuração. A criação de uma camada envolve três etapas gerais:
-
Empacotar o conteúdo da sua camada. Isso significa criar um arquivo .zip contendo as dependências que você deseja usar em suas funções.
-
Criar a camada no Lambda.
-
Adicionar a camada às suas funções.
Empacotar o conteúdo da sua camada
Para criar uma camada, reúna os pacotes em um arquivo .zip que atenda aos seguintes requisitos:
-
Certifique-se de que a versão Java à qual o Maven ou Gradle se refere seja a mesma versão Java da função que você pretende implantar. Por exemplo, para uma função em Java 21, o comando
mvn -v
deverá listar o Java 21 na saída. -
Suas dependências devem ser armazenadas no diretório
java/lib
, na raiz do arquivo .zip. Para obter mais informações, consulte Caminhos da camada para cada runtime do Lambda. -
Os pacotes da camada devem ser compatíveis com o Linux. As funções do Lambda são executadas no Amazon Linux.
-
Se a sua camada incluir binários nativos ou arquivos executáveis, estes deverão ter como destino a mesma arquitetura (x86_64 ou arm64) que a sua função.
Você pode criar camadas que contenham bibliotecas Java de terceiros ou seus próprios módulos e pacotes Java. O procedimento a seguir utiliza o Maven. Também é possível utilizar o Gradle para empacotar o conteúdo da camada.
Para criar uma camada com dependências do Maven
-
Crie um projeto Apache Maven com um arquivo
pom.xml
que defina suas dependências.O exemplo abaixo inclui Jackson Databind
para processamento JSON. A seção <build>
usa maven-dependency-pluginpara criar arquivos JAR distintos para cada dependência, em vez de os agrupar em um único uber-jar. Se quiser criar um uber-jar, use maven-shade-plugin . exemplo pom.xml
<dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.17.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.13.0</version> <configuration> <source>21</source> <target>21</target> <release>21</release> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.6.1</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build>
-
Crie o projeto. Esse comando cria todos os arquivos JAR de dependência no diretório
target/lib/
.mvn clean package
-
Crie a estrutura de diretório necessária para sua camada:
mkdir -p java/lib
-
Copie os arquivos JAR de dependências para o diretório
java/lib
:cp target/lib/*.jar java/lib/
-
Crie um arquivo .zip do conteúdo da camada:
A estrutura de diretórios do arquivo zip deve ser assim:
java/ └── lib/ ├── jackson-databind-2.17.0.jar ├── jackson-core-2.17.0.jar └── jackson-annotations-2.17.0.jar
nota
Garanta que o arquivo .zip inclua o diretório
java
no nível raiz comlib
dentro dele. Essa estrutura garante que o Lambda consiga localizar e importar suas bibliotecas. Cada dependência é mantida como um arquivo JAR distinto, em vez de serem agrupadas em um uber-jar.
Criar a camada no Lambda
Você pode publicar a camada usando a AWS CLI ou o console do Lambda.