Sélectionner vos préférences de cookies

Nous utilisons des cookies essentiels et des outils similaires qui sont nécessaires au fonctionnement de notre site et à la fourniture de nos services. Nous utilisons des cookies de performance pour collecter des statistiques anonymes afin de comprendre comment les clients utilisent notre site et d’apporter des améliorations. Les cookies essentiels ne peuvent pas être désactivés, mais vous pouvez cliquer sur « Personnaliser » ou « Refuser » pour refuser les cookies de performance.

Si vous êtes d’accord, AWS et les tiers approuvés utiliseront également des cookies pour fournir des fonctionnalités utiles au site, mémoriser vos préférences et afficher du contenu pertinent, y compris des publicités pertinentes. Pour accepter ou refuser tous les cookies non essentiels, cliquez sur « Accepter » ou « Refuser ». Pour effectuer des choix plus détaillés, cliquez sur « Personnaliser ».

Déployer des fonctions Lambda en Java avec des images conteneurs

Mode de mise au point
Déployer des fonctions Lambda en Java avec des images conteneurs - AWS Lambda

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Il existe trois méthodes pour créer une image de conteneur pour une fonction Lambda Java :

Astuce

Pour réduire le temps nécessaire à l’activation des fonctions du conteneur Lambda, consultez Utiliser des générations en plusieurs étapes (français non garanti) dans la documentation Docker. Pour créer des images de conteneur efficaces, suivez la section Bonnes pratiques pour l’écriture de Dockerfiles (français non garanti).

Cette page explique comment créer, tester et déployer des images de conteneur pour Lambda.

AWS images de base pour Java

AWS fournit les images de base suivantes pour Java :

Balises Environnement d’exécution Système d’exploitation Dockerfile Obsolescence

21

Java 21 Amazon Linux 2023 Dockerfile pour Java 21 sur GitHub

30 juin 2029

17

Java 17 Amazon Linux 2 Dockerfile pour Java 17 sur GitHub

30 juin 2026

11

Java 11 Amazon Linux 2 Dockerfile pour Java 11 sur GitHub

30 juin 2026

8.al2

Java 8 Amazon Linux 2 Dockerfile pour Java 8 sur GitHub

30 juin 2026

Référentiel Amazon ECR : gallery.ecr. aws/lambda/java

Les images de base de Java 21 et versions ultérieures sont basées sur l’image de conteneur minimale Amazon Linux 2023. Les images de base antérieures utilisaient Amazon Linux 2. AL2Le 023 offre plusieurs avantages par rapport à Amazon Linux 2, notamment un encombrement de déploiement réduit et des versions mises à jour de bibliothèques telles queglibc.

AL2Les images basées sur le format 023 sont utilisées microdnf (en lien symbolique commednf) comme gestionnaire de packages au lieu deyum, qui est le gestionnaire de packages par défaut dans Amazon Linux 2. microdnfest une implémentation autonome de. dnf Pour obtenir la liste des packages inclus dans les images AL2 basées sur la version 023, reportez-vous aux colonnes Conteneur minimal de la section Comparaison des packages installés sur les images de conteneurs Amazon Linux 2023. Pour plus d'informations sur les différences entre AL2 023 et Amazon Linux 2, consultez Présentation du runtime Amazon Linux 2023 AWS Lambda sur le blog AWS Compute.

Note

Pour exécuter des images AL2 basées sur 023 localement, y compris avec AWS Serverless Application Model (AWS SAM), vous devez utiliser Docker version 20.10.10 ou ultérieure.

Utilisation d'une image AWS de base pour Java

Pour exécuter la procédure indiquée dans cette section, vous devez satisfaire aux exigences suivantes :

Pour exécuter la procédure indiquée dans cette section, vous devez satisfaire aux exigences suivantes :

Maven
  1. Exécutez la commande suivante pour créer un projet Maven en utilisant l’archétype de Lambda. Les paramètres suivants sont obligatoires :

    • service — Le Service AWS client à utiliser dans la fonction Lambda. Pour une liste des sources disponibles, voir aws-sdk-java-v2/services on GitHub.

    • region — L' Région AWS endroit où vous souhaitez créer la fonction Lambda.

    • groupId : l’espace de noms complet du package de votre application.

    • artifactId : le nom de votre projet. Cette valeur devient le nom du répertoire de votre projet.

    Sous Linux et macOS, exécutez cette commande :

    mvn -B archetype:generate \ -DarchetypeGroupId=software.amazon.awssdk \ -DarchetypeArtifactId=archetype-lambda -Dservice=s3 -Dregion=US_WEST_2 \ -DgroupId=com.example.myapp \ -DartifactId=myapp

    Dans PowerShell, exécutez cette commande :

    mvn -B archetype:generate ` "-DarchetypeGroupId=software.amazon.awssdk" ` "-DarchetypeArtifactId=archetype-lambda" "-Dservice=s3" "-Dregion=US_WEST_2" ` "-DgroupId=com.example.myapp" ` "-DartifactId=myapp"

    L’archétype Maven pour Lambda est préconfiguré pour compiler avec Java SE 8 et inclut une dépendance au kit AWS SDK pour Java. Si vous créez votre projet avec un archétype différent ou en utilisant une autre méthode, vous devez configurer le compilateur Java pour Maven et déclarer le kit SDK comme une dépendance.

  2. Ouvrez le répertoire myapp/src/main/java/com/example/myapp et trouvez le fichier App.java. Il s’agit du code de la fonction Lambda. Vous pouvez utiliser l’exemple de code fourni pour les tests ou le remplacer par le vôtre.

  3. Retournez au répertoire racine du projet, puis créez un nouveau Dockerfile avec la configuration suivante :

    • Définir la propriété FROM sur l’URI de l’image de base.

    • Définir l’argument CMD pour le gestionnaire de la fonction Lambda.

    Notez que l’exemple de Dockerfile n’inclut pas d’instruction USER. Lorsque vous déployez une image de conteneur sur Lambda, Lambda définit automatiquement un utilisateur Linux par défaut disposant d’autorisations de moindre privilège. Ceci est différent du comportement standard de Docker qui est défini par défaut par l’utilisateur root lorsqu’aucune instruction USER n’est fournie.

    Exemple Dockerfile
    FROM public.ecr.aws/lambda/java:21 # Copy function code and runtime dependencies from Maven layout COPY target/classes ${LAMBDA_TASK_ROOT} COPY target/dependency/* ${LAMBDA_TASK_ROOT}/lib/ # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "com.example.myapp.App::handleRequest" ]
  4. Compilez le projet et rassemblez les dépendances de l’environnement d’exécution.

    mvn compile dependency:copy-dependencies -DincludeScope=runtime
  5. Générez l’image Docker à l’aide de la commande docker build. L’exemple suivant nomme l’image docker-image et lui donne la balise test. Pour rendre votre image compatible avec Lambda, vous devez utiliser l'--provenance=falseoption.

    docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
    Note

    La commande spécifie l’option --platform linux/amd64 pour garantir la compatibilité de votre conteneur avec l’environnement d’exécution Lambda, quelle que soit l’architecture de votre machine de génération. Si vous avez l'intention de créer une fonction Lambda à l'aide de l'architecture du jeu ARM64 d'instructions, veillez à modifier la commande pour utiliser l'--platform linux/arm64option à la place.

