Seleziona le tue preferenze relative ai cookie

Utilizziamo cookie essenziali e strumenti simili necessari per fornire il nostro sito e i nostri servizi. Utilizziamo i cookie prestazionali per raccogliere statistiche anonime in modo da poter capire come i clienti utilizzano il nostro sito e apportare miglioramenti. I cookie essenziali non possono essere disattivati, ma puoi fare clic su \"Personalizza\" o \"Rifiuta\" per rifiutare i cookie prestazionali.

Se sei d'accordo, AWS e le terze parti approvate utilizzeranno i cookie anche per fornire utili funzionalità del sito, ricordare le tue preferenze e visualizzare contenuti pertinenti, inclusa la pubblicità pertinente. Per continuare senza accettare questi cookie, fai clic su \"Continua\" o \"Rifiuta\". Per effettuare scelte più dettagliate o saperne di più, fai clic su \"Personalizza\".

Utilizzo dei livelli per le funzioni Lambda in Java

Modalità Focus
Utilizzo dei livelli per le funzioni Lambda in Java - AWS Lambda

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Un livello Lambda è un archivio di file .zip che può contenere codice o dati aggiuntivi. 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.

Questo argomento contiene passaggi e indicazioni su come creare un pacchetto e un livello Lambda per Java con dipendenze di librerie esterne.

Prerequisiti

Per completare le fasi riportate in questa sezione, è necessario:

Nota

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:

Apache Maven 3.8.6 ... Java version: 21.0.2, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home ...

In questo argomento, facciamo riferimento all'applicazione di layer-javaesempio nel repository awsdocs GitHub . Questa applicazione contiene script che scaricano le dipendenze e generano il livello. L'applicazione contiene anche le funzioni corrispondenti che utilizzano la dipendenza dal livello. Dopo aver creato un livello, puoi implementare e richiamare la funzione corrispondente per verificare che tutto funzioni correttamente. Poiché si utilizza il runtime Java 21 per le funzioni, i livelli devono essere compatibili anche con Java 21.

L'applicazione di esempio layer-java contiene un singolo esempio all'interno di due sottodirectory. La directory layer contiene un file pom.xml che definisce le dipendenze dei livelli e gli script per generare il livello. La directory function contiene una funzione di esempio per verificare il funzionamento del livello. Questo tutorial spiega come creare e impacchettare questo livello.

Compatibilità dei livelli Java con Amazon Linux

Il primo passaggio per creare un livello consiste nel raggruppare tutto il contenuto del livello in un archivio di file .zip. Perché le funzioni Lambda vengano eseguite su Amazon Linux, il contenuto del livello deve essere in grado di compilare e creare in un ambiente Linux.

Il codice Java è progettato per essere indipendente dalla piattaforma, quindi puoi impacchettare i livelli sul tuo computer locale anche se non utilizzi un ambiente Linux. Dopo aver caricato il livello Java su Lambda, sarà ancora compatibile con Amazon Linux.

Percorsi dei livelli per i runtime Java

Quando si aggiunge un livello a una funzione, Lambda carica il contenuto del livello nella directory /opt di quell'ambiente di esecuzione. Per ogni runtime Lambda, la variabile PATH include percorsi di cartelle specifici nella directory /opt. Per garantire che Lambda raccolga il contenuto del layer, il file.zip del layer deve avere le sue dipendenze nei seguenti percorsi di cartella:

  • java/lib

Ad esempio, il file .zip del livello risultante creato in questo tutorial ha la seguente struttura di directory:

layer_content.zip └ java └ lib └ layer-java-layer-1.0-SNAPSHOT.jar

Il file JAR layer-java-layer-1.0-SNAPSHOT.jar (un uber-jar che contiene tutte le nostre dipendenze richieste) si trova correttamente nella directory java/lib. Ciò garantisce che Lambda possa localizzare la libreria durante l'invocazione delle funzioni.

Impacchettamento del contenuto dei livelli

In questo esempio, si impacchettano le seguenti due librerie Java in un unico file JAR:

  • aws-lambda-java-core— Un set minimo di definizioni di interfaccia per lavorare con Java in AWS Lambda

  • Jackson: una popolare suite di strumenti per l'elaborazione dei dati, in particolare per lavorare con JSON.

Per installare e creare il pacchetto del contenuto del livello, completa i seguenti passaggi.

