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.
Lazy-load images de conteneurs avec Seekable OCI (SOCI)
Pour les fonctions événementielles Lambda déployées sous forme d'images de conteneur sur des instances gérées Lambda, Lambda télécharge et décompresse l'image sur chaque instance avant de démarrer un environnement d'exécution. Pour les images de grande taille, cette extraction représente la plus grande partie du temps entre la publication d'une version de fonction ou sa mise à l'échelle et le moment où l'environnement d'exécution gère sa première invocation. Avec Seekable OCI (SOCI), Lambda peut démarrer l'environnement d'exécution avant que l'ensemble de l'image ne soit téléchargé.
SOCI est un technologie open source
Comment fonctionne SOCI sur les instances gérées Lambda
-
Vous créez un index SOCI pour votre image et vous l'envoyez à Amazon ECR à côté de l'image. Le résultat est un index d'images de l'Open Container Initiative (OCI) qui fait référence à deux artefacts : votre manifeste d'image d'origine et l'index SOCI.
-
Vous créez ou mettez à jour votre fonction avec un URI d'image qui pointe vers l'index de l'image. Lambda détecte l'index SOCI et active le chargement différé pour les environnements d'exécution de cette fonction. Vous n'avez pas besoin de modifier la configuration d'une autre fonction.
-
Lambda extrait le contenu des images à la demande. Les fichiers lus par votre code d'initialisation sont récupérés lors de l'initialisation. Les fichiers que votre gestionnaire lit pour la première fois sont récupérés lors de cette invocation. Lambda ne télécharge pas le reste de l'image en arrière-plan.
Note
Si votre fonction lit un fichier pour la première fois lors d'une invocation plutôt que pendant l'initialisation, Lambda récupère ce fichier lors de la première invocation, ce qui augmente la durée de cette invocation. Pour garantir la cohérence des durées d'invocation, importez toutes les bibliothèques et lisez tous les fichiers dont votre fonction a besoin dans votre code d'initialisation, et non dans le gestionnaire. Nous vous recommandons de tester votre fonction avec et sans SOCI afin de comparer le temps de démarrage et la durée d'invocation de votre charge de travail.
Créez un index SOCI pour votre image
L'exemple suivant s'exécute sur Amazon Linux 2023. Il installe le snapshotter SOCI, containerd et nerdctl, puis crée un index SOCI pour une image existante dans Amazon ECR et affiche le résultat. Remplacez les valeurs des espaces réservés par les vôtres. Pour d'autres méthodes de création et de diffusion d'un index SOCI, voir Premiers pas avec le snapshotter SOCI
sudo yum install -y soci-snapshotter containerd nerdctl sudo systemctl start soci-snapshotter sudo systemctl restart containerd ACCOUNT_ID="111122223333" REGION="us-east-2" REPOSITORY_NAME="my-function" ORIGINAL_IMAGE_TAG="v1" SOCI_IMAGE_TAG="v1-soci" REGISTRY="$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com" aws ecr get-login-password --region $REGION | sudo nerdctl login -u AWS --password-stdin $REGISTRY sudo nerdctl pull $REGISTRY/$REPOSITORY_NAME:$ORIGINAL_IMAGE_TAG sudo nerdctl image convert --soci $REGISTRY/$REPOSITORY_NAME:$ORIGINAL_IMAGE_TAG $REGISTRY/$REPOSITORY_NAME:$SOCI_IMAGE_TAG sudo nerdctl push --platform linux/arm64 $REGISTRY/$REPOSITORY_NAME:$SOCI_IMAGE_TAG
Note
Cet exemple crée un arm64 (AWS Image (graviton). Lambda ne prend en charge que les images de conteneurs à architecture unique. Votre image doit donc cibler une architecture de jeu d'instructions unique, et --platform la valeur doit correspondre à l'architecture de votre fonction. Pour plus d’informations, consultez Sélection et configuration d’une architecture de jeu d’instructions pour votre fonction Lambda.
Utiliser $REGISTRY/$REPOSITORY_NAME:$SOCI_IMAGE_TAG comme URI de l'image lorsque vous créez ou mettez à jour votre fonction. Publiez ensuite une version de la fonction. Lambda résout la version de la fonction en index d'image et active le chargement différé.
Exigences et limitations
- Version de l'indice SOCI
-
Lambda prend en charge SOCI Index Manifest v2 uniquement (type de média)
application/vnd.amazon.soci.index.v2+json). Lambda ne prend pas en charge les index SOCI Index Manifest v1. Lenerdctl image convert --sociLa commande de la section précédente produit un index v2. - Format d'index d'image
-
L'index d'images doit contenir exactement deux entrées : l'index SOCI et un manifeste d'image OCI.
- URI de l’image
-
Pointez l'URI de l'image de votre fonction vers SOCI-indexed tag (par exemple,
my-function:v1-soci), pas sur la balise d'image d'origine. Lambda résout la version de la fonction en index d'image. Pour modifier l'image ou l'index, appuyez sur une nouvelle SOCI-indexed balise et met à jour l'URI de l'image de la fonction. - Disponibilité
-
SOCI est disponible uniquement pour les fonctions d'image de conteneur exécutées sur des instances gérées Lambda.