Déployer des fonctions Lambda en Python 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.

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

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

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 Python

AWS fournit les images de base suivantes pour Python :

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

3,12

Python 3.12 Amazon Linux 2023 Dockerfile pour Python 3.12 sur GitHub

Non prévu

3,11

Python 3.11 Amazon Linux 2 Dockerfile pour Python 3.11 sur GitHub

Non prévu

3,10

Python 3.10 Amazon Linux 2 Dockerfile pour Python 3.10 sur GitHub

Non prévu

3.9

Python 3.9 Amazon Linux 2 Dockerfile pour Python 3.9 sur GitHub

Non prévu

3.8

Python 3.8 Amazon Linux 2 Dockerfile pour Python 3.8 sur GitHub

14 octobre 2024

ECRRéférentiel Amazon : gallery.ecr.aws/lambda/python

Les images de base de Python 3.12 et versions ultérieures sont basées sur l'image de conteneur minimale Amazon Linux 2023. Les images de base Python 3.8-3.11 sont basées sur l'image Amazon Linux 2. AL2Les images basées sur la version 023 présentent plusieurs avantages par rapport à Amazon Linux 2, notamment un encombrement de déploiement réduit et des versions mises à jour de bibliothèques telles que. glibc

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.

Chemin de recherche des dépendances dans les images de base

Lorsque vous utilisez une instruction import dans votre code, l’exécution Python recherche les répertoires dans son chemin de recherche jusqu’à ce qu’elle trouve le module ou le package. Par défaut, l’exécution recherche d’abord dans le répertoire {LAMBDA_TASK_ROOT}. Si vous ajoutez une version d’une bibliothèque incluse dans l’exécution dans votre image, votre version aura la priorité sur la version incluse dans l’exécution.

Les autres étapes du chemin de recherche dépendent de la version de l’image de base Lambda pour Python que vous utilisez :

  • Python 3.11 et versions ultérieures : Les bibliothèques incluses dans l'exécution et les bibliothèques installées par pip sont installées dans le répertoire /var/lang/lib/python3.11/site-packages. Ce répertoire a la priorité sur /var/runtime dans le chemin de recherche. Vous pouvez le remplacer en SDK utilisant pip pour installer une version plus récente. Vous pouvez utiliser pip pour vérifier que le runtime inclus SDK et ses dépendances sont compatibles avec tous les packages que vous installez.

  • Python 3.8-3.10 : Les bibliothèques incluses dans l’exécution sont installées dans le répertoire /var/runtime. Les bibliothèques installées par PIP sont installées dans le répertoire /var/lang/lib/python3.x/site-packages. Le répertoire /var/runtime a la priorité sur /var/lang/lib/python3.x/site-packages dans le chemin de recherche.

Vous pouvez voir le chemin de recherche complet de votre fonction Lambda en ajoutant l’extrait de code suivant.

import sys search_path = sys.path print(search_path)

Utilisation d'une image AWS de base pour Python

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

Pour créer une image de conteneur à partir d'une image AWS de base pour Python
  1. Créez un répertoire pour le projet, puis passez à ce répertoire.

    mkdir example cd example
  2. Créez un nouveau fichier appelé lambda_function.py. Vous pouvez ajouter l’exemple de code de fonction suivant au fichier pour le tester, ou utiliser le vôtre.

    Exemple Fonction Python
    import sys def handler(event, context): return 'Hello from AWS Lambda using Python' + sys.version + '!'
  3. Créez un nouveau fichier appelé requirements.txt. Si vous utilisez l’exemple de code de fonction de l’étape précédente, vous pouvez laisser le fichier vide, car il n’y a pas de dépendances. Sinon, répertoriez chaque bibliothèque requise. Par exemple, voici à quoi votre fichier requirements.txt doit ressembler si votre fonction utilise AWS SDK for Python (Boto3) :

    Exemple requirements.txt
    boto3
  4. Créez un nouveau Dockerfile avec la configuration suivante :

    • Définissez la FROM propriété sur URIl'image de base.

    • Utilisez la COPY commande pour copier le code de fonction et les dépendances d'exécution dans une variable {LAMBDA_TASK_ROOT} d'environnement définie par Lambda.

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

    Notez que l'exemple de Dockerfile n'inclut aucune instruction. USER Lorsque vous déployez une image de conteneur sur Lambda, Lambda définit automatiquement un utilisateur Linux par défaut doté des autorisations les moins privilégiées. Ceci est différent du comportement standard de Docker qui est défini par défaut par l'rootutilisateur lorsqu'aucune USER instruction n'est fournie.

    Exemple Dockerfile
    FROM public.ecr.aws/lambda/python:3.12 # Copy requirements.txt COPY requirements.txt ${LAMBDA_TASK_ROOT} # Install the specified packages RUN pip install -r requirements.txt # Copy function code COPY lambda_function.py ${LAMBDA_TASK_ROOT} # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "lambda_function.handler" ]
  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.

    docker build --platform linux/amd64 -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 --read-only 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 souhaiterez peut-être invoquer la fonction avec une JSON charge utile. 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 souhaiterez peut-être invoquer la fonction avec une JSON charge utile. 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
Pour télécharger l'image sur Amazon ECR et créer la fonction Lambda
  1. Exécutez la get-login-passwordcommande pour authentifier le Docker auprès CLI de votre registre AmazonECR.

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

    • 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 ECR référentiel Amazon 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 ECR référentiel Amazon en tant que dernière version. Dans cette commande :

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

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

    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 AmazonECR. Assurez-vous de l'inclure :latest à la fin du référentielURI.

    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 du nom de ressource Amazon (ARN) du rôle à l'étape suivante.

  7. Créez la fonction Lambda. PourImageUri, spécifiez le référentiel URI antérieur. Assurez-vous d'inclure :latest à la fin duURI.

    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 ECR multi-comptes Amazon.

  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 ECR référentiel Amazon, puis utiliser la update-function-codecommande pour déployer l'image sur la fonction Lambda.