Per installare e creare il pacchetto del contenuto dei livelli
  1. Clona il aws-lambda-developer-guide GitHub repository, che contiene il codice di esempio di cui hai bisogno nella sample-apps/layer-java directory.

    git clone https://github.com/awsdocs/aws-lambda-developer-guide.git
  2. Passa alla directory layer dell'app di esempio layer-java. Questa directory contiene gli script che usi per creare e impacchettare correttamente il livello.

    cd aws-lambda-developer-guide/sample-apps/layer-java/layer
  3. Esamina il file pom.xml. Nella sezione <dependencies>, definisci le dipendenze che desideri includere nel livello, ovvero le librerie aws-lambda-java-core e jackson-databind. È possibile aggiornare questo file per includere tutte le dipendenze che si desidera nel livello.

    Esempio pom.xml
    <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-core</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.17.0</version> </dependency> </dependencies>
    Nota

    La sezione <build> di questo file pom.xml contiene due plug-in. maven-compiler-pluginCompila il codice sorgente. Quindi maven-shade-pluginimpacchetta i tuoi artefatti in un unico uber-jar.

  4. Assicurati di disporre delle autorizzazioni per eseguire entrambi gli script.

    chmod 744 1-install.sh && chmod 744 2-package.sh
  5. Esegui lo script 1-install.sh utilizzando il comando seguente:

    ./1-install.sh

    Questo script esegue mvn clean install nella directory corrente. Questo crea l'uber-jar con tutte le dipendenze richieste nella directory target/.

    Esempio 1-install.sh
    mvn clean install
  6. Esegui lo script 2-package.sh utilizzando il comando seguente:

    ./2-package.sh

    Questo script crea la struttura di directory java/lib necessaria per creare correttamente il pacchetto del contenuto del livello. Quindi copia l'uber-jar dalla directory /target nella directory java/lib appena creata. Infine, comprime il contenuto della directory java in un file denominato layer_content.zip. Questo è il file con estensione .zip per il livello. È possibile decomprimere il file e verificare che contenga la struttura di file corretta, come mostrato nella sezione Percorsi dei livelli per i runtime Java.

    Esempio 2-package.sh
    mkdir java mkdir java/lib cp -r target/layer-java-layer-1.0-SNAPSHOT.jar java/lib/ zip -r layer_content.zip java

Creazione del livello

In questa sezione, viene utilizzato il file layer_content.zip generato nella sezione precedente e viene caricato come livello Lambda. È possibile caricare un layer utilizzando AWS Management Console o l'API Lambda tramite AWS Command Line Interface ()AWS CLI. Quando caricate il file Layer .zip, nel PublishLayerVersion AWS CLI comando seguente, specificate java21 come runtime compatibile e arm64 come architettura compatibile.

aws lambda publish-layer-version --layer-name java-jackson-layer \ --zip-file fileb://layer_content.zip \ --compatible-runtimes java21 \ --compatible-architectures "arm64"

Dalla risposta, nota LayerVersionArn, che assomiglia a arn:aws:lambda:us-east-1:123456789012:layer:java-jackson-layer:1. Avrai bisogno di questo nome della risorsa Amazon (ARN) nel passaggio successivo di questo tutorial, quando aggiungerai il livello alla tua funzione.

Aggiunta del livello alla tua funzione

In questa sezione, viene implementata una funzione Lambda di esempio che utilizza la libreria Jackson nel suo codice funzione, quindi si collega il livello. Per implementare la funzione, è necessario un Definizione delle autorizzazioni della funzione Lambda con un ruolo di esecuzione. Se non disponi ancora di un ruolo di esecuzione, completa i passaggi nella sezione comprimibile.

