Cours > Module > Chapitre

Lab : Démarrer avec S3 Event Notifications

[Video] Démarrer avec S3 Event Notifications

Objectif

À la fin de ce lab, vous serez capable de :

  • Configurer une notification d’événement S3 vers AWS Lambda.
  • Créer et associer une fonction Lambda pour traiter les événements S3.
  • Déplacer automatiquement un objet d’un bucket source vers un bucket de destination.
  • Comprendre les notions de permissions (IAM) nécessaires pour Lambda et S3.

Pré-requis

  • Un compte AWS actif avec les droits suffisants (S3, Lambda, IAM).
  • Accès à la console AWS.
  • Connaissances de base sur Amazon S3, AWS Lambda, et IAM.

1. Création du bucket S3 source

  1. Connectez-vous à la console AWS.
  2. Allez sur le service Amazon S3.
  3. Cliquez sur “Créer un compartiment”.
  4. Saisissez un nom unique pour le bucket source (ex: prenom-s3-source-lab).
  5. Sélectionnez une région (ex: eu-west-1).
  6. Laissez les options par défaut et cliquez sur “Créer un compartiment”.

2. Création du bucket S3 destination

  1. Toujours dans S3, cliquez sur “Créer un compartiment”.
  2. Saisissez un nom unique pour le bucket destination (ex: prenom-s3-destination-lab).
  3. Sélectionnez la même région que le bucket source.

Cliquez sur “Créer un compartiment”.

3. Création de la fonction Lambda pour déplacer les objets

  1. Accédez à AWS Lambda.
  2. Cliquez sur “Create function”.
  3. Choisissez “Author from scratch”.
  4. Nom : MoveS3ObjectFunction.
  5. Runtime : Python 3.12 (ou autre version compatible).
  6. Cliquez sur “Create function”.

➡️ Code de la fonction Lambda :

				
					import boto3
import urllib.parse

s3 = boto3.client('s3')

def lambda_handler(event, context):
    print("Event received:", event)
    
    # Extraction des informations sur l'objet
    source_bucket = event['Records'][0]['s3']['bucket']['name']
    object_key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'])
    destination_bucket = 'prenom-s3-destination-lab'  # Remplacer par votre bucket destination

    try:
        # Copier l'objet dans le bucket de destination
        copy_source = {'Bucket': source_bucket, 'Key': object_key}
        s3.copy_object(Bucket=destination_bucket, Key=object_key, CopySource=copy_source)
        print(f"Object {object_key} copied to {destination_bucket}")

        # Supprimer l'objet du bucket source
        s3.delete_object(Bucket=source_bucket, Key=object_key)
        print(f"Object {object_key} deleted from {source_bucket}")

        return {'status': 'Success'}
    except Exception as e:
        print(e)
        print(f"Error processing object {object_key} from bucket {source_bucket}")
        raise e

				
			

Remplace bien prenom-s3-destination-lab par le nom exact du bucket de destination.

4. Attribution des permissions IAM à Lambda

  1. Depuis la console Lambda, accédez à Configuration > Permissions.
  2. Cliquez sur le rôle IAM associé à la fonction (ex: lambda-role-xxxx).
  3. Dans IAM, cliquez sur “Add permissions” > “Attach policies”.
  4. Recherchez et attachez la politique suivante :
    • AmazonS3FullAccess (pour simplifier lors du lab) ou une politique personnalisée restreinte comme :
				
					{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::prenom-s3-source-lab/*",
                "arn:aws:s3:::prenom-s3-destination-lab/*"
            ]
        }
    ]
}

				
			

Option recommandée : créer une politique custom pour limiter l’accès aux deux buckets.

5. Configuration de la notification d’événements S3 vers Lambda

  1. Retournez sur Amazon S3, ouvrez le bucket source (prenom-s3-source-lab).
  2. Allez dans l’onglet “Propriétés”.
  3. Descendez à la section “Notifications d’événements”.
  4. Cliquez sur “Créer une notification”.
  5. Paramétrez :
    • Nom : MoveObjectEvent.
    • Événements : All object create events (ou seulement PUT).
    • Destination : Lambda Function.
    • Choisissez la fonction MoveS3ObjectFunction.
  6. Validez.

🔑 Remarque : AWS ajoutera automatiquement les permissions nécessaires à S3 pour invoquer Lambda.

6. Test du déplacement d’objet

  1. Allez dans S3, ouvrez le bucket source.

  2. Cliquez sur “Téléverser” (Upload), et chargez un fichier (ex: test.txt).

  3. Quelques secondes après :

    • Le fichier devrait être automatiquement déplacé dans le bucket destination.
    • Il ne doit plus être présent dans le bucket source.

Vérifiez dans CloudWatch Logs (AWS Lambda > Monitoring > View logs in CloudWatch) que Lambda a bien été invoquée et a traité l’objet.

7. Nettoyage des ressources

Après avoir complété le lab et validé le bon fonctionnement, il est fortement recommandé de supprimer les ressources créées pour éviter des coûts inutiles. Voici les étapes précises :

  1. Supprimer les objets dans les buckets S3 (source et destination)

Avant de supprimer les buckets, il faut vider leur contenu :

  • Accédez au service Amazon S3.
  • Ouvrez le bucket source (prenom-s3-source-lab) :
    • Sélectionnez tous les objets (s’il en reste).
    • Cliquez sur “Actions” > “Supprimer”.
  • Répétez la même opération pour le bucket destination (prenom-s3-destination-lab).
  1. Supprimer les buckets S3
  • Dans la console S3, retournez à la liste des buckets.
  • Sélectionnez chaque bucket créé (prenom-s3-source-lab et prenom-s3-destination-lab).
  • Cliquez sur “Supprimer” (Delete).
  • Tapez le nom du bucket pour confirmer la suppression.
  1. Supprimer la fonction Lambda
  • Allez sur AWS Lambda.
  • Dans la liste des fonctions, recherchez et sélectionnez MoveS3ObjectFunction.
  • Cliquez sur “Actions” > “Supprimer” (Delete).
  • Confirmez la suppression.
  1. Supprimer le rôle IAM associé à Lambda (optionnel)
  • Allez dans le service IAM.
  • Cliquez sur “Roles”.
×

Panier