Passer au contenu

Comment puis-je configurer un abonnement AWS Lambda intercompte avec une rubrique SNS ?

Lecture de 5 minute(s)
0

Je souhaite abonner ma fonction AWS Lambda à une rubrique Amazon Simple Notification Service (Amazon SNS) dans un autre compte.

Brève description

Dans la console Amazon SNS, ajoutez un abonnement AWS Lambda intercompte à une rubrique Amazon SNS.

Résolution

Prérequis

Avant de commencer, assurez-vous que :

  • la politique de ressources de la fonction Lambda permet à SNS d'invoquer la fonction.
  • la stratégie d'accès aux rubriques SNS autorise Lambda à s'abonner à la rubrique.

Remarque : la rubrique SNS se trouve dans le compte A et la fonction Lambda dans le compte B.

S'abonner à une fonction Lambda intercompte

Il existe deux manières d'abonner une fonction Lambda intercompte à une rubrique SNS :

  • Ajouter un déclencheur SNS depuis la console Lambda dans le compte B
  • Ajouter un abonnement Lambda depuis la console SNS dans le compte B (le compte avec la fonction Lambda)

Créer les ressources

Créez une rubrique SNS dans le compte A :

  1. Ouvrez la console Amazon SNS, puis sélectionnez Rubriques dans le panneau de gauche.
  2. Choisissez Créer une rubrique, sélectionnez Type de rubrique, puis saisissez le Nom de la rubrique.
  3. Faites défiler la page vers le bas et choisissez Créer une rubrique.

Autorisez le compte B à effectuer une action d'abonnement sur la rubrique.

  1. Modifiez la stratégie d'accès aux rubriques pour accorder au compte B l'autorisation sns:Subscribe.
  2. Ajoutez l’instruction de politique ci-dessous et Enregistrez :
{
  "Sid": "Allow-AccountB-To-Subscribe",
  "Effect": "Allow",
  "Principal": {
    "AWS": ""
  },
  "Action": "sns:Subscribe",
  "Resource": ""
}

Remarque : pour Principal, remplacez <AccountB> par le numéro de compte détenant la fonction Lambda. Pour le champ Ressource, remplacez <SNSTopicARN> par l’Amazon Resource Name (ARN) de la rubrique SNS.

Créez une fonction Lambda dans le compte B :

  1. Ouvrez la page Fonction sur la console AWS Lambda. Puis, sélectionnez Créer une fonction.
  2. Saisissez un Nom de fonction.
  3. Pour Rôle d'exécution, choisissez Créer un nouveau rôle avec des autorisations Lambda de base. Lambda crée un rôle d'exécution qui accorde à la fonction l'autorisation de charger des journaux sur Amazon CloudWatch.
  4. Faites défiler la page vers le bas et cliquez sur le bouton Créer une fonction.

Abonnez-vous à une fonction Lambda en ajoutant un déclencheur sur la console Lambda (option 1)

  1. Ouvrez la page Fonction sur la console AWS Lambda et sélectionnez la fonction que vous avez créée précédemment.
  2. Cliquez sur le bouton Ajouter un déclencheur.
  3. Sur la page de configuration du déclencheur, sélectionnez SNS dans la liste déroulante.
  4. Dans le champ Rubrique SNS, collez l'ARN de la rubrique.
  5. Cliquez sur le bouton Ajouter.

La rubrique SNS du compte A peut maintenant appeler votre fonction Lambda dans le compte B.

Tester la configuration

Effectuez un test en publiant un message dans la rubrique SNS.
Remarque : lorsque vous ajoutez le déclencheur depuis la console Lambda, Lambda ajoute automatiquement les autorisations nécessaires pour qu'Amazon SNS puisse invoquer votre fonction Lambda à partir de ce déclencheur.

S’abonner à une fonction Lambda en ajoutant un abonnement depuis la console SNS (option 2)

Cette option exige que vous accordiez explicitement au principal du service SNS l'autorisation d'exécuter l'action lambda:InvokeFunction.

Autorisez le principal du service SNS à invoquer la fonction Lambda.

Sur la page Fonctions de la console Lambda, sélectionnez la fonction que vous avez créée précédemment. Puis procédez comme suit :

  1. Choisissez l'onglet Configuration, puis choisissez Autorisations.
  2. Faites défiler la page vers le bas jusqu'à la section Politique basée sur les ressources. Cliquez ensuite sur le bouton Ajouter des autorisations.
  3. Sélectionnez AWS Service et choisissez SNS dans la liste déroulante. Remplissez ensuite les champs :
    Définissez ID de l’instruction sur AllowSNSToInvokeFunction.
    Pour ARN source, collez l'ARN de la rubrique SNS créée précédemment.
    Pour Action, choisissez lambda:InvokeFunction.
  4. Choisissez Enregistrer.
  5. Créez l'abonnement SNS pour Lambda.

À partir du compte B, ouvrez la console Amazon SNS.

  1. Dans le panneau de gauche, choisissez Abonnements.
  2. Cliquez sur le bouton Créer un abonnement.
  3. Collez l'ARN de la rubrique SNS depuis le compte A dans le champ ARN de la rubrique.
  4. Sélectionnez AWS Lambda dans la liste déroulante Protocole.
  5. Collez l'ARN de la fonction Lambda dans le champ Point de terminaison.
  6. Faites défiler la page vers le bas et cliquez sur le bouton Créer un abonnement.

Remarque : assurez-vous d'abonner votre fonction Lambda à la rubrique SNS depuis le compte AWS qui possède la fonction Lambda (compte B). Si vous essayez de créer l'abonnement à partir du compte qui contient la rubrique SNS (compte A), le message d'erreur suivant s'affiche :

Error code: AccessDeniedException - Error message: User: arn:aws:sts::XXXXXXX:XXXXXXX/XXXXX/XXXXXX is not authorized to perform: lambda:AddPermission on resource: arn:aws:lambda:region:XXXXXXX:function:XXXXXXX

Informations connexes

Utilisation d'AWS Lambda avec Amazon Simple Notification Service

Pourquoi un message d'erreur d'autorisation s'affiche-t-il lorsque j'essaie d'abonner ma fonction Lambda à ma rubrique Amazon SNS ?