Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Tutorial: utilizzo AWS Lambda con Amazon Simple Notification Service
In questo tutorial, utilizzi una funzione di eventi Lambda in un'unica funzione Account AWS per abbonarti a un argomento di Amazon Simple Notification Service (Amazon SNS) in un altro argomento. Account AWS Quando pubblichi messaggi sul tuo argomento Amazon SNS, la funzione eventi Lambda legge il contenuto del messaggio e lo invia in Amazon Logs. CloudWatch Per completare questo tutorial, usa il (). AWS Command Line Interface AWS CLI
Per completare questo tutorial, esegui i passaggi riportati:
-
Nell'account A, crea un argomento Amazon SNS.
-
Nell'account B, crea una funzione evento Lambda che legga i messaggi dall'argomento.
-
Nell'account B, crea una sottoscrizione all'argomento.
-
Pubblica messaggi sull'argomento Amazon SNS nell'account A e conferma che la Lambda Event Function nell'account B li invii nei log. CloudWatch
Completando questi passaggi, imparerai come configurare un argomento di Amazon SNS per richiamare una funzione evento Lambda. Scopri anche come creare una policy AWS Identity and Access Management (IAM) che autorizzi una risorsa in un'altra Account AWS a richiamare Lambda.
Nel tutorial, vengono utilizzati due Account AWS separati. I AWS CLI comandi lo illustrano utilizzando due profili denominati chiamati accountA eaccountB, ciascuno configurato per l'uso con un altro. Account AWS Per informazioni su come configurare l'utilizzo AWS CLI di profili diversi, consulta Impostazioni dei file di configurazione e credenziali nella Guida per l'AWS Command Line Interface utente della versione 2. Assicurati di configurare lo stesso valore predefinito Regione AWS per entrambi i profili.
Se i AWS CLI profili creati per i due Account AWS utilizzano nomi diversi o se utilizzi il profilo predefinito e un profilo denominato, modifica i AWS CLI comandi nei passaggi seguenti in base alle esigenze.
Prerequisiti
Se non l'hai ancora installato AWS Command Line Interface, segui i passaggi indicati in Installazione o aggiornamento della versione più recente di AWS CLI per installarlo.
Per eseguire i comandi nel tutorial, sono necessari un terminale a riga di comando o una shell (interprete di comandi). In Linux e macOS, utilizza la shell (interprete di comandi) e il gestore pacchetti preferiti.
Nota
Su Windows, alcuni comandi della CLI Bash utilizzati comunemente con Lambda (ad esempio, zip) non sono supportati dai terminali integrati del sistema operativo. Per ottenere una Windows-integrated versione di Ubuntu e Bash, installa il sottosistema Windows per Linux
Creare un argomento Amazon SNS (account A)
Per creare l'argomento
-
Nell'account A, crea un argomento standard di Amazon SNS utilizzando il seguente AWS CLI comando.
aws sns create-topic --name sns-topic-for-lambda --profile accountAVerrà visualizzato un output simile al seguente.
{ "TopicArn": "arn:aws:sns:us-west-2:123456789012:sns-topic-for-lambda" }Prendi nota del nome della risorsa Amazon (ARN) dell'argomento. Ne avrai bisogno più avanti nel tutorial quando aggiungerai le autorizzazioni alla tua funzione evento Lambda per iscriverti all'argomento.
Creazione di un ruolo di esecuzione della funzione (account B)
Un ruolo di esecuzione è un ruolo IAM che concede un'autorizzazione Lambda Event Function all' Servizi AWS accesso e alle risorse. Prima di creare la funzione nell'account B, crei un ruolo che fornisce alla funzione le autorizzazioni di base per scrivere i log nei log. CloudWatch Aggiungeremo le autorizzazioni per la lettura dal tuo argomento Amazon SNS in un passaggio successivo.
Creazione di un ruolo di esecuzione
-
Nell'account B apri la pagina dei ruoli
nella console IAM. -
Scegliere Crea ruolo.
-
Per Tipo di entità attendibile, scegli Servizio AWS .
-
In Caso d'uso, scegli Lambda.
-
Scegli Avanti.
-
Aggiungi una policy di autorizzazioni di base al ruolo completando le seguenti operazioni:
-
Nella casella di ricerca Policy di autorizzazione, inserisci
AWSLambdaBasicExecutionRole. -
Scegli Avanti.
-
-
Completa la creazione del ruolo effettuando le seguenti operazioni:
-
In Dettagli ruolo, immetti
lambda-sns-roleper Nome ruolo. -
Scegliere Crea ruolo.
-
Creare una funzione evento Lambda (account B)
Crea una funzione di eventi Lambda che elabori i tuoi messaggi Amazon SNS. Il codice funzione registra il contenuto dei messaggi di ogni record in Amazon CloudWatch Logs.
Questo tutorial utilizza il runtime Node.js 24, ma abbiamo anche fornito codice di esempio in altri linguaggi di runtime. Per visualizzare il codice per il runtime che ti interessa, seleziona la scheda corrispondente nella casella seguente. Il JavaScript codice che utilizzerai in questo passaggio è nel primo esempio mostrato nella JavaScriptscheda.
Per creare la funzione Event
-
Crea una directory per il progetto, quindi passa a quella directory.
mkdir sns-tutorial cd sns-tutorial -
Copia il JavaScript codice di esempio in un nuovo file denominato
index.js. -
Crea un pacchetto di implementazione utilizzando il seguente comando
zip.zip function.zip index.js -
Esegui il AWS CLI comando seguente per creare la tua funzione evento Lambda nell'account B.
aws lambda create-function --function-name Function-With-SNS \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs24.x \ --role arn:aws:iam::<AccountB_ID>:role/lambda-sns-role \ --timeout 60 --profile accountBVerrà visualizzato un output simile al seguente.
{ "FunctionName": "Function-With-SNS", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:Function-With-SNS", "Runtime": "nodejs24.x", "Role": "arn:aws:iam::123456789012:role/lambda_basic_role", "Handler": "index.handler", ... "RuntimeVersionConfig": { "RuntimeVersionArn": "arn:aws:lambda:us-west-2::runtime:7d5f06b69c951da8a48b926ce280a9daf2e8bb1a74fc4a2672580c787d608206" } } -
Registra il nome della risorsa Amazon (ARN) della funzione. Ti servirà più avanti nel tutorial quando aggiungerai le autorizzazioni per consentire ad Amazon SNS di richiamare la tua funzione.
Aggiungi le autorizzazioni a Event Function (account B)
Perché Amazon SNS richiami la tua funzione, è necessario concedergli l'autorizzazione in una istruzione su una policy basata sulle risorse. Si aggiunge questa dichiarazione utilizzando il AWS CLI add-permission comando.
Per concedere ad Amazon SNS l'autorizzazione a richiamare la tua Event Function
-
Nell'account B, esegui il AWS CLI comando seguente utilizzando l'ARN per l'argomento Amazon SNS che hai registrato in precedenza.
aws lambda add-permission --function-name Function-With-SNS \ --source-arn arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda \ --statement-id function-with-sns --action "lambda:InvokeFunction" \ --principal sns.amazonaws.com --profile accountBVerrà visualizzato un output simile al seguente.
{ "Statement": "{\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\": \"arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda\"}}, \"Action\":[\"lambda:InvokeFunction\"], \"Resource\":\"arn:aws:lambda:us-east-1:<AccountB_ID>:function:Function-With-SNS\", \"Effect\":\"Allow\",\"Principal\":{\"Service\":\"sns.amazonaws.com\"}, \"Sid\":\"function-with-sns\"}" }
Nota
Se l'account con l'argomento Amazon SNS è ospitato in un opt-in Regione AWS, devi specificare la regione nell'area principale. Ad esempio, se stai lavorando con un argomento Amazon SNS nella regione Asia Pacifico (Hong Kong), per il principale devi specificare sns.ap-east-1.amazonaws.com invece di sns.amazonaws.com.
Concessione dell'autorizzazione tra più account per la sottoscrizione ad Amazon SNS (account A)
Affinché la tua Lambda Event Function nell'account B possa sottoscrivere l'argomento Amazon SNS che hai creato nell'account A, devi concedere l'autorizzazione all'account B per iscriversi al tuo argomento. Concedi questa autorizzazione utilizzando il AWS CLI add-permission comando.
Concessione dell'autorizzazione per consentire all'account B la sottoscrizione all'argomento
-
Nell'account A, esegui il seguente AWS CLI comando. Usa l'ARN per l'argomento Amazon SNS registrato in precedenza.
aws sns add-permission --label lambda-access --aws-account-id<AccountB_ID>\ --topic-arn arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda \ --action-name Subscribe ListSubscriptionsByTopic --profile accountA
Creare una sottoscrizione (account B)
Nell'account B, ora sottoscrivi la tua Lambda Event Function all'argomento Amazon SNS che hai creato all'inizio del tutorial nell'account A. Quando viene inviato un messaggio a questo argomento (sns-topic-for-lambda), Amazon SNS richiama la tua Lambda Event Function nell'account B. Function-With-SNS
Creazione di una sottoscrizione
-
Nell'account B, esegui il seguente comando. AWS CLI Usa la regione predefinita in cui hai creato l'argomento e gli ARN per l'argomento e la funzione evento Lambda.
aws sns subscribe --protocol lambda \ --regionus-east-1\ --topic-arn arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda \ --notification-endpoint arn:aws:lambda:us-east-1:<AccountB_ID>:function:Function-With-SNS \ --profile accountBVerrà visualizzato un output simile al seguente.
{ "SubscriptionArn": "arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda:5d906xxxx-7c8x-45dx-a9dx-0484e31c98xx" }
Pubblicazione di messaggi sull'argomento (account A e account B)
Ora che la tua Lambda Event Function nell'account B è iscritta al tuo argomento Amazon SNS nell'account A, è il momento di testare la configurazione pubblicando messaggi sul tuo argomento. Per confermare che Amazon SNS ha richiamato la tua funzione Lambda Event, usi CloudWatch Logs per visualizzare l'output della funzione.
Per pubblicare un messaggio sul tuo argomento e visualizzare l'output della tua Event Function
-
Digita
Hello Worldin un file di testo e salvalo comemessage.txt. -
Dalla stessa directory in cui hai salvato il file di testo, esegui il seguente AWS CLI comando nell'account A. Usa l'ARN per il tuo argomento.
aws sns publish --message file://message.txt --subject Test \ --topic-arn arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda \ --profile accountAQuesto restituisce un ID messaggio con un identificatore univoco, che indica che Amazon SNS ha accettato il messaggio. Amazon SNS tenta quindi di recapitare il messaggio agli abbonati dell'argomento. Per confermare che Amazon SNS ha richiamato la tua funzione di evento Lambda, usa CloudWatch Logs per visualizzare l'output della funzione:
-
Nell'account B, apri la pagina dei gruppi di log
della CloudWatch console Amazon. -
Scegli il nome del gruppo di log per la funzione (
/aws/lambda/Function-With-SNS). -
Scegli il flusso di log più recente.
-
Se la tua funzione è stata richiamata correttamente, vedrai un output simile al seguente che mostra il contenuto del messaggio che hai pubblicato sul tuo argomento.
2023-07-31T21:42:51.250Z c1cba6b8-ade9-4380-aa32-d1a225da0e48 INFO Processed message Hello World 2023-07-31T21:42:51.250Z c1cba6b8-ade9-4380-aa32-d1a225da0e48 INFO done
Pulizia delle risorse
Ora è possibile eliminare le risorse create per questo tutorial, a meno che non si voglia conservarle. Eliminando AWS le risorse che non utilizzi più, eviti addebiti inutili a tuo carico. Account AWS
Nell'Account A, elimina l'argomento Amazon SNS.
Per eliminare l'argomento Amazon SNS
-
Aprire la pagina Topics (Argomenti)
nella console Amazon SNS. -
Selezionare l'argomento creato.
-
Scegliere Elimina.
-
Inserisci
delete menel campo di immissione del testo. -
Scegliere Elimina.
Nell'Account B, ripulisci il ruolo di esecuzione, la funzione Lambda Event e l'abbonamento Amazon SNS.
Come eliminare il ruolo di esecuzione
-
Aprire la pagina Ruoli
della console IAM. -
Selezionare il ruolo di esecuzione creato.
-
Scegliere Elimina.
-
Inserisci il nome del ruolo nel campo di immissione testo e seleziona Elimina.
Per eliminare la funzione evento Lambda
-
Apri la pagina Event Functions
della console Lambda. -
Seleziona la funzione di evento che hai creato.
-
Scegliere Operazioni, Elimina.
-
Digita
confirmnel campo di immissione testo e scegli Delete (Elimina).
Per eliminare la sottoscrizione Amazon SNS
-
Aprire la pagina Subscriptions (Sottoscrizioni)
nella console Amazon SNS. -
Selezionare la sottoscrizione creata.
-
Scegli Delete (Elimina), poi Delete (Elimina).