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à.
AWS Lambda è un servizio di elaborazione basato sugli eventi che consente di eseguire codice senza effettuare il provisioning o la gestione di server. Ad esempio, è possibile utilizzare le funzioni Lambda per elaborare le notifiche di eventi da un database o per caricare dati da file ogni volta che un nuovo file viene caricato su Amazon S3. Per ulteriori informazioni su Lambda, vedi Cos'è? AWS Lambda nella Guida per gli AWS Lambda sviluppatori.
Nota
Le AWS Lambda funzioni di richiamo sono supportate in Aurora PostgreSQL 11.9 e versioni successive (tra cui Aurora Serverless v2).
Di seguito sono riportati i riepiloghi dei passaggi necessari.
Per ulteriori informazioni sulle funzioni Lambda, consulta Nozioni di base su Lambda e Fondamenti di AWS Lambda nella Guida per gli sviluppatori di AWS Lambda .
Argomenti
Fase 1: configurare l'istanza DB del cluster Aurora PostgreSQL DB per PostgreSQL per le connessioni in uscita a AWS Lambda
Le funzioni Lambda vengono sempre eseguite all'interno di un Amazon VPC di proprietà del servizio. AWS Lambda Lambda applica le regole di accesso alla rete e di sicurezza a questo VPC e mantiene e monitora il VPC automaticamente. Il cluster database Aurora PostgreSQL deve inviare traffico di rete al VPC del servizio Lambda. La modalità di configurazione dipende dal fatto che l'istanza database principale del cluster database Aurora sia pubblica o privata.
Cluster database pubblico Aurora PostgreSQL RDS per PostgreSQL: l'istanza DB è pubblica se si trova in una sottorete pubblica sul VPC e se la proprietà "" dell' è. PubliclyAccessible
true
Per trovare il valore di questa proprietà, puoi usare il comando. describe-db-instances AWS CLI In alternativa, puoi utilizzare la AWS Management Console per aprire la scheda Connectivity & security (Connettività e sicurezza) e controllare che l’opzione Publicly accessible (Accessibile pubblicamente) sia impostata su Yes (Sì). Per verificare se l'istanza si trova nella sottorete pubblica del VPC, puoi utilizzare la AWS Management Console o la AWS CLI.Per configurare l'accesso a Lambda, usi AWS Management Console o AWS CLI per creare una regola in uscita sul gruppo di sicurezza del tuo VPC. La regola in uscita specifica che TCP può utilizzare la porta 443 per inviare pacchetti a qualsiasi indirizzo (0.0.0.0/0). IPv4
Istanza privata del cluster Aurora PostgreSQL DB RDS per PostgreSQL si trova in una sottorete privata. PubliclyAccessible
false
Per consentire all'istanza di funzionare con Lambda, è possibile utilizzare un gateway Network Address Translation (NAT). Per ulteriori informazioni, consulta Gateway NAT. In alternativa, puoi configurare il VPC con un endpoint VPC per Lamda. Per ulteriori informazioni, consultare Endpoint VPC nella Guida per l'utente di Amazon VPC. L'endpoint risponde alle chiamate effettuate dal cluster database Aurora PostgreSQL alle funzioni Lambda.
Il tuo VPC può ora interagire con il AWS Lambda VPC a livello di rete. Configura quindi le autorizzazioni utilizzando IAM.
AWS Lambda
Il richiamo di funzioni Lambda dal cluster database Aurora PostgreSQL richiede determinati privilegi. Per configurare i privilegi necessari, si consiglia di creare una policy IAM che consenta di richiamare le funzioni Lambda, assegnare tale policy a un ruolo e quindi applicare il ruolo al cluster database. Questo approccio fornisce al cluster database privilegi per richiamare la funzione Lambda specificata per tuo conto. La procedura seguente mostra come eseguire questa operazione in AWS CLI.
Configurare le autorizzazioni IAM per l'utilizzo del cluster con Lambda
Usa il AWS CLI comando create-policy
per creare una policy IAM che consenta all'istanza database Aurora PostgreSQL DB del cluster RDS per di richiamare la funzione Lambda specificata. (L'ID dichiarazione (Sid) è una descrizione facoltativa per la dichiarazione di policy e non ha alcun effetto sull'utilizzo). Questa policy fornisce al cluster database Aurora le autorizzazioni minime necessarie per richiamare la funzione Lambda specificata. aws iam create-policy --policy-name
rds-lambda-policy
--policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToExampleFunction", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:
" } ] }'aws-region
:444455556666:function:my-functionIn alternativa, puoi utilizzare la policy
AWSLambdaRole
predefinita che ti consente di richiamare una qualsiasi delle tue funzioni Lambda. Per ulteriori informazioni, consulta Policy IAM basate sull'identità per LambdaUtilizza il comando create-role per creare un ruolo IAM che la policy può assumere in fase di esecuzione
AWS CLI . aws iam create-role --role-name
rds-lambda-role
--assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'Applica la policy al ruolo utilizzando il attach-role-policy
AWS CLI comando. aws iam attach-role-policy \ --policy-arn arn:aws:iam::
444455556666
:policy/rds-lambda-policy
\ --role-namerds-lambda-role
--regionaws-region
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/add-role-to-db-cluster.html
AWS CLI Quest'ultimo passaggio consente agli utenti del cluster database di richiamare le funzioni Lambda. aws rds add-role-to-db-cluster \ --db-cluster-identifier
my-cluster-name
\ --feature-name Lambda \ --role-arn arn:aws:iam::444455556666:role/rds-lambda-role
\ --regionaws-region
Con le configurazioni di VPC e IAM completate, puoi ora installare l'estensione aws_lambda
. (Puoi installare l'estensione in qualsiasi momento, ma fino a quando non configuri il supporto VPC e i privilegi IAM corretti, l'estensione aws_lambda
non aggiunge nulla alle funzionalità del cluster database Aurora PostgreSQL).
Fase 3: installazione dell'estensione aws_lambda
per un cluster database Aurora PostgreSQL
Questa estensione fornisce al cluster database Aurora PostgreSQL la possibilità di chiamare le funzioni Lambda da PostgreSQL.
Installare l'estensione aws_lambda
nel cluster database Aurora PostgreSQL
Utilizza la riga di comando PostgreSQL psql
o lo strumento pgAdmin per connetterti al cluster database Aurora PostgreSQL.
Connettiti al cluster database Aurora PostgreSQL come utente con privilegi
rds_superuser
. L'utentepostgres
predefinito viene visualizzato nell'esempio.psql -h
cluster-instance.444455556666.
.rds.amazonaws.com -U postgres -p 5432aws-region
-
Installa l'estensione
aws_lambda
. Anche l'estensioneaws_commons
è obbligatoria. Fornisce funzioni di supporto adaws_lambda
e molte altre estensioni Aurora per PostgreSQL. Se non si trova già nel tuo cluster database Aurora PostgreSQL , viene installata conaws_lambda
come mostrato di seguito.CREATE EXTENSION IF NOT EXISTS aws_lambda CASCADE;
NOTICE: installing required extension "aws_commons" CREATE EXTENSION
L'estensione aws_lambda
è installata nell'istanza database principale del cluster database Aurora PostgreSQL. Ora puoi creare strutture utili per richiamare le tue funzioni Lambda.
Fase 4: utilizzo delle funzioni di supporto Lambda con il cluster database Aurora PostgreSQL (facoltativo)
Puoi utilizzare le funzioni di supporto nell'estensione aws_commons
per preparare entità che è possibile richiamare più facilmente da PostgreSQL. Per farlo, devi disporre delle seguenti informazioni sulle funzioni Lambda:
-
Nome funzione: il nome, l'Amazon Resource Name (ARN), la versione o l'alias della funzione Lambda. La policy IAM creata in Fase 2: configurazione di IAM per il cluster e Lambda richiede l'ARN, quindi ti consigliamo di utilizzare l'ARN della tua funzione.
-
AWS Regione
Per mantenere le informazioni sul nome della funzione Lambda, puoi utilizzare la funzione aws_commons.create_lambda_function_arn. Questa funzione di supporto crea una struttura composita aws_commons._lambda_function_arn_1
con i dettagli necessari alla funzione di richiamo. Di seguito, puoi trovare tre approcci alternativi per l'impostazione di questa struttura composita.
SELECT aws_commons.create_lambda_function_arn(
'my-function',
'aws-region
'
) AS aws_lambda_arn_1 \gset
SELECT aws_commons.create_lambda_function_arn(
'111122223333:function:my-function',
'aws-region
'
) AS lambda_partial_arn_1 \gset
SELECT aws_commons.create_lambda_function_arn(
'arn:aws:lambda:aws-region
:111122223333:function:my-function'
) AS lambda_arn_1 \gset
Ognuno di questi valori può essere utilizzato nelle chiamate alla funzione aws_lambda.invoke. Per alcuni esempi, consulta Fase 5: richiamo di una funzione Lambda dal cluster database Aurora PostgreSQL.
Fase 5: richiamo di una funzione Lambda dal cluster database Aurora PostgreSQL
La funzione aws_lambda.invoke
si comporta in modo sincrono o asincrono, a seconda del invocation_type
. Le due alternative per questo parametro sono RequestResponse
(il valore predefinito) e Event
, come di seguito riportato.
-
RequestResponse
: questo tipo di richiamo è sincrono. Questo è il comportamento predefinito quando viene effettuata la chiamata senza specificare un tipo di chiamata. Il payload di risposta include i risultati della funzioneaws_lambda.invoke
. Utilizza questo tipo di chiamata quando il flusso di lavoro richiede la ricezione dei risultati della funzione Lambda prima di procedere. -
Event
: questo tipo di richiamo è asincrono. La risposta non include un payload contenente i risultati. Utilizza questo tipo di richiamo quando il flusso di lavoro non ha bisogno di un risultato della funzione Lambda per continuare l'elaborazione.
Come semplice test della configurazione, puoi connetterti all'istanza database utilizzando psql
e richiamare una funzione di esempio dalla riga di comando. Supponiamo di avere una delle funzioni di base impostate sul tuo servizio Lambda, come la semplice funzione Python mostrata nello screenshot di seguito.