Gradle
  1. Créez un répertoire pour le projet, puis passez à ce répertoire.

    mkdir example cd example
  2. Exécutez la commande suivante pour que Gradle génère un nouveau projet d’application Java dans le répertoire example de votre environnement. Pour Sélectionner le script de construction DSL, choisissez 2 : Groovy.

    gradle init --type java-application
  3. Ouvrez le répertoire /example/app/src/main/java/example et trouvez le fichier App.java. Il s’agit du code de la fonction Lambda. Vous pouvez utiliser l’exemple de code suivant pour le tester, ou le remplacer par le vôtre.

    Exemple App.java
    package com.example; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class App implements RequestHandler<Object, String> { public String handleRequest(Object input, Context context) { return "Hello world!"; } }
  4. Ouvrez le fichier build.gradle. Si vous utilisez l’exemple de code de fonction de l’étape précédente, remplacez le contenu de build.gradle par ce qui suit. Si vous utilisez votre propre code de fonction, modifiez votre fichier build.gradle selon vos besoins.

    Exemple build.gradle (Groovy DSL)
    plugins { id 'java' } group 'com.example' version '1.0-SNAPSHOT' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { implementation 'com.amazonaws:aws-lambda-java-core:1.2.1' } jar { manifest { attributes 'Main-Class': 'com.example.App' } }
  5. La commande gradle init de l’étape 2 a également généré un cas de test fictif dans le répertoire app/test. Pour les besoins de ce tutoriel, passez outre l’exécution des tests en supprimant le répertoire /test.

  6. Générez le projet.

    gradle build
  7. Dans le répertoire racine du projet (/example), créez un fichier Docker avec la configuration suivante :

    Notez que l’exemple de Dockerfile n’inclut pas d’instruction USER. Lorsque vous déployez une image de conteneur sur Lambda, Lambda définit automatiquement un utilisateur Linux par défaut disposant d’autorisations de moindre privilège. Ceci est différent du comportement standard de Docker qui est défini par défaut par l’utilisateur root lorsqu’aucune instruction USER n’est fournie.

    Exemple Dockerfile
    FROM public.ecr.aws/lambda/java:21 # Copy function code and runtime dependencies from Gradle layout COPY app/build/classes/java/main ${LAMBDA_TASK_ROOT} # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "com.example.App::handleRequest" ]
  8. Générez l’image Docker à l’aide de la commande docker build. L’exemple suivant nomme l’image docker-image et lui donne la balise test. Pour rendre votre image compatible avec Lambda, vous devez utiliser l'--provenance=falseoption.

    docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
    Note

    La commande spécifie l’option --platform linux/amd64 pour garantir la compatibilité de votre conteneur avec l’environnement d’exécution Lambda, quelle que soit l’architecture de votre machine de génération. Si vous avez l'intention de créer une fonction Lambda à l'aide de l'architecture du jeu ARM64 d'instructions, veillez à modifier la commande pour utiliser l'--platform linux/arm64option à la place.

Maven
  1. Exécutez la commande suivante pour créer un projet Maven en utilisant l’archétype de Lambda. Les paramètres suivants sont obligatoires :

    • service — Le Service AWS client à utiliser dans la fonction Lambda. Pour une liste des sources disponibles, voir aws-sdk-java-v2/services on GitHub.

    • region — L' Région AWS endroit où vous souhaitez créer la fonction Lambda.

    • groupId : l’espace de noms complet du package de votre application.

    • artifactId : le nom de votre projet. Cette valeur devient le nom du répertoire de votre projet.

    Sous Linux et macOS, exécutez cette commande :

    mvn -B archetype:generate \ -DarchetypeGroupId=software.amazon.awssdk \ -DarchetypeArtifactId=archetype-lambda -Dservice=s3 -Dregion=US_WEST_2 \ -DgroupId=com.example.myapp \ -DartifactId=myapp

    Dans PowerShell, exécutez cette commande :

    mvn -B archetype:generate ` "-DarchetypeGroupId=software.amazon.awssdk" ` "-DarchetypeArtifactId=archetype-lambda" "-Dservice=s3" "-Dregion=US_WEST_2" ` "-DgroupId=com.example.myapp" ` "-DartifactId=myapp"

    L’archétype Maven pour Lambda est préconfiguré pour compiler avec Java SE 8 et inclut une dépendance au kit AWS SDK pour Java. Si vous créez votre projet avec un archétype différent ou en utilisant une autre méthode, vous devez configurer le compilateur Java pour Maven et déclarer le kit SDK comme une dépendance.

  2. Ouvrez le répertoire myapp/src/main/java/com/example/myapp et trouvez le fichier App.java. Il s’agit du code de la fonction Lambda. Vous pouvez utiliser l’exemple de code fourni pour les tests ou le remplacer par le vôtre.

  3. Retournez au répertoire racine du projet, puis créez un nouveau Dockerfile avec la configuration suivante :

    • Définir la propriété FROM sur l’URI de l’image de base.

    • Définir l’argument CMD pour le gestionnaire de la fonction Lambda.

    Notez que l’exemple de Dockerfile n’inclut pas d’instruction USER. Lorsque vous déployez une image de conteneur sur Lambda, Lambda définit automatiquement un utilisateur Linux par défaut disposant d’autorisations de moindre privilège. Ceci est différent du comportement standard de Docker qui est défini par défaut par l’utilisateur root lorsqu’aucune instruction USER n’est fournie.

    Exemple Dockerfile
    FROM public.ecr.aws/lambda/java:21 # Copy function code and runtime dependencies from Maven layout COPY target/classes ${LAMBDA_TASK_ROOT} COPY target/dependency/* ${LAMBDA_TASK_ROOT}/lib/ # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "com.example.myapp.App::handleRequest" ]
  4. Compilez le projet et rassemblez les dépendances de l’environnement d’exécution.

    mvn compile dependency:copy-dependencies -DincludeScope=runtime
  5. Générez l’image Docker à l’aide de la commande docker build. L’exemple suivant nomme l’image docker-image et lui donne la balise test. Pour rendre votre image compatible avec Lambda, vous devez utiliser l'--provenance=falseoption.

    docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
    Note

    La commande spécifie l’option --platform linux/amd64 pour garantir la compatibilité de votre conteneur avec l’environnement d’exécution Lambda, quelle que soit l’architecture de votre machine de génération. Si vous avez l'intention de créer une fonction Lambda à l'aide de l'architecture du jeu ARM64 d'instructions, veillez à modifier la commande pour utiliser l'--platform linux/arm64option à la place.

