Comment puis-je configurer une notification d'événement Amazon S3 pour invoquer une fonction Lambda qui se trouve dans un autre compte AWS ?

Lecture de 5 minute(s)
0

Je souhaite que mon compartiment Amazon Simple Storage Service (Amazon S3) invoque une fonction AWS Lambda dans un autre compte AWS.

Résolution

Pour configurer votre compartiment Amazon S3 de manière qu'il invoque une fonction Lambda dans un autre compte AWS, procédez comme suit :

  1. Mettez à jour la stratégie d'autorisations basée sur les ressources de votre fonction Lambda pour accorder l'autorisation d'invocation à Amazon S3.
  2. Créez une notification d'événement Amazon S3 qui invoque votre fonction Lambda.

Important : La fonction Lambda doit se trouver dans la même région AWS que votre compartiment S3.

Pour plus d'informations sur la migration de fonctions, consultez la section Comment migrer une fonction Lambda vers un autre compte AWS ou une autre région à l'aide de la console Lambda ?

Mettre à jour la stratégie d'autorisations basée sur les ressources de votre fonction Lambda pour accorder l'autorisation d'invocation à Amazon S3

Console de gestion AWS

Pour mettre à jour la stratégie d'autorisations basée sur les ressources de votre fonction Lambda afin d'accorder l'autorisation d'invocation à Amazon S3, procédez comme suit :

  1. Ouvrez la page Fonctions de la console Lambda avec le compte AWS dans lequel se trouve votre fonction Lambda.
  2. Choisissez le nom de la fonction Lambda que vous souhaitez voir invoquer par Amazon S3.
  3. Dans l'onglet Configuration, sélectionnez Autorisations.
  4.  Dans la section Stratégie basée sur les ressources, sélectionnez Ajouter des autorisations.
  5. Dans le volet Document de stratégie, sélectionnez Service AWS. La liste déroulante Service s'affiche.
  6. Dans la liste déroulante Service, sélectionnez S3 pour afficher d'autres champs.
  7. Pour ID d’instruction, saisissez un ID d’instruction unique pour différencier l’instruction que vous créez dans le cadre de la stratégie.
  8. Dans le champ Compte source, saisissez l’ID de compte AWS du compte qui héberge votre compartiment S3.
  9. Pour ARN source, saisissez l'ARN de votre compartiment S3. Utilisez le format suivant :
    arn:aws:s3:::bucket_name
    Remarque : Remplacez bucket_name par le nom de votre compartiment S3.
  10. Dans Action, sélectionnez Lambda:InvokeFunction dans la liste déroulante.
  11. Sélectionnez Enregistrer.

Pour plus d'informations, consultez la section Utilisation de stratégies basées sur les ressources dans Lambda.

AWS CLI

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre les erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Mettez à jour la stratégie d'autorisations basée sur les ressources de votre fonction Lambda pour accorder l'autorisation d'invocation à Amazon S3 avec l'API add-permission similaire à l’API suivante :

aws lambda add-permission \--function-name LambdaFunction_name \
--action lambda:InvokeFunction \
--principal s3.amazonaws.com \
--source-arn arn:aws:s3:::bucket_name \
--source-account account-id \
--statement-id "unique_statement_ID"

Remarque : Remplacez LambdaFunction_name, bucket_name et unique_statement_ID par vos variables.

Créer une notification d'événement Amazon S3 qui invoque votre fonction Lambda

Console de gestion AWS

Suivez les instructions pour activer et configurer les notifications d'événements à l'aide de la console Amazon S3.

AWS CLI

Pour créer une notification d'événement Amazon S3 qui invoque votre fonction Lambda, utilisez la commande put-bucket-notification-configuration.

Important : Avant d'utiliser la commande put-bucket-notification, vérifiez qu'aucune autre notification d'événement n'est configurée sur votre compartiment S3. La commande put-bucket-notification-configuration effectue une opération de remplacement sur toute configuration de notification existante au lieu d'un ajout.

Pour vérifier si votre compartiment contient déjà des notifications d'événements, exécutez la commande suivante :

aws s3api get-bucket-notification-configuration --bucket bucket_name

Si la commande précédente renvoie un objet JSON vide ou aucune réponse, cela signifie que vous n'avez aucune configuration de notification d'événement existante. Créez et enregistrez un nouveau fichier appelé notification.json avec la configuration suivante :

{
"LambdaFunctionConfigurations": [
    {
      "Id": "my-lambda-function-s3-event-configuration",
      "LambdaFunctionArn": "LambdaFunction_ARN",
      "Events": [ "s3:ObjectCreated:" ],
      "Filter": {
        "Key": {
          "FilterRules": [
            {
              "Name": "prefix"|"suffix",
              "Value": "string"
            }
          ]
        }
      }
    }
  ]
}

Remarque : Remplacez LambdaFunction_ARN par l'ARN de votre fonction Lambda. Remplacez le préfixe et le suffixe par vos variables pour la règle de filtrage.

Si la configuration get-bucket-notification-configuration renvoie une configuration JSON de notification d'événement existante, enregistrez la configuration JSON existante dans un fichier appelé notification.json. Ajoutez votre nouvelle configuration de notification Lambda à une clé LambdaFunctionConfigurations existante ou créez une nouvelle clé à la syntaxe JSON illustrée dans l'exemple suivant. Ajoutez la clé au fichier notification.json :

{
... # Non Lambda event configurations like SNS, SQS etc. ,
"LambdaFunctionConfigurations": [
    {
      "Id": "my-lambda-function-s3-event-configuration",
      "LambdaFunctionArn": "LambdaFunction_ARN",
      "Events": [ "s3:ObjectCreated:" ],
      "Filter": {
        "Key": {
          "FilterRules": [
            {
              "Name": "prefix"|"suffix",
              "Value": "string"
            }
          ]
        }
      }
    },
    {...}, #Other pre-existing Lambda Function configurations
  ]
}

Après avoir créé le fichier notification.json, exécutez la commande suivante pour mettre à jour la configuration de votre notification d'événement S3 :

aws s3api put-bucket-notification-configuration \
--bucket bucket_name \
--notification-configuration file://notification.json

Remarque : Remplacez bucket_name par le nom de votre compartiment S3.

Tester la fonction Lambda

Pour tester la fonction Lambda à l'aide de la console Lambda, consultez la section Tester votre fonction Lambda avec un événement fictif. Si votre fonction n'est pas invoquée par la notification d'événement, consultez la section Pourquoi ma notification d'événement Amazon S3 n'invoque-t-elle pas ma fonction Lambda ?

Informations connexes

Comment puis-je autoriser ma fonction Lambda à accéder à mon compartiment Amazon S3 ?

Pourquoi l'erreur « Unable to validate the following destination configurations » s'affiche-t-elle lorsque je crée une notification d'événements Amazon S3 ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 8 mois