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:
-
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.
-
Crea il livello in Lambda.
-
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.
Argomenti
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-java
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
-
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
-
Passa alla directory
layer
dell'app di esempiolayer-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
-
Esamina il file
pom.xml
. Nella sezione <dependencies>
, definisci le dipendenze che desideri includere nel livello, ovvero le librerieaws-lambda-java-core
ejackson-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 filepom.xml
contiene due plug-in. maven-compiler-pluginCompila il codice sorgente. Quindi maven-shade-plugin impacchetta i tuoi artefatti in un unico uber-jar. -
Assicurati di disporre delle autorizzazioni per eseguire entrambi gli script.
chmod 744 1-install.sh && chmod 744 2-package.sh
-
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 directorytarget/
.Esempio 1-install.sh
mvn clean install
-
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 directoryjava/lib
appena creata. Infine, comprime il contenuto della directoryjava
in un file denominatolayer_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:
. Avrai bisogno di questo nome della risorsa Amazon (ARN) nel passaggio successivo di questo tutorial, quando aggiungerai il livello alla tua funzione.123456789012
:layer:java-jackson-layer:1
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
-
Apri la pagina Ruoli
nella console IAM. -
Scegliere Crea ruolo.
-
Creare un ruolo con le seguenti proprietà.
-
Trusted entity (Entità attendibile – Lambda
-
Autorizzazioni —. AWSLambdaBasicExecutionRole
-
Nome ruolo –
lambda-role
.
La AWSLambdaBasicExecutionRolepolitica dispone delle autorizzazioni necessarie alla funzione per scrivere i log in Logs. CloudWatch
-
Il codice della funzioneMap<String, String>
come input e utilizza Jackson per scrivere l'input come stringa JSON prima di convertirlo in un oggetto Java F1Car
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
-
Passa alla directory
function/
. Se ti trovi attualmente nella directorylayer/
, esegui il seguente comando:cd ../function
-
Creare il progetto utilizzando il seguente comando Maven:
mvn package
Questo comando produce un file JAR nella directory
target/
denominatalayer-java-function-1.0-SNAPSHOT.jar
. -
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 -
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
" -
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
-
Apri la pagina Layers
(Livelli) nella console Lambda. -
Seleziona il livello che hai creato.
-
Seleziona Elimina, quindi scegli di nuovo Elimina.
Per eliminare la funzione Lambda
-
Aprire la pagina Functions (Funzioni)
della console Lambda. -
Selezionare la funzione creata.
-
Scegliere Operazioni, Elimina.
-
Digita
confirm
nel campo di immissione testo e scegli Delete (Elimina).