Gradle
  1. Créez un répertoire pour le projet, puis passez à ce répertoire.

    mkdir example cd example
  2. Exécutez la commande suivante pour que Gradle génère un nouveau projet d’application Java dans le répertoire example de votre environnement. Pour Sélectionner le script de construction DSL, choisissez 2 : Groovy.

    gradle init --type java-application
  3. Ouvrez le répertoire /example/app/src/main/java/example et trouvez le fichier App.java. Il s’agit du code de la fonction Lambda. Vous pouvez utiliser l’exemple de code suivant pour le tester, ou le remplacer par le vôtre.

    Exemple App.java
    package com.example; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class App implements RequestHandler<Object, String> { public String handleRequest(Object input, Context context) { return "Hello world!"; } }
  4. Ouvrez le fichier build.gradle. Si vous utilisez l’exemple de code de fonction de l’étape précédente, remplacez le contenu de build.gradle par ce qui suit. Si vous utilisez votre propre code de fonction, modifiez votre fichier build.gradle selon vos besoins.

    Exemple build.gradle (Groovy DSL)
    plugins { id 'java' } group 'com.example' version '1.0-SNAPSHOT' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { implementation 'com.amazonaws:aws-lambda-java-core:1.2.1' } jar { manifest { attributes 'Main-Class': 'com.example.App' } }
  5. La commande gradle init de l’étape 2 a également généré un cas de test fictif dans le répertoire app/test. Pour les besoins de ce tutoriel, passez outre l’exécution des tests en supprimant le répertoire /test.

  6. Générez le projet.

    gradle build
  7. Dans le répertoire racine du projet (/example), créez un fichier Docker avec la configuration suivante :

    Notez que l’exemple de Dockerfile n’inclut pas d’instruction USER. Lorsque vous déployez une image de conteneur sur Lambda, Lambda définit automatiquement un utilisateur Linux par défaut disposant d’autorisations de moindre privilège. Ceci est différent du comportement standard de Docker qui est défini par défaut par l’utilisateur root lorsqu’aucune instruction USER n’est fournie.

    Exemple Dockerfile
    FROM public.ecr.aws/lambda/java:21 # Copy function code and runtime dependencies from Gradle layout COPY app/build/classes/java/main ${LAMBDA_TASK_ROOT} # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "com.example.App::handleRequest" ]
  8. Générez l’image Docker à l’aide de la commande docker build. L’exemple suivant nomme l’image docker-image et lui donne la balise test. Pour rendre votre image compatible avec Lambda, vous devez utiliser l'--provenance=falseoption.

    docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
    Note

    La commande spécifie l’option --platform linux/amd64 pour garantir la compatibilité de votre conteneur avec l’environnement d’exécution Lambda, quelle que soit l’architecture de votre machine de génération. Si vous avez l'intention de créer une fonction Lambda à l'aide de l'architecture du jeu ARM64 d'instructions, veillez à modifier la commande pour utiliser l'--platform linux/arm64option à la place.

  1. Exécutez la commande suivante pour créer un projet Maven en utilisant l’archétype de Lambda. Les paramètres suivants sont obligatoires :

    • service — Le Service AWS client à utiliser dans la fonction Lambda. Pour une liste des sources disponibles, voir aws-sdk-java-v2/services on GitHub.

    • region — L' Région AWS endroit où vous souhaitez créer la fonction Lambda.

    • groupId : l’espace de noms complet du package de votre application.

    • artifactId : le nom de votre projet. Cette valeur devient le nom du répertoire de votre projet.

    Sous Linux et macOS, exécutez cette commande :

    mvn -B archetype:generate \ -DarchetypeGroupId=software.amazon.awssdk \ -DarchetypeArtifactId=archetype-lambda -Dservice=s3 -Dregion=US_WEST_2 \ -DgroupId=com.example.myapp \ -DartifactId=myapp

    Dans PowerShell, exécutez cette commande :

    mvn -B archetype:generate ` "-DarchetypeGroupId=software.amazon.awssdk" ` "-DarchetypeArtifactId=archetype-lambda" "-Dservice=s3" "-Dregion=US_WEST_2" ` "-DgroupId=com.example.myapp" ` "-DartifactId=myapp"

    L’archétype Maven pour Lambda est préconfiguré pour compiler avec Java SE 8 et inclut une dépendance au kit AWS SDK pour Java. Si vous créez votre projet avec un archétype différent ou en utilisant une autre méthode, vous devez configurer le compilateur Java pour Maven et déclarer le kit SDK comme une dépendance.

  2. Ouvrez le répertoire myapp/src/main/java/com/example/myapp et trouvez le fichier App.java. Il s’agit du code de la fonction Lambda. Vous pouvez utiliser l’exemple de code fourni pour les tests ou le remplacer par le vôtre.

  3. Retournez au répertoire racine du projet, puis créez un nouveau Dockerfile avec la configuration suivante :

    • Définir la propriété FROM sur l’URI de l’image de base.

    • Définir l’argument CMD pour le gestionnaire de la fonction Lambda.

    Notez que l’exemple de Dockerfile n’inclut pas d’instruction USER. Lorsque vous déployez une image de conteneur sur Lambda, Lambda définit automatiquement un utilisateur Linux par défaut disposant d’autorisations de moindre privilège. Ceci est différent du comportement standard de Docker qui est défini par défaut par l’utilisateur root lorsqu’aucune instruction USER n’est fournie.

    Exemple Dockerfile
    FROM public.ecr.aws/lambda/java:21 # Copy function code and runtime dependencies from Maven layout COPY target/classes ${LAMBDA_TASK_ROOT} COPY target/dependency/* ${LAMBDA_TASK_ROOT}/lib/ # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "com.example.myapp.App::handleRequest" ]
  4. Compilez le projet et rassemblez les dépendances de l’environnement d’exécution.

    mvn compile dependency:copy-dependencies -DincludeScope=runtime
  5. Générez l’image Docker à l’aide de la commande docker build. L’exemple suivant nomme l’image docker-image et lui donne la balise test. Pour rendre votre image compatible avec Lambda, vous devez utiliser l'--provenance=falseoption.

    docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
    Note

    La commande spécifie l’option --platform linux/amd64 pour garantir la compatibilité de votre conteneur avec l’environnement d’exécution Lambda, quelle que soit l’architecture de votre machine de génération. Si vous avez l'intention de créer une fonction Lambda à l'aide de l'architecture du jeu ARM64 d'instructions, veillez à modifier la commande pour utiliser l'--platform linux/arm64option à la place.

  1. Démarrez votre image Docker à l’aide de la commande docker run. Dans cet exemple, docker-image est le nom de l’image et test est la balise.

    docker run --platform linux/amd64 -p 9000:8080 docker-image:test

    Cette commande exécute l’image en tant que conteneur et crée un point de terminaison local à localhost:9000/2015-03-31/functions/function/invocations.

    Note

    Si vous avez créé l'image Docker pour l'architecture du jeu ARM64 d'instructions, veillez à utiliser l'--platform linux/arm64option au lieu de--platform linux/amd64.

  2. À partir d’une nouvelle fenêtre de terminal, publiez un événement au point de terminaison local.

    Linux/macOS

    Sous Linux et macOS, exécutez la commande curl suivante :

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Cette commande invoque la fonction avec un événement vide et renvoie une réponse. Si vous utilisez votre propre code de fonction plutôt que l’exemple de code de fonction, vous pouvez invoquer la fonction avec une charge utile JSON. Exemple :

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    Dans PowerShell, exécutez la Invoke-WebRequest commande suivante :

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    Cette commande invoque la fonction avec un événement vide et renvoie une réponse. Si vous utilisez votre propre code de fonction plutôt que l’exemple de code de fonction, vous pouvez invoquer la fonction avec une charge utile JSON. Exemple :

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
  3. Obtenez l’ID du conteneur.

    docker ps
  4. Utilisez la commande docker kill pour arrêter le conteneur. Dans cette commande, remplacez 3766c4ab331c par l’ID du conteneur de l’étape précédente.

    docker kill 3766c4ab331c

  1. Démarrez votre image Docker à l’aide de la commande docker run. Dans cet exemple, docker-image est le nom de l’image et test est la balise.

    docker run --platform linux/amd64 -p 9000:8080 docker-image:test

    Cette commande exécute l’image en tant que conteneur et crée un point de terminaison local à localhost:9000/2015-03-31/functions/function/invocations.

    Note

    Si vous avez créé l'image Docker pour l'architecture du jeu ARM64 d'instructions, veillez à utiliser l'--platform linux/arm64option au lieu de--platform linux/amd64.

  2. À partir d’une nouvelle fenêtre de terminal, publiez un événement au point de terminaison local.

    Linux/macOS

    Sous Linux et macOS, exécutez la commande curl suivante :

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Cette commande invoque la fonction avec un événement vide et renvoie une réponse. Si vous utilisez votre propre code de fonction plutôt que l’exemple de code de fonction, vous pouvez invoquer la fonction avec une charge utile JSON. Exemple :

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    Dans PowerShell, exécutez la Invoke-WebRequest commande suivante :

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    Cette commande invoque la fonction avec un événement vide et renvoie une réponse. Si vous utilisez votre propre code de fonction plutôt que l’exemple de code de fonction, vous pouvez invoquer la fonction avec une charge utile JSON. Exemple :

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"

    Sous Linux et macOS, exécutez la commande curl suivante :

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Cette commande invoque la fonction avec un événement vide et renvoie une réponse. Si vous utilisez votre propre code de fonction plutôt que l’exemple de code de fonction, vous pouvez invoquer la fonction avec une charge utile JSON. Exemple :

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
  3. Obtenez l’ID du conteneur.

    docker ps
  4. Utilisez la commande docker kill pour arrêter le conteneur. Dans cette commande, remplacez 3766c4ab331c par l’ID du conteneur de l’étape précédente.

    docker kill 3766c4ab331c
