Utilizzo dei livelli per le funzioni Lambda in Java - AWS Lambda

Utilizzo dei livelli per le funzioni Lambda in Java

Usa i livelli Lambda per impacchettare codice e dipendenze che desideri riutilizzare in più funzioni. I livelli di solito contengono dipendenze dalla libreria, un runtime personalizzato o file di configurazione. La creazione di un livello prevede tre passaggi generali:

  1. Crea un pacchetto per il contenuto del livello. Ciò significa creare un archivio di file con estensione .zip che contiene le dipendenze che desideri utilizzare nelle funzioni.

  2. Crea il livello in Lambda.

  3. Aggiungi il livello alle tue funzioni.

Crea un pacchetto per il contenuto del livello

Per creare un livello, raggruppa i pacchetti in un archivio di file con estensione zip che soddisfi i seguenti requisiti:

  • Assicurati che la versione di Java a cui fa riferimento Maven sia la stessa della versione Java della funzione che intendi implementare. Ad esempio, per una funzione Java 21, il comando mvn -v dovrebbe elencare la versione Java 21 nell'output:

  • Le dipendenze devono essere archiviate nella java/lib directory root del file .zip. Per ulteriori informazioni, consulta Percorsi dei livelli per ciascun runtime Lambda.

  • I pacchetti del livello devono essere compatibili con Linux. Le funzioni Lambda vengono eseguite su Amazon Linux.

Puoi creare livelli che contengono librerie Java di terze parti o moduli e pacchetti Java personalizzati. Procedi come segue per abilitare . Puoi anche usare Gradle per creare pacchetti del contenuto dei livelli.

Per creare un livello utilizzando le dipendenze di Maven
  1. Crea un progetto Apache Maven con un pom.xml file che definisce le tue dipendenze.

    L'esempio seguente include Jackson Databind per l'elaborazione JSON. La <build> sezione utilizza il maven-dependency-plugin per creare file JAR separati per ogni dipendenza invece di raggrupparli in un unico uber-jar. Se vuoi creare un uber-jar, usa il maven-shade-plugin.

    Esempio 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>
  2. Compilare il progetto. Questo comando crea tutti i file JAR di dipendenza nella directory. target/lib/

    mvn clean package
  3. Crea la struttura di directory richiesta per il tuo livello:

    mkdir -p java/lib
  4. Copia i file JAR delle dipendenze nella java/lib directory:

    cp target/lib/*.jar java/lib/
  5. Comprimi il contenuto del livello:

    Linux/macOS
    zip -r layer.zip java/
    PowerShell
    Compress-Archive -Path .\java -DestinationPath .\layer.zip

    L'aspetto della struttura di directory dovrebbe essere simile al seguente:

    java/              
    └── lib/
        ├── jackson-databind-2.17.0.jar
        ├── jackson-core-2.17.0.jar
        └── jackson-annotations-2.17.0.jar
    Nota

    Assicurati che il tuo file.zip includa la java directory a livello principale al lib suo interno. Questa struttura garantisce che Lambda possa localizzare e importare le librerie. Ogni dipendenza viene conservata come file JAR separato anziché raggruppata in un uber-jar.

Crea il livello in Lambda.

È possibile creare la funzione Lambda mediante la AWS CLI o la console Lambda.

AWS CLI

Esegui il AWS CLI comando publish-layer-version per creare il livello Lambda:

aws lambda publish-layer-version --layer-name my-layer --zip-file fileb://layer.zip --compatible-runtimes java21

Il parametro compatible runtimes è facoltativo. Quando specificato, Lambda utilizza questo parametro per filtrare i livelli nella console Lambda.

Console
Creazione di un livello (console)
  1. Apri la pagina Layers (Livelli) nella console Lambda.

  2. Scegli Create layer (Crea livello).

  3. Scegli Carica un file.zip, quindi carica l'archivio.zip che hai creato in precedenza.

  4. (Facoltativo) Per i runtime compatibili, scegliete il runtime Java che corrisponde alla versione Java utilizzata per creare il layer.

  5. Seleziona Create (Crea).

Aggiungi il livello alla tua funzione.

AWS CLI

Per collegare il layer alla tua funzione, esegui il comando AWS CLIupdate-function-configuration. Usa l'attività ARN per il parametro --layers. L'ARN deve specificare la versione (ad esempio,arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1). Per ulteriori informazioni, consulta Livelli e versioni di livelli.

aws lambda update-function-configuration --function-name my-function --cli-binary-format raw-in-base64-out --layers "arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1"

L'opzione cli-binary-format è necessaria se si utilizza la versione 2 della AWS CLI. Per rendere questa impostazione come predefinita, esegui aws configure set cli-binary-format raw-in-base64-out. Per ulteriori informazioni, consulta la pagina AWS CLI supported global command line options nella Guida per l'utente di AWS Command Line Interface versione 2.

Console
Aggiunta di un livello a una funzione
  1. Aprire la pagina Funzioni della console Lambda.

  2. Scegli la funzione ().

  3. Scorri verso il basso fino alla sezione Livelli, quindi scegli Aggiungi un livello.

  4. In Scegli un livello, seleziona Livelli personalizzati, quindi scegli il tuo livello.

    Nota

    Se non hai aggiunto un runtime compatibile quando hai creato il layer, il tuo layer non verrà elencato qui. È possibile specificare invece il livello ARN.

  5. Scegli Aggiungi.