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 :
- Ouvrez la console Amazon SNS, puis sélectionnez Rubriques dans le panneau de gauche.
- Choisissez Créer une rubrique, sélectionnez Type de rubrique, puis saisissez le Nom de la rubrique.
- 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.
- Modifiez la stratégie d'accès aux rubriques pour accorder au compte B l'autorisation sns:Subscribe.
- 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 :
- Ouvrez la page Fonction sur la console AWS Lambda. Puis, sélectionnez Créer une fonction.
- Saisissez un Nom de fonction.
- 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.
- 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)
- Ouvrez la page Fonction sur la console AWS Lambda et sélectionnez la fonction que vous avez créée précédemment.
- Cliquez sur le bouton Ajouter un déclencheur.
- Sur la page de configuration du déclencheur, sélectionnez SNS dans la liste déroulante.
- Dans le champ Rubrique SNS, collez l'ARN de la rubrique.
- 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 :
- Choisissez l'onglet Configuration, puis choisissez Autorisations.
- 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.
- 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.
- Choisissez Enregistrer.
- Créez l'abonnement SNS pour Lambda.
À partir du compte B, ouvrez la console Amazon SNS.
- Dans le panneau de gauche, choisissez Abonnements.
- Cliquez sur le bouton Créer un abonnement.
- Collez l'ARN de la rubrique SNS depuis le compte A dans le champ ARN de la rubrique.
- Sélectionnez AWS Lambda dans la liste déroulante Protocole.
- Collez l'ARN de la fonction Lambda dans le champ Point de terminaison.
- 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 ?