Pour charger l’image sur Amazon RIE et créer la fonction Lambda
  1. Exécutez la get-login-passwordcommande pour authentifier la CLI Docker auprès de votre registre Amazon ECR.

    • Définissez la --region valeur à l' Région AWS endroit où vous souhaitez créer le référentiel Amazon ECR.

    • 111122223333Remplacez-le par votre Compte AWS identifiant.

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. Créez un référentiel dans Amazon ECR à l’aide de la commande create-repository.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    Note

    Le référentiel Amazon ECR doit être Région AWS identique à la fonction Lambda.

    En cas de succès, vous obtenez une réponse comme celle-ci :

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. Copiez le repositoryUri à partir de la sortie de l’étape précédente.

  4. Exécutez la commande docker tag pour étiqueter votre image locale dans votre référentiel Amazon ECR en tant que dernière version. Dans cette commande :

    • docker-image:test est le nom et la balise de votre image Docker. Il s’agit du nom et de la balise de l’image que vous avez spécifiés dans la commande docker build.

    • Remplacez <ECRrepositoryUri> par l’repositoryUri que vous avez copié. Assurez-vous d’inclure :latest à la fin de l’URI.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    Exemple :

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. Exécutez la commande docker push pour déployer votre image locale dans le référentiel Amazon ECR. Assurez-vous d’inclure :latest à la fin de l’URI du référentiel.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. Créez un rôle d’exécution pour la fonction, si vous n’en avez pas déjà un. Vous aurez besoin de l’Amazon Resource Name (ARN) du rôle à l’étape suivante.

  7. Créez la fonction Lambda. Pour ImageUri, indiquez l’URI du référentiel mentionné précédemment. Assurez-vous d’inclure :latest à la fin de l’URI.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    Note

    Vous pouvez créer une fonction en utilisant une image d'un autre AWS compte, à condition que l'image se trouve dans la même région que la fonction Lambda. Pour de plus amples informations, veuillez consulter Autorisations entre comptes Amazon ECR.

  8. Invoquer la fonction.

    aws lambda invoke --function-name hello-world response.json

    Vous devriez obtenir une réponse comme celle-ci :

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. Pour voir la sortie de la fonction, consultez le fichier response.json.

Pour mettre à jour le code de fonction, vous devez créer à nouveau l'image, télécharger la nouvelle image dans le référentiel Amazon ECR, puis utiliser la update-function-codecommande pour déployer l'image sur la fonction Lambda.

Lambda résout l’étiquette d’image en hachage d’image spécifique. Cela signifie que si vous pointez la balise d’image qui a été utilisée pour déployer la fonction vers une nouvelle image dans Amazon ECR, Lambda ne met pas automatiquement à jour la fonction pour utiliser la nouvelle image.

Pour déployer la nouvelle image sur la même fonction Lambda, vous devez utiliser la update-function-codecommande, même si la balise d'image dans Amazon ECR reste la même. Dans l’exemple suivant, l’option --publish crée une version de la fonction à l’aide de l’image du conteneur mise à jour.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish

