

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.

# Self-managed Stockage de code S3
<a name="configuration-self-managed-storage"></a>

Par défaut, lorsque vous créez ou mettez à jour une fonction ou une couche Lambda à partir d'une archive de fichiers .zip, Lambda stocke une copie de votre code dans le stockage. Lambda-managed Chaque AWS compte dispose d'un quota de 300 Go de Lambda-managed stockage par région.

Grâce au stockage de code S3 autogéré, vous pouvez configurer Lambda pour référencer votre code directement à partir d'un compartiment S3 de votre compte. Lambda ne stocke pas de copie de votre code. Le code n'est donc pas pris en compte dans votre quota Lambda-managed de stockage. Lambda accède à votre code directement depuis votre compartiment S3.

Self-managed Le stockage de code S3 est disponible pour toutes les fonctions et couches créées et mises à jour à l'aide d'archives de fichiers .zip. Il est compatible avec toutes les classes de stockage S3 à l'exception des classes de stockage Glacier.

**Note**  
Self-managed Le stockage du code S3 ne modifie pas la taille maximale du package de déploiement .zip, qui reste à 250 Mo (décompressé).

**Topics**
+ [Configuration d'un stockage de code S3 autogéré](#self-managed-storage-setup)
+ [Configuration des autorisations](#self-managed-storage-permissions)
+ [Création d'une fonction avec un stockage S3 autogéré](#self-managed-storage-create-function)
+ [Utilisation du stockage S3 autogéré avec des couches](#self-managed-storage-layers)
+ [Basculer entre les modes de stockage](#self-managed-storage-switching)
+ [Cycle de vie des fonctions avec stockage autogéré](#self-managed-storage-lifecycle)
+ [Cross-account et utilisation interrégionale](#self-managed-storage-cross-account)
+ [Considérations](#self-managed-storage-considerations)

## Configuration d'un stockage de code S3 autogéré
<a name="self-managed-storage-setup"></a>

Pour utiliser le stockage de code S3 autogéré, procédez comme suit :

1. Créez un compartiment S3 ou utilisez un compartiment existant dans votre compte.

1. Activez la gestion des versions [ S3 ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) pour le bucket. Lambda nécessite un contrôle de version S3 pour déterminer la version de votre objet source à utiliser. Chaque fois que vous chargez un nouveau package .zip, S3 crée une nouvelle version afin que Lambda puisse distinguer les mises à jour.

1. Téléchargez votre package de déploiement .zip dans le compartiment S3.

1. Accordez le principal de service Lambda `s3:GetObject` et `s3:GetObjectVersion` les autorisations pour l'objet source. Consultez [ la section Configuration des autorisations](#self-managed-storage-permissions).

1. Créez ou mettez à jour votre fonction ou votre couche, en spécifiant l'objet S3, la clé S3, la version de l'objet S3 et en réglant `S3ObjectStorageMode` sur`REFERENCE`.

## Configuration des autorisations
<a name="self-managed-storage-permissions"></a>

Pour utiliser le stockage de code S3 autogéré, accordez au principal du service Lambda (`lambda.amazonaws.com`) l'autorisation d'accéder à vos objets source. Ajoutez la politique de compartiment S3 suivante :

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "LambdaSelfManagedCodeAccess",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion"
      ],
      "Resource": [
        "arn:aws:s3:::{{my-bucket}}/{{my-function.zip}}"
      ],
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:lambda:{{us-east-1}}:{{111122223333}}:function:{{my-function}}"
        }
      }
    }
  ]
}
```

## Création d'une fonction avec un stockage S3 autogéré
<a name="self-managed-storage-create-function"></a>

Vous pouvez créer une fonction avec un stockage de code S3 autogéré à l'aide de la console AWS CLI, du ou AWS CloudFormation.

**Note**  
L'éditeur de code de la console Lambda n'est pas disponible pour les fonctions qui utilisent le mode Référence. Pour modifier le code d'une fonction, mettez à jour le fichier .zip dans votre compartiment S3 et mettez à jour la fonction.

### Utilisation de la console
<a name="self-managed-storage-console"></a>

Lorsque vous mettez à jour une fonction depuis un emplacement S3 dans la console Lambda, vous pouvez choisir le mode de stockage du code.

**Pour mettre à jour une fonction afin d'utiliser le mode Référence (console)**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Sélectionnez la fonction à mettre à jour, puis choisissez l'onglet **Code**.

1. Sous Source de ** code**, choisissez ** Mettre à jour**, puis choisissez ** Mettre à jour à partir d'un fichier dans Amazon S3**.

1. Pour l'URL du lien ** Amazon S3**, entrez l'URL du lien S3 de votre fichier .zip.

1. Dans Mode de stockage ** du code**, choisissez Mode ** de référence**.

1. Choisissez **Enregistrer**.

Après avoir configuré le mode Référence, la ** section Propriétés du ** code de l'**onglet ** Code de la fonction affiche le mode de stockage du ** code : Référence ** et l'emplacement ** S3 ** pointant vers votre compartiment S3.

### Utilisation de AWS CLI
<a name="self-managed-storage-cli"></a>

Utilisez la `create-function` commande avec le `S3ObjectStorageMode=REFERENCE` paramètre :

```
aws lambda create-function \
  --function-name my-function \
  --runtime python3.12 \
  --role arn:aws:iam::111122223333:role/lambda-execution-role \
  --handler lambda_function.lambda_handler \
  --code S3Bucket={{my-bucket}},\
S3Key={{my-function.zip}},\
S3ObjectVersion={{abc123def456}},\
S3ObjectStorageMode=REFERENCE
```

Pour mettre à jour une fonction existante afin d'utiliser le stockage S3 autogéré :

```
aws lambda update-function-code \
  --function-name my-function \
  --s3-bucket {{my-bucket}} \
  --s3-key {{my-function.zip}} \
  --s3-object-version {{abc123def456}} \
  --s3-object-storage-mode REFERENCE
```

**Important**  
Vous devez `S3ObjectStorageMode=REFERENCE` le spécifier à chaque appel à`update-function-code`. Si vous omettez`S3ObjectStorageMode`, la valeur par défaut est `COPY` et Lambda stocke votre code dans le stockage. Lambda-managed 

### Utilisation AWS CloudFormation
<a name="self-managed-storage-cfn"></a>

Dans votre CloudFormation modèle, définissez `S3ObjectStorageMode` sur `REFERENCE` dans la `Code` propriété de la `AWS::Lambda::Function` ressource :

```
Resources:
  MyFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: my-function
      Runtime: python3.12
      Handler: lambda_function.lambda_handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Code:
        S3Bucket: {{my-bucket}}
        S3Key: {{my-function.zip}}
        S3ObjectVersion: {{abc123def456}}
        S3ObjectStorageMode: REFERENCE
```

## Utilisation du stockage S3 autogéré avec des couches
<a name="self-managed-storage-layers"></a>

Vous pouvez également utiliser le stockage de code S3 autogéré pour les versions de couche. Utilisez la `publish-layer-version` commande avec `S3ObjectStorageMode=REFERENCE` :

```
aws lambda publish-layer-version \
  --layer-name my-layer \
  --content S3Bucket={{my-bucket}},S3Key={{my-layer.zip}},S3ObjectStorageMode=REFERENCE \
  --compatible-runtimes python3.12
```

Vous pouvez utiliser n'importe quelle combinaison de Lambda-managed stockage autogéré pour le code de fonction et le code de couche.

## Basculer entre les modes de stockage
<a name="self-managed-storage-switching"></a>

Vous pouvez basculer entre le stockage Lambda-managed de code S3 autogéré lorsque vous mettez à jour le code de votre fonction ou que vous publiez une nouvelle version de couche. Réglez sur `S3ObjectStorageMode` l'un des deux `COPY` ou sur `REFERENCE` :
+ `COPY`(par défaut) — Lambda copie votre code source dans le Lambda-managed stockage.
+ `REFERENCE`— Lambda référence votre code source directement à partir de votre compartiment S3 sans en stocker une copie.

Lorsque vous passez de `COPY` à`REFERENCE`, Lambda supprime la Lambda-managed copie de votre code source. Lorsque vous passez de `REFERENCE` à`COPY`, Lambda crée une copie de votre code source dans le Lambda-managed stockage. Le passage en mode `COPY` échoue si vous dépassez la limite de stockage Lambda-managed du code.

## Cycle de vie des fonctions avec stockage autogéré
<a name="self-managed-storage-lifecycle"></a>

Lambda accède régulièrement à l'objet source depuis votre compartiment S3 pour réoptimiser le code de votre fonction. Vous devez conserver l'accès à l'objet source pour que votre fonction reste active.
+ Si Lambda perd l'accès à l'objet source d'une fonction, celle-ci passe à l'`Inactive`état. Pour restaurer la fonction, restaurez l'accès à l'objet source et mettez-la à jour.
+ Si Lambda perd l'accès à l'objet source d'une couche, la fonction est conservée`Active`. Vous pouvez mettre à jour la configuration des fonctions (sans mettre à jour les couches), mettre à jour le code des fonctions ou mettre à jour la configuration des fonctions avec de nouvelles couches. Cependant, la mise à jour de la configuration des fonctions avec la couche inaccessible échoue.

## Cross-account et utilisation interrégionale
<a name="self-managed-storage-cross-account"></a>

Vous pouvez créer des fonctions et des couches à partir du code source dans des compartiments S3 dans différents comptes et dans différentes régions. Cross-Region la récupération d'objets entraîne des coûts de transfert de données S3 supplémentaires. Consultez la tarification [ S3 ](https://aws.amazon.com/s3/pricing/) pour plus de détails.

## Considérations
<a name="self-managed-storage-considerations"></a>
+ Self-managed Le stockage de code S3 est disponible uniquement pour les fonctions et les couches d'archivage de fichiers .zip. Les fonctions d'image de conteneur continuent d'utiliser Amazon ECR.
+ La taille maximale du package de déploiement .zip (250 Mo décompressés) est inchangée.
+ Vous payez les tarifs de stockage Amazon S3 standard pour le code stocké dans vos compartiments autogérés. Lambda ne facture pas la récupération d'objets S3 dans la même région.
+ Self-managed Le stockage de code S3 est compatible avec toutes les classes de stockage S3 à l'exception des classes de stockage Glacier.
+ Vous pouvez utiliser les fonctionnalités S3 telles que la Cross-Region réplication S3 pour partager des artefacts entre les régions et les politiques de cycle de vie S3 pour gérer les objets.