Come posso configurare la sottoscrizione di un topic SNS in un altro account per una funzione AWS Lambda?
Desidero sottoscrivere un topic Amazon Simple Notification Service (Amazon SNS) in un altro account per la mia funzione AWS Lambda.
Breve descrizione
Utilizzando la console Amazon SNS, aggiungi la sottoscrizione di un topic Amazon SNS in un altro account per AWS Lambda.
Risoluzione
Prerequisito
Prima di iniziare, assicurati che:
- la policy delle risorse della funzione Lambda consenta a SNS di invocare la funzione;
- la policy di accesso al topic SNS consenta a Lambda di sottoscrivere il topic.
Nota: il topic SNS risiede nell'account A e la funzione Lambda risiede nell'account B.
Esegui la sottoscrizione in un altro account per la funzione Lambda
Esistono due modi possibili per sottoscrivere un topic SNS in un altro account per una funzione Lambda:
- Aggiungi un trigger SNS dalla console Lambda nell'account B
- Aggiungi la sottoscrizione per Lambda dalla console SNS nell'account B (l'account con la funzione Lambda)
Crea le risorse
Crea un topic SNS nell'account A:
- Apri la console Amazon SNS, quindi seleziona Argomenti nel pannello di sinistra.
- Scegli Crea argomento, seleziona Tipo di argomento, quindi inserisci il nome dell'argomento.
- Scorri verso il basso e scegli Crea argomento.
Consenti all'account B di eseguire l'operazione di sottoscrizione sul topic.
- Modifica la policy di accesso al topic per concedere all'account B l'autorizzazione sns:Subscribe.
- Aggiungi l’istruzione di policy riportata di seguito e scegli Salva:
{ "Sid": "Allow-AccountB-To-Subscribe", "Effect": "Allow", "Principal": { "AWS": "" }, "Action": "sns:Subscribe", "Resource": "" }
Nota: per Principal, sostituisci <AccountB> con il tuo numero di account che ha la funzione Lambda. Per il campo Resource, sostituisci <SNSTopicARN> con il nome della risorsa Amazon (ARN) del tuo topic SNS.
Crea una funzione Lambda nell'account B:
- Apri la pagina Funzione nella console AWS Lambda. Quindi scegli Crea funzione.
- Inserisci il nome della funzione.
- Per Ruolo di esecuzione, scegli Create a new role with basic Lambda permissions (Crea un nuovo ruolo con autorizzazioni Lambda di base). Lambda crea un ruolo di esecuzione che concede alla funzione l'autorizzazione per caricare log in Amazon CloudWatch.
- Scorri verso il basso e scegli il pulsante Crea funzione.
Esegui la sottoscrizione per una funzione Lambda aggiungendo un trigger dalla console Lambda (opzione 1)
- Apri la pagina Funzione nella console AWS Lambda e seleziona la funzione che hai creato in precedenza.
- Scegli il pulsante Aggiungi trigger.
- Nella pagina di configurazione del trigger, seleziona SNS dall'elenco a discesa.
- Nel campo Argomento SNS, incolla l'ARN del topic.
- Seleziona il pulsante Aggiungi.
Il topic SNS nell'account A ora può invocare la funzione Lambda nell'account B.
Esegui un test della configurazione
Esegui il test pubblicando un messaggio sul topic SNS.
Nota: quando aggiungi il trigger dalla console Lambda, Lambda aggiunge automaticamente le autorizzazioni necessarie affinché Amazon SNS possa invocare la funzione Lambda dal trigger.
Esegui la sottoscrizione per una funzione Lambda aggiungendo una sottoscrizione dalla console SNS (opzione 2)
Per questa opzione devi concedere esplicitamente l'autorizzazione al principale del servizio SNS per eseguire l'operazione lambda:InvokeFunction.
Consenti al principale del servizio SNS di invocare la funzione Lambda.
Nella pagina Funzioni della console Lambda, seleziona la funzione che hai creato in precedenza. Quindi completa i seguenti passaggi:
- Scegli la scheda Configurazione, quindi seleziona Autorizzazioni.
- Scorri verso il basso fino alla sezione Policy basata sulle risorse. Quindi scegli il pulsante Aggiungi autorizzazioni.
- Seleziona Servizio AWS e scegli SNS dall'elenco a discesa. Quindi compila i campi:
Imposta ID istruzione su AllowSNSToInvokeFunction
In ARN origine, incolla l'ARN del topic SNS creato in precedenza
Per Operazione, scegli lambda:InvokeFunction - Scegli Salva.
- Crea la sottoscrizione in SNS per Lambda.
Dall'account B, apri la console Amazon SNS.
- Nel pannello di sinistra, scegli Sottoscrizioni.
- Scegli il pulsante Crea sottoscrizione.
- Incolla l'ARN del topic SNS dall'account A nel campo ARN argomento.
- Seleziona AWS Lambda dall'elenco a discesa Protocollo.
- Incolla l'ARN della funzione Lambda nel campo Endpoint
- Scorri verso il basso e scegli il pulsante Crea sottoscrizione.
Nota: assicurati di sottoscrivere con la funzione Lambda il topic SNS dall'account AWS che ha la funzione Lambda (account B). Se provi a creare la sottoscrizione dall'account con il topic SNS (account A), ricevi il seguente errore:
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
Informazioni correlate
Tutorial: utilizzo di AWS Lambda con Amazon Simple Notification Service
Why do I get an authorization error when I try to subscribe my Lambda function to my Amazon SNS topic? (Perché ricevo un errore di autorizzazione quando tento di sottoscrivere il mio topic Amazon SNS con la mia funzione Lambda?)
- Argomenti
- Application Integration
- Lingua
- Italiano
Video correlati