Pour charger l’image sur Amazon RIE et créer la fonction Lambda
  1. Exécutez la get-login-passwordcommande pour authentifier la CLI Docker auprès de votre registre Amazon ECR.

    • Définissez la --region valeur à l' Région AWS endroit où vous souhaitez créer le référentiel Amazon ECR.

    • 111122223333Remplacez-le par votre Compte AWS identifiant.

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. Créez un référentiel dans Amazon ECR à l’aide de la commande create-repository.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    Note

    Le référentiel Amazon ECR doit être Région AWS identique à la fonction Lambda.

    En cas de succès, vous obtenez une réponse comme celle-ci :

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. Copiez le repositoryUri à partir de la sortie de l’étape précédente.

  4. Exécutez la commande docker tag pour étiqueter votre image locale dans votre référentiel Amazon ECR en tant que dernière version. Dans cette commande :

    • docker-image:test est le nom et la balise de votre image Docker. Il s’agit du nom et de la balise de l’image que vous avez spécifiés dans la commande docker build.

    • Remplacez <ECRrepositoryUri> par l’repositoryUri que vous avez copié. Assurez-vous d’inclure :latest à la fin de l’URI.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    Exemple :

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. Exécutez la commande docker push pour déployer votre image locale dans le référentiel Amazon ECR. Assurez-vous d’inclure :latest à la fin de l’URI du référentiel.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. Créez un rôle d’exécution pour la fonction, si vous n’en avez pas déjà un. Vous aurez besoin de l’Amazon Resource Name (ARN) du rôle à l’étape suivante.

  7. Créez la fonction Lambda. Pour ImageUri, indiquez l’URI du référentiel mentionné précédemment. Assurez-vous d’inclure :latest à la fin de l’URI.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    Note

    Vous pouvez créer une fonction en utilisant une image d'un autre AWS compte, à condition que l'image se trouve dans la même région que la fonction Lambda. Pour de plus amples informations, veuillez consulter Autorisations entre comptes Amazon ECR.

  8. Invoquer la fonction.

    aws lambda invoke --function-name hello-world response.json

    Vous devriez obtenir une réponse comme celle-ci :

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. Pour voir la sortie de la fonction, consultez le fichier response.json.

Pour mettre à jour le code de fonction, vous devez créer à nouveau l'image, télécharger la nouvelle image dans le référentiel Amazon ECR, puis utiliser la update-function-codecommande pour déployer l'image sur la fonction Lambda.

Lambda résout l’étiquette d’image en hachage d’image spécifique. Cela signifie que si vous pointez la balise d’image qui a été utilisée pour déployer la fonction vers une nouvelle image dans Amazon ECR, Lambda ne met pas automatiquement à jour la fonction pour utiliser la nouvelle image.

Pour déployer la nouvelle image sur la même fonction Lambda, vous devez utiliser la update-function-codecommande, même si la balise d'image dans Amazon ECR reste la même. Dans l’exemple suivant, l’option --publish crée une version de la fonction à l’aide de l’image du conteneur mise à jour.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish

Utilisation d’une autre image de base avec le client d’interface d’exécution

Si vous utilisez une image de base uniquement pour le système d’exploitation ou une autre image de base, vous devez inclure le client d’interface d’exécution dans votre image. Le client d’interface d’exécution étend leUtilisation de l’API de l’environnement d’exécution Lambda pour des environnements d’exécution personnalisés, qui gère l’interaction entre Lambda et votre code de fonction.

Installez le client d’interface d’exécution pour Java dans votre Dockerfile ou en tant que dépendance dans votre projet. Par exemple, pour installer le client d’interface d’exécution à l’aide du gestionnaire de packages Maven, ajoutez ce qui suit à votre fichier pom.xml :

<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-runtime-interface-client</artifactId> <version>2.3.2</version> </dependency>

Pour plus de détails sur le package, consultez Client d’interface d’exécution AWS Lambda dans le référentiel central Maven. Vous pouvez également consulter le code source du client de l'interface d'exécution dans le GitHub référentiel AWS Lambda Java Support Libraries.

L’exemple suivant montre comment créer une image de conteneur pour Java à l’aide d’une image Amazon Corretto. Amazon Corretto est une distribution sans coût, multiplateforme et prête à la production de Open Java Development Kit (OpenJDK). Le projet Maven inclut le client d’interface d’exécution en tant que dépendance.

Pour exécuter la procédure indiquée dans cette section, vous devez satisfaire aux exigences suivantes :