Lambda résout la balise d'image en un condensé 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 AmazonECR, 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 ECR reste la même dans Amazon. Dans l'exemple suivant, l'--publishoption crée une nouvelle 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 du moteur d'exécution Lambda API 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 Python à l’aide du gestionnaire de packages pip :

pip install awslambdaric

Vous pouvez également télécharger le client d'interface d'exécution Python depuis GitHub.

L'exemple suivant montre comment créer une image de conteneur pour Python à l'aide d'une image non AWS basique. L’exemple Dockerfile utilise une image de base Python officielle. Le Dockerfile inclut le client d’interface d’exécution pour Python.

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

Pour créer une image de conteneur à partir d'une image non AWS basique
  1. Créez un répertoire pour le projet, puis passez à ce répertoire.

    mkdir example cd example
  2. Créez un nouveau fichier appelé lambda_function.py. Vous pouvez ajouter l’exemple de code de fonction suivant au fichier pour le tester, ou utiliser le vôtre.

    Exemple Fonction Python
    import sys def handler(event, context): return 'Hello from AWS Lambda using Python' + sys.version + '!'
  3. Créez un nouveau fichier appelé requirements.txt. Si vous utilisez l’exemple de code de fonction de l’étape précédente, vous pouvez laisser le fichier vide, car il n’y a pas de dépendances. Sinon, répertoriez chaque bibliothèque requise. Par exemple, voici à quoi votre fichier requirements.txt doit ressembler si votre fonction utilise AWS SDK for Python (Boto3) :

    Exemple requirements.txt
    boto3
  4. Créez un nouveau fichier Docker. Le Dockerfile suivant utilise une image de base Python officielle au lieu d’une image de base AWS. Le Dockerfile inclut le client d’interface d’exécution, ce qui rend l’image compatible avec Lambda. L’exemple de fichier Docker suivant utilise une génération en plusieurs étapes.

    • Définissez la propriété FROM sur 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éfinissez le CMD sur le gestionnaire de la fonction Lambda.

    Notez que l'exemple de Dockerfile n'inclut aucune instruction. USER Lorsque vous déployez une image de conteneur sur Lambda, Lambda définit automatiquement un utilisateur Linux par défaut doté des autorisations les moins privilégiées. Ceci est différent du comportement standard de Docker qui est défini par défaut par l'rootutilisateur lorsqu'aucune USER instruction n'est fournie.

    Exemple Dockerfile
    # Define custom function directory ARG FUNCTION_DIR="/function" FROM python:3.12 as build-image # Include global arg in this stage of the build ARG FUNCTION_DIR # Copy function code RUN mkdir -p ${FUNCTION_DIR} COPY . ${FUNCTION_DIR} # Install the function's dependencies RUN pip install \ --target ${FUNCTION_DIR} \ awslambdaric # Use a slim version of the base Python image to reduce the final image size FROM python:3.12-slim # Include global arg in this stage of the build ARG FUNCTION_DIR # Set working directory to function root directory WORKDIR ${FUNCTION_DIR} # Copy in the built dependencies COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR} # Set runtime interface client as default command for the container runtime ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric" ] # Pass the name of the function handler as an argument to the runtime CMD [ "lambda_function.handler" ]
  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.

    docker build --platform linux/amd64 -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 à 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 le GitHub référentiel de URL la commande précédente par le suivant :

    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. Notez ce qui suit :

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

    • /usr/local/bin/python -m awslambdaric lambda_function.handler 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 \ --read-only \ docker-image:test \ /usr/local/bin/python -m awslambdaric lambda_function.handler
    PowerShell
    docker run --platform linux/amd64 -d -v "$HOME\.aws-lambda-rie:/aws-lambda" -p 9000:8080 ` --entrypoint /aws-lambda/aws-lambda-rie ` --read-only ` docker-image:test ` /usr/local/bin/python -m awslambdaric lambda_function.handler

    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 souhaiterez peut-être invoquer la fonction avec une JSON charge utile. 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 souhaiterez peut-être invoquer la fonction avec une JSON charge utile. 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
Pour télécharger l'image sur Amazon ECR et créer la fonction Lambda
  1. Exécutez la get-login-passwordcommande pour authentifier le Docker auprès CLI de votre registre AmazonECR.

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

    • 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 ECR référentiel Amazon 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 ECR référentiel Amazon en tant que dernière version. Dans cette commande :

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

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

    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 AmazonECR. Assurez-vous de l'inclure :latest à la fin du référentielURI.

    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 du nom de ressource Amazon (ARN) du rôle à l'étape suivante.

  7. Créez la fonction Lambda. PourImageUri, spécifiez le référentiel URI antérieur. Assurez-vous d'inclure :latest à la fin duURI.

    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 ECR multi-comptes Amazon.

  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 ECR référentiel Amazon, puis utiliser la update-function-codecommande pour déployer l'image sur la fonction Lambda.

Lambda résout la balise d'image en un condensé 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 AmazonECR, 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 ECR reste la même dans Amazon. Dans l'exemple suivant, l'--publishoption crée une nouvelle 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 un exemple de création d’une image Python à partir d’une image de base Alpine, consultez Prise en charge des images conteneurs pour Lambda sur le blog AWS .