Comment appeler ma fonction Lambda à l'aide d'un flux Kinesis entre comptes ?

Dernière mise à jour : 25/09/2020

Je souhaite appeler une fonction AWS Lambda à l'aide d'un flux Amazon Kinesis se trouvant dans un autre compte AWS.

Brève description

La fonction Lambda ne prend actuellement pas en charge les déclenchements entre comptes depuis Kinesis et les sources basées sur des flux.

Comme solution palliative, vous pouvez utiliser une fonction Lambda « interrogateur » dans le même compte que le flux Kinesis (compte A) pour appeler une fonction Lambda « processeur » dans l'autre compte (compte B).

Avertissement : cette configuration supprime un grand nombre des avantages de l'utilisation des flux de données Kinesis, tels que l'ordre séquentiel et le blocage des enregistrements au sein d'une partition. Nous vous recommandons d'utiliser cette solution uniquement si votre application n'a pas besoin de ces fonctions.

Résolution

Configurer une fonction Lambda dans le compte A

  1. Créez une fonction Lambda dans le compte A avec un rôle d'exécution.
    Remarque : créez la fonction en utilisant la console Lambda ou en créant et chargeant votre propre package de déploiement.
  2. Attribuez au rôle d'exécution dans le compte A des autorisations liées au flux Kinesis.
  3. Configurez le flux Kinesis en tant que source d'événement.
    Important : lorsque vous créez le mappage de source d'événement, veillez à ce que la fonction Lambda et le flux Kinesis se trouvent dans le même compte.

Configurer une fonction Lambda dans le compte B

  1. Créez une fonction Lambda dans le compte B avec un rôle d'exécution.
  2. Créez un rôle AWS Identity and Access Management (IAM) dans le compte B. Ce « rôle d'appel » est assuré par la fonction dans le compte A pour appeler la fonction dans le compte B.
  3. Modifiez la stratégie du rôle d'appel comme suit :
    Affectez-lui des autorisations pour appeler (à l'aide de l'action lambda:InvokeFunction) la fonction Lambda dans le même compte (le compte B).
    Modifiez la relation d'approbation pour autoriser le rôle d'exécution dans le compte A à assurer le rôle d'appel.

Pour plus d'informations, consultez Stratégies basées sur l'identité IAM pour AWS Lambda et Création d'un rôle pour déléguer des autorisations à un AWS service.

Mettre à jour les configurations

  1. Modifiez la stratégie du rôle d'exécution dans le compte A. Affectez-lui des autorisations pour appeler l'API AssumeRole (à l'aide de l'action sts:AssumeRole) afin d'endosser le rôle d'exécution dans le compte B. Pour plus d'informations, consultez Octroi à un utilisateur d'autorisations pour changer de rôle.
  2. Mettez à jour votre fonction Lambda dans le compte A afin qu'elle endosse le rôle d'appel dans le compte B. Pour obtenir plus d'informations et voir un exemple, consultez Passage à un IAM rôle (AWS de l'API). En outre, le compte A transmet l'événement d'entrée de la fonction A à la fonction du compte B en instanciant un client de service et en utilisant la méthode SDK appropriée pour demander un appel asynchrone (type d'appel Événement).
    Remarque : pour déterminer la méthode SDK pour appeler, consultez la documentation SDK pour votre environnement d'exécution.
  3. Configurez une file d'attente de lettres mortes (DLQ) pour la fonction dans le compte B. Cela vous permet d'examiner ou de relancer tous les événements manqués en cas d'erreur de fonction.