Pour exécuter la procédure indiquée dans cette section, vous devez satisfaire aux exigences suivantes :

  1. Créez un projet Maven. Les paramètres suivants sont obligatoires :

    • groupId : l’espace de noms complet du package de votre application.

    • artifactId : le nom de votre projet. Cette valeur devient le nom du répertoire de votre projet.

    Linux/macOS
    mvn -B archetype:generate \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DgroupId=example \ -DartifactId=myapp \ -DinteractiveMode=false
    PowerShell
    mvn -B archetype:generate ` -DarchetypeArtifactId=maven-archetype-quickstart ` -DgroupId=example ` -DartifactId=myapp ` -DinteractiveMode=false
  2. Ouvrez le répertoire du projet.

    cd myapp
  3. Ouvrez le fichier pom.xml et remplacez le contenu par ce qui suit. Ce fichier inclut le aws-lambda-java-runtime-interface-client en tant que dépendance. Vous pouvez également installer le client de l’interface d’exécution dans le Dockerfile. Toutefois, l’approche la plus simple consiste à inclure la bibliothèque en tant que dépendance.

    <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>hello-lambda</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>hello-lambda</name> <url>http://maven.apache.org</url> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-runtime-interface-client</artifactId> <version>2.3.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.1.2</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
  4. Ouvrez le répertoire myapp/src/main/java/com/example/myapp et trouvez le fichier App.java. Il s’agit du code de la fonction Lambda. Remplacez le code par ce qui suit.

    Exemple gestionnaire de fonctions
    package example; public class App { public static String sayHello() { return "Hello world!"; } }
  5. La commande mvn -B archetype:generate de l’étape 1 a également généré un cas de test fictif dans le répertoire src/test. Pour les besoins de ce tutoriel, passez outre l’exécution des tests en supprimant l’intégralité de ce répertoire /test généré.

  6. Retournez au répertoire racine du projet, puis créez un nouveau Dockerfile. L’exemple de Dockerfile suivant utilise une image Amazon Corretto. Amazon Corretto est une distribution sans coût, multiplateforme et prête à la production d’OpenJDK.

    • Définissez la propriété FROM sur l’URI de l’image de base.

    • Définissez le ENTRYPOINT sur le module que vous souhaitez que le conteneur Docker exécute lorsqu’il démarre. Dans ce cas, le module est le client d’interface d’exécution.

    • Définir l’argument CMD pour le gestionnaire de la fonction Lambda.

    Notez que l’exemple de Dockerfile n’inclut pas d’instruction USER. Lorsque vous déployez une image de conteneur sur Lambda, Lambda définit automatiquement un utilisateur Linux par défaut disposant d’autorisations de moindre privilège. Ceci est différent du comportement standard de Docker qui est défini par défaut par l’utilisateur root lorsqu’aucune instruction USER n’est fournie.

    Exemple Dockerfile
    FROM public.ecr.aws/amazoncorretto/amazoncorretto:21 as base # Configure the build environment FROM base as build RUN yum install -y maven WORKDIR /src # Cache and copy dependencies ADD pom.xml . RUN mvn dependency:go-offline dependency:copy-dependencies # Compile the function ADD . . RUN mvn package # Copy the function artifact and dependencies onto a clean base FROM base WORKDIR /function COPY --from=build /src/target/dependency/*.jar ./ COPY --from=build /src/target/*.jar ./ # Set runtime interface client as default command for the container runtime ENTRYPOINT [ "/usr/bin/java", "-cp", "./*", "com.amazonaws.services.lambda.runtime.api.client.AWSLambda" ] # Pass the name of the function handler as an argument to the runtime CMD [ "example.App::sayHello" ]
  7. Générez l’image Docker à l’aide de la commande docker build. L’exemple suivant nomme l’image docker-image et lui donne la balise test. Pour rendre votre image compatible avec Lambda, vous devez utiliser l'--provenance=falseoption.

    docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
    Note

    La commande spécifie l’option --platform linux/amd64 pour garantir la compatibilité de votre conteneur avec l’environnement d’exécution Lambda, quelle que soit l’architecture de votre machine de génération. Si vous avez l'intention de créer une fonction Lambda à l'aide de l'architecture du jeu ARM64 d'instructions, veillez à modifier la commande pour utiliser l'--platform linux/arm64option à la place.

  1. Créez un projet Maven. Les paramètres suivants sont obligatoires :

    • groupId : l’espace de noms complet du package de votre application.

    • artifactId : le nom de votre projet. Cette valeur devient le nom du répertoire de votre projet.

    Linux/macOS
    mvn -B archetype:generate \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DgroupId=example \ -DartifactId=myapp \ -DinteractiveMode=false
    PowerShell
    mvn -B archetype:generate ` -DarchetypeArtifactId=maven-archetype-quickstart ` -DgroupId=example ` -DartifactId=myapp ` -DinteractiveMode=false
    mvn -B archetype:generate \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DgroupId=example \ -DartifactId=myapp \ -DinteractiveMode=false
  2. Ouvrez le répertoire du projet.

    cd myapp
  3. Ouvrez le fichier pom.xml et remplacez le contenu par ce qui suit. Ce fichier inclut le aws-lambda-java-runtime-interface-client en tant que dépendance. Vous pouvez également installer le client de l’interface d’exécution dans le Dockerfile. Toutefois, l’approche la plus simple consiste à inclure la bibliothèque en tant que dépendance.

    <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>hello-lambda</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>hello-lambda</name> <url>http://maven.apache.org</url> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-runtime-interface-client</artifactId> <version>2.3.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.1.2</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
  4. Ouvrez le répertoire myapp/src/main/java/com/example/myapp et trouvez le fichier App.java. Il s’agit du code de la fonction Lambda. Remplacez le code par ce qui suit.

    Exemple gestionnaire de fonctions
    package example; public class App { public static String sayHello() { return "Hello world!"; } }
  5. La commande mvn -B archetype:generate de l’étape 1 a également généré un cas de test fictif dans le répertoire src/test. Pour les besoins de ce tutoriel, passez outre l’exécution des tests en supprimant l’intégralité de ce répertoire /test généré.

  6. Retournez au répertoire racine du projet, puis créez un nouveau Dockerfile. L’exemple de Dockerfile suivant utilise une image Amazon Corretto. Amazon Corretto est une distribution sans coût, multiplateforme et prête à la production d’OpenJDK.

    • Définissez la propriété FROM sur l’URI de l’image de base.

    • Définissez le ENTRYPOINT sur le module que vous souhaitez que le conteneur Docker exécute lorsqu’il démarre. Dans ce cas, le module est le client d’interface d’exécution.

    • Définir l’argument CMD pour le gestionnaire de la fonction Lambda.

    Notez que l’exemple de Dockerfile n’inclut pas d’instruction USER. Lorsque vous déployez une image de conteneur sur Lambda, Lambda définit automatiquement un utilisateur Linux par défaut disposant d’autorisations de moindre privilège. Ceci est différent du comportement standard de Docker qui est défini par défaut par l’utilisateur root lorsqu’aucune instruction USER n’est fournie.

    Exemple Dockerfile
    FROM public.ecr.aws/amazoncorretto/amazoncorretto:21 as base # Configure the build environment FROM base as build RUN yum install -y maven WORKDIR /src # Cache and copy dependencies ADD pom.xml . RUN mvn dependency:go-offline dependency:copy-dependencies # Compile the function ADD . . RUN mvn package # Copy the function artifact and dependencies onto a clean base FROM base WORKDIR /function COPY --from=build /src/target/dependency/*.jar ./ COPY --from=build /src/target/*.jar ./ # Set runtime interface client as default command for the container runtime ENTRYPOINT [ "/usr/bin/java", "-cp", "./*", "com.amazonaws.services.lambda.runtime.api.client.AWSLambda" ] # Pass the name of the function handler as an argument to the runtime CMD [ "example.App::sayHello" ]
  7. Générez l’image Docker à l’aide de la commande docker build. L’exemple suivant nomme l’image docker-image et lui donne la balise test. Pour rendre votre image compatible avec Lambda, vous devez utiliser l'--provenance=falseoption.

    docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
    Note

    La commande spécifie l’option --platform linux/amd64 pour garantir la compatibilité de votre conteneur avec l’environnement d’exécution Lambda, quelle que soit l’architecture de votre machine de génération. Si vous avez l'intention de créer une fonction Lambda à l'aide de l'architecture du jeu ARM64 d'instructions, veillez à modifier la commande pour utiliser l'--platform linux/arm64option à la place.

Utilisez l’émulateur d’interface d’exécution pour tester l’image localement. Vous pouvez intégrer l’émulateur dans votre image ou utiliser la procédure suivante pour l’installer sur votre machine locale.