Per richiamare una funzione di esempio
Connettiti all'istanza database principale utilizzando
psql
o pgAdmin.psql -h
cluster.444455556666.
.rds.amazonaws.com -U postgres -p 5432aws-region
Richiama la funzione utilizzando il relativo ARN.
SELECT * from aws_lambda.invoke(aws_commons.create_lambda_function_arn('arn:aws:lambda:
aws-region
:444455556666:function:simple', 'us-west-1'), '{"body": "Hello from Postgres!"}'::json );La risposta è la seguente.
status_code | payload | executed_version | log_result -------------+-------------------------------------------------------+------------------+------------ 200 | {"statusCode": 200, "body": "\"Hello from Lambda!\""} | $LATEST | (1 row)
Se il tuo tentativo di richiamo non ha esito positivo, vedi Messaggi di errore della funzione Lambda .
Fase 6: concessione delle autorizzazioni ad altri utenti per richiamare le funzioni Lambda
A questo punto della procedura, solo tu in qualità di rds_superuser
puoi richiamare le funzioni Lambda. Per consentire ad altri utenti di richiamare le funzioni che crei, è necessario concedere loro l'autorizzazione.
Per concedere ad altri utenti l'autorizzazione per richiamare le funzioni Lambda
Connettiti all'istanza database principale utilizzando
psql
o pgAdmin.psql -h
cluster.444455556666.
.rds.amazonaws.com -U postgres -p 5432aws-region
Esegui i seguenti comandi SQL:
postgres=>
GRANT USAGE ON SCHEMA aws_lambda TOdb_username
; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA aws_lambda TOdb_username
;