Per creare un ruolo di esecuzione
  1. Apri la pagina Ruoli nella console IAM.

  2. Scegliere Crea ruolo.

  3. Creare un ruolo con le seguenti proprietà.

    • Trusted entity (Entità attendibileLambda

    • Autorizzazioni —. AWSLambdaBasicExecutionRole

    • Nome ruololambda-role.

    La AWSLambdaBasicExecutionRolepolitica dispone delle autorizzazioni necessarie alla funzione per scrivere i log in Logs. CloudWatch

Per creare un ruolo di esecuzione
  1. Apri la pagina Ruoli nella console IAM.

  2. Scegliere Crea ruolo.

  3. Creare un ruolo con le seguenti proprietà.

    • Trusted entity (Entità attendibileLambda

    • Autorizzazioni —. AWSLambdaBasicExecutionRole

    • Nome ruololambda-role.

    La AWSLambdaBasicExecutionRolepolitica dispone delle autorizzazioni necessarie alla funzione per scrivere i log in Logs. CloudWatch

Il codice della funzione Lambda accetta Map<String, String> come input e utilizza Jackson per scrivere l'input come stringa JSON prima di convertirlo in un oggetto Java F1Car predefinito. Infine, la funzione utilizza i campi dell'oggetto F1Car per costruire una stringa restituita dalla funzione.

package example; import com.amazonaws.services.lambda.runtime.Context; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.util.Map; public class Handler { public String handleRequest(Map<String, String> input, Context context) throws IOException { // Parse the input JSON ObjectMapper objectMapper = new ObjectMapper(); F1Car f1Car = objectMapper.readValue(objectMapper.writeValueAsString(input), F1Car.class); StringBuilder finalString = new StringBuilder(); finalString.append(f1Car.getDriver()); finalString.append(" is a driver for team "); finalString.append(f1Car.getTeam()); return finalString.toString(); } }
Per implementare la funzione Lambda
  1. Passa alla directory function/. Se ti trovi attualmente nella directory layer/, esegui il seguente comando:

    cd ../function
  2. Creare il progetto utilizzando il seguente comando Maven:

    mvn package

    Questo comando produce un file JAR nella directory target/ denominata layer-java-function-1.0-SNAPSHOT.jar.

  3. Implementare la funzione. Nel AWS CLI comando seguente, sostituite il --role parametro con il vostro ruolo di esecuzione ARN:

    aws lambda create-function --function-name java_function_with_layer \ --runtime java21 \ --architectures "arm64" \ --handler example.Handler::handleRequest \ --timeout 30 \ --role arn:aws:iam::123456789012:role/lambda-role \ --zip-file fileb://target/layer-java-function-1.0-SNAPSHOT.jar
  4. Quindi, collega il livello alla tua funzione. Nel AWS CLI comando seguente, sostituite il --layers parametro con la versione del layer ARN che avete notato in precedenza:

    aws lambda update-function-configuration --function-name java_function_with_layer \ --cli-binary-format raw-in-base64-out \ --layers "arn:aws:lambda:us-east-1:123456789012:layer:java-jackson-layer:1"
  5. Infine, provate a richiamare la vostra funzione usando il seguente comando: AWS CLI

    aws lambda invoke --function-name java_function_with_layer \ --cli-binary-format raw-in-base64-out \ --payload '{ "driver": "Max Verstappen", "team": "Red Bull" }' response.json

    L'output visualizzato dovrebbe essere di questo tipo:

    { "StatusCode": 200, "ExecutedVersion": "$LATEST" }

    Ciò indica che la funzione è stata in grado di utilizzare la dipendenza Jackson per eseguire correttamente la funzione. È possibile verificare che il file response.json di output contenga la stringa restituita corretta:

    "Max Verstappen is a driver for team Red Bull"

Ora è possibile eliminare le risorse create per questo tutorial, a meno che non si voglia conservarle. Eliminando AWS le risorse che non utilizzi più, eviti addebiti inutili a tuo carico. Account AWS

Per eliminare il livello Lambda
  1. Apri la pagina Layers (Livelli) nella console Lambda.

  2. Seleziona il livello che hai creato.

  3. Seleziona Elimina, quindi scegli di nuovo Elimina.

Per eliminare la funzione Lambda
  1. Aprire la pagina Functions (Funzioni) della console Lambda.

  2. Selezionare la funzione creata.

  3. Scegliere Operazioni, Elimina.

  4. Digita confirm nel campo di immissione testo e scegli Delete (Elimina).

Ora è possibile eliminare le risorse create per questo tutorial, a meno che non si voglia conservarle. Eliminando AWS le risorse che non utilizzi più, eviti addebiti inutili a tuo carico. Account AWS

Per eliminare il livello Lambda
  1. Apri la pagina Layers (Livelli) nella console Lambda.

  2. Seleziona il livello che hai creato.

  3. Seleziona Elimina, quindi scegli di nuovo Elimina.

Per eliminare la funzione Lambda
  1. Aprire la pagina Functions (Funzioni) della console Lambda.

  2. Selezionare la funzione creata.

  3. Scegliere Operazioni, Elimina.

  4. Digita confirm nel campo di immissione testo e scegli Delete (Elimina).

PrivacyCondizioni del sitoPreferenze cookie
© 2025, Amazon Web Services, Inc. o società affiliate. Tutti i diritti riservati.