Pour installer et exécuter l’émulateur d’interface d’exécution sur votre ordinateur local
  1. Depuis le répertoire de votre projet, exécutez la commande suivante pour télécharger l'émulateur d'interface d'exécution (architecture x86-64) GitHub et l'installer sur votre machine locale.

    Linux/macOS
    mkdir -p ~/.aws-lambda-rie && \ curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \ chmod +x ~/.aws-lambda-rie/aws-lambda-rie

    Pour installer l'émulateur arm64, remplacez l'URL du GitHub référentiel dans la commande précédente par la suivante :

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
    PowerShell
    $dirPath = "$HOME\.aws-lambda-rie" if (-not (Test-Path $dirPath)) { New-Item -Path $dirPath -ItemType Directory } $downloadLink = "https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie" $destinationPath = "$HOME\.aws-lambda-rie\aws-lambda-rie" Invoke-WebRequest -Uri $downloadLink -OutFile $destinationPath

    Pour installer l’émulateur arm64, remplacez $downloadLink par ce qui suit :

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
  2. Démarrez votre image Docker à l’aide de la commande docker run. Remarques :

    • docker-image est le nom de l’image et test est la balise.

    • /usr/bin/java -cp './*' com.amazonaws.services.lambda.runtime.api.client.AWSLambda example.App::sayHello est le ENTRYPOINT suivi du CMD depuis votre Dockerfile.

    Linux/macOS
    docker run --platform linux/amd64 -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \ --entrypoint /aws-lambda/aws-lambda-rie \ docker-image:test \ /usr/bin/java -cp './*' com.amazonaws.services.lambda.runtime.api.client.AWSLambda example.App::sayHello
    PowerShell
    docker run --platform linux/amd64 -d -v "$HOME\.aws-lambda-rie:/aws-lambda" -p 9000:8080 ` --entrypoint /aws-lambda/aws-lambda-rie ` docker-image:test ` /usr/bin/java -cp './*' com.amazonaws.services.lambda.runtime.api.client.AWSLambda example.App::sayHello

    Cette commande exécute l’image en tant que conteneur et crée un point de terminaison local à localhost:9000/2015-03-31/functions/function/invocations.

    Note

    Si vous avez créé l'image Docker pour l'architecture du jeu ARM64 d'instructions, veillez à utiliser l'--platform linux/arm64option au lieu de--platform linux/amd64.

  3. Publiez un événement au point de terminaison local.

    Linux/macOS

    Sous Linux et macOS, exécutez la commande curl suivante :

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Cette commande invoque la fonction avec un événement vide et renvoie une réponse. Si vous utilisez votre propre code de fonction plutôt que l’exemple de code de fonction, vous pouvez invoquer la fonction avec une charge utile JSON. Exemple :

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    Dans PowerShell, exécutez la Invoke-WebRequest commande suivante :

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    Cette commande invoque la fonction avec un événement vide et renvoie une réponse. Si vous utilisez votre propre code de fonction plutôt que l’exemple de code de fonction, vous pouvez invoquer la fonction avec une charge utile JSON. Exemple :

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
  4. Obtenez l’ID du conteneur.

    docker ps
  5. Utilisez la commande docker kill pour arrêter le conteneur. Dans cette commande, remplacez 3766c4ab331c par l’ID du conteneur de l’étape précédente.

    docker kill 3766c4ab331c

Utilisez l’émulateur d’interface d’exécution pour tester l’image localement. Vous pouvez intégrer l’émulateur dans votre image ou utiliser la procédure suivante pour l’installer sur votre machine locale.

Pour installer et exécuter l’émulateur d’interface d’exécution sur votre ordinateur local
  1. Depuis le répertoire de votre projet, exécutez la commande suivante pour télécharger l'émulateur d'interface d'exécution (architecture x86-64) GitHub et l'installer sur votre machine locale.

    Linux/macOS
    mkdir -p ~/.aws-lambda-rie && \ curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \ chmod +x ~/.aws-lambda-rie/aws-lambda-rie

    Pour installer l'émulateur arm64, remplacez l'URL du GitHub référentiel dans la commande précédente par la suivante :

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
    PowerShell
    $dirPath = "$HOME\.aws-lambda-rie" if (-not (Test-Path $dirPath)) { New-Item -Path $dirPath -ItemType Directory } $downloadLink = "https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie" $destinationPath = "$HOME\.aws-lambda-rie\aws-lambda-rie" Invoke-WebRequest -Uri $downloadLink -OutFile $destinationPath

    Pour installer l’émulateur arm64, remplacez $downloadLink par ce qui suit :

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
    mkdir -p ~/.aws-lambda-rie && \ curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \ chmod +x ~/.aws-lambda-rie/aws-lambda-rie

    Pour installer l'émulateur arm64, remplacez l'URL du GitHub référentiel dans la commande précédente par la suivante :

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
  2. Démarrez votre image Docker à l’aide de la commande docker run. Remarques :

    • docker-image est le nom de l’image et test est la balise.

    • /usr/bin/java -cp './*' com.amazonaws.services.lambda.runtime.api.client.AWSLambda example.App::sayHello est le ENTRYPOINT suivi du CMD depuis votre Dockerfile.

    Linux/macOS
    docker run --platform linux/amd64 -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \ --entrypoint /aws-lambda/aws-lambda-rie \ docker-image:test \ /usr/bin/java -cp './*' com.amazonaws.services.lambda.runtime.api.client.AWSLambda example.App::sayHello
    PowerShell
    docker run --platform linux/amd64 -d -v "$HOME\.aws-lambda-rie:/aws-lambda" -p 9000:8080 ` --entrypoint /aws-lambda/aws-lambda-rie ` docker-image:test ` /usr/bin/java -cp './*' com.amazonaws.services.lambda.runtime.api.client.AWSLambda example.App::sayHello
    docker run --platform linux/amd64 -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \ --entrypoint /aws-lambda/aws-lambda-rie \ docker-image:test \ /usr/bin/java -cp './*' com.amazonaws.services.lambda.runtime.api.client.AWSLambda example.App::sayHello

    Cette commande exécute l’image en tant que conteneur et crée un point de terminaison local à localhost:9000/2015-03-31/functions/function/invocations.

    Note

    Si vous avez créé l'image Docker pour l'architecture du jeu ARM64 d'instructions, veillez à utiliser l'--platform linux/arm64option au lieu de--platform linux/amd64.

  3. Publiez un événement au point de terminaison local.

    Linux/macOS

    Sous Linux et macOS, exécutez la commande curl suivante :

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Cette commande invoque la fonction avec un événement vide et renvoie une réponse. Si vous utilisez votre propre code de fonction plutôt que l’exemple de code de fonction, vous pouvez invoquer la fonction avec une charge utile JSON. Exemple :

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    Dans PowerShell, exécutez la Invoke-WebRequest commande suivante :

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    Cette commande invoque la fonction avec un événement vide et renvoie une réponse. Si vous utilisez votre propre code de fonction plutôt que l’exemple de code de fonction, vous pouvez invoquer la fonction avec une charge utile JSON. Exemple :

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"

    Sous Linux et macOS, exécutez la commande curl suivante :

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Cette commande invoque la fonction avec un événement vide et renvoie une réponse. Si vous utilisez votre propre code de fonction plutôt que l’exemple de code de fonction, vous pouvez invoquer la fonction avec une charge utile JSON. Exemple :

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
  4. Obtenez l’ID du conteneur.

    docker ps
  5. Utilisez la commande docker kill pour arrêter le conteneur. Dans cette commande, remplacez 3766c4ab331c par l’ID du conteneur de l’étape précédente.

    docker kill 3766c4ab331c
