Comment puis-je configurer un abonnement AWS Lambda intercomptes 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

À l'aide de la console Amazon SNS, ajoutez un abonnement AWS Lambda intercomptes à 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'appeler 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 intercomptes

Il existe deux manières d'abonner une fonction Lambda intercomptes à 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 la déclaration de politique ci-dessous et Enregistrez :
{
  "Sid": "Allow-AccountB-To-Subscribe",
  "Effect": "Allow",
  "Principal": {
    "AWS": ""
  },
  "Action": "sns:Subscribe",
  "Resource": ""
}

Remarque : pour Principal, remplacez <AccountB> avec votre numéro de compte doté de la fonction Lambda. Pour le champ Ressource, remplacez <SNSTopicARN> avec votre 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 le 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 télé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 désormais appeler votre fonction Lambda dans le compte B.

Testez la configuration

Testez 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.

Abonnez-vous à une fonction Lambda en ajoutant un abonnement depuis la console SNS (option 2)

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

Autorisez le principal du service SNS à appeler 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 Statement ID sur AllowSNSToInvokeFunction.
    Pour Source ARN, 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 ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an