Pour charger l’image sur Amazon RIE et créer la fonction Lambda
  1. Exécutez la get-login-passwordcommande pour authentifier la CLI Docker auprès de votre registre Amazon ECR.

    • Définissez la --region valeur à l' Région AWS endroit où vous souhaitez créer le référentiel Amazon ECR.

    • 111122223333Remplacez-le par votre Compte AWS identifiant.

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. Créez un référentiel dans Amazon ECR à l’aide de la commande create-repository.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    Note

    Le référentiel Amazon ECR doit être Région AWS identique à la fonction Lambda.

    En cas de succès, vous obtenez une réponse comme celle-ci :

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. Copiez le repositoryUri à partir de la sortie de l’étape précédente.

  4. Exécutez la commande docker tag pour étiqueter votre image locale dans votre référentiel Amazon ECR en tant que dernière version. Dans cette commande :

    • docker-image:test est le nom et la balise de votre image Docker. Il s’agit du nom et de la balise de l’image que vous avez spécifiés dans la commande docker build.

    • Remplacez <ECRrepositoryUri> par l’repositoryUri que vous avez copié. Assurez-vous d’inclure :latest à la fin de l’URI.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    Exemple :

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. Exécutez la commande docker push pour déployer votre image locale dans le référentiel Amazon ECR. Assurez-vous d’inclure :latest à la fin de l’URI du référentiel.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. Créez un rôle d’exécution pour la fonction, si vous n’en avez pas déjà un. Vous aurez besoin de l’Amazon Resource Name (ARN) du rôle à l’étape suivante.

  7. Créez la fonction Lambda. Pour ImageUri, indiquez l’URI du référentiel mentionné précédemment. Assurez-vous d’inclure :latest à la fin de l’URI.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    Note

    Vous pouvez créer une fonction en utilisant une image d'un autre AWS compte, à condition que l'image se trouve dans la même région que la fonction Lambda. Pour de plus amples informations, veuillez consulter Autorisations entre comptes Amazon ECR.

  8. Invoquer la fonction.

    aws lambda invoke --function-name hello-world response.json

    Vous devriez obtenir une réponse comme celle-ci :

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. Pour voir la sortie de la fonction, consultez le fichier response.json.

Pour mettre à jour le code de fonction, vous devez créer à nouveau l'image, télécharger la nouvelle image dans le référentiel Amazon ECR, puis utiliser la update-function-codecommande pour déployer l'image sur la fonction Lambda.

Lambda résout l’étiquette d’image en hachage d’image spécifique. Cela signifie que si vous pointez la balise d’image qui a été utilisée pour déployer la fonction vers une nouvelle image dans Amazon ECR, Lambda ne met pas automatiquement à jour la fonction pour utiliser la nouvelle image.

Pour déployer la nouvelle image sur la même fonction Lambda, vous devez utiliser la update-function-codecommande, même si la balise d'image dans Amazon ECR reste la même. Dans l’exemple suivant, l’option --publish crée une version de la fonction à l’aide de l’image du conteneur mise à jour.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish

Pour charger l’image sur Amazon RIE et créer la fonction Lambda
  1. Exécutez la get-login-passwordcommande pour authentifier la CLI Docker auprès de votre registre Amazon ECR.

    • Définissez la --region valeur à l' Région AWS endroit où vous souhaitez créer le référentiel Amazon ECR.

    • 111122223333Remplacez-le par votre Compte AWS identifiant.

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. Créez un référentiel dans Amazon ECR à l’aide de la commande create-repository.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    Note

    Le référentiel Amazon ECR doit être Région AWS identique à la fonction Lambda.

    En cas de succès, vous obtenez une réponse comme celle-ci :

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. Copiez le repositoryUri à partir de la sortie de l’étape précédente.

  4. Exécutez la commande docker tag pour étiqueter votre image locale dans votre référentiel Amazon ECR en tant que dernière version. Dans cette commande :

    • docker-image:test est le nom et la balise de votre image Docker. Il s’agit du nom et de la balise de l’image que vous avez spécifiés dans la commande docker build.

    • Remplacez <ECRrepositoryUri> par l’repositoryUri que vous avez copié. Assurez-vous d’inclure :latest à la fin de l’URI.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    Exemple :

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. Exécutez la commande docker push pour déployer votre image locale dans le référentiel Amazon ECR. Assurez-vous d’inclure :latest à la fin de l’URI du référentiel.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. Créez un rôle d’exécution pour la fonction, si vous n’en avez pas déjà un. Vous aurez besoin de l’Amazon Resource Name (ARN) du rôle à l’étape suivante.

  7. Créez la fonction Lambda. Pour ImageUri, indiquez l’URI du référentiel mentionné précédemment. Assurez-vous d’inclure :latest à la fin de l’URI.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    Note

    Vous pouvez créer une fonction en utilisant une image d'un autre AWS compte, à condition que l'image se trouve dans la même région que la fonction Lambda. Pour de plus amples informations, veuillez consulter Autorisations entre comptes Amazon ECR.

  8. Invoquer la fonction.

    aws lambda invoke --function-name hello-world response.json

    Vous devriez obtenir une réponse comme celle-ci :

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. Pour voir la sortie de la fonction, consultez le fichier response.json.

Pour mettre à jour le code de fonction, vous devez créer à nouveau l'image, télécharger la nouvelle image dans le référentiel Amazon ECR, puis utiliser la update-function-codecommande pour déployer l'image sur la fonction Lambda.

Lambda résout l’étiquette d’image en hachage d’image spécifique. Cela signifie que si vous pointez la balise d’image qui a été utilisée pour déployer la fonction vers une nouvelle image dans Amazon ECR, Lambda ne met pas automatiquement à jour la fonction pour utiliser la nouvelle image.

Pour déployer la nouvelle image sur la même fonction Lambda, vous devez utiliser la update-function-codecommande, même si la balise d'image dans Amazon ECR reste la même. Dans l’exemple suivant, l’option --publish crée une version de la fonction à l’aide de l’image du conteneur mise à jour.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish

Rubrique suivante :

Couches
ConfidentialitéConditions d'utilisation du sitePréférences de cookies
© 2025, Amazon Web Services, Inc. ou ses affiliés. Tous droits réservés.