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à.
Invocare un AWS Lambdafunzione da un SQL
AWS Lambda è un servizio di elaborazione basato sugli eventi che consente di eseguire codice senza fornire o gestire server. È disponibile per l'uso con molti AWS servizi, tra cui . SQL 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, consulta Cos'è AWS Lambda? nel AWS Lambda Guida per gli sviluppatori.
Nota
Invocando un AWS Lambda La funzione è supportata nelle seguenti versioni RDS di SQL Postgre:
Tutte le versioni di SQL Postgre 16
Tutte le versioni di SQL Postgre 15
Postgre SQL 14.1 e versioni secondarie successive
-
Postgre 13.2 e SQL versioni secondarie successive
-
Postgre 12.6 e SQL versioni secondarie successive
La configurazione di per l'utilizzo delle funzioni Lambda SQL è un processo in più fasi che prevede AWS Lambda, IAMVPC, il tuo e il tuo . SQL Di seguito sono riportati i riepiloghi dei passaggi necessari.
Per ulteriori informazioni sulle funzioni Lambda, consulta Guida introduttiva a Lambda e AWS Fondamenti Lambda nel AWS Lambda Guida per gli sviluppatori.
Argomenti
- Passaggio 1: configura il Postgre RDSper le connessioni in uscita a SQLAWS Lambda
- Fase 2: Configurazione del cluster e SQLAWS Lambda
- Passaggio 3: Installare l'aws_lambdaestensione per un SQL
- Fase 4: Usare le funzioni di supporto Lambda con il (opzionale) SQL
- Passaggio 5: richiamare una funzione Lambda dal cluster RDS SQL
- Fase 6: concessione delle autorizzazioni ad altri utenti per richiamare le funzioni Lambda
- Esempi: richiamo di funzioni Lambda dal cluster DB RDS SQL
- Messaggi di errore della funzione Lambda
- AWS Lambdariferimento a funzioni e parametri
Passaggio 1: configura il Postgre RDSper le connessioni in uscita a SQLAWS Lambda
Le funzioni Lambda vengono sempre eseguite all'interno di un Amazon VPC di proprietà di AWS Lambda servizio. Lambda applica a ciò le regole di accesso e sicurezza alla rete VPC e le mantiene e le monitora automaticamente. VPC Il per l'istanza Postgre SQL DB invia il traffico di rete ai servizi Lambda. VPC La modalità di configurazione dipende dal fatto che l'istanza database sia pubblica o privata.
Postgre: l'istanza SQL DB è pubblica se si trova in una sottorete pubblica dell'istanza e se la proprietà "" VPC dell'istanza è. PubliclyAccessible
true
Per trovare il valore di questa proprietà, puoi usare describe-db-instances AWS CLI comando. Oppure puoi usare il AWS Management Console per aprire la scheda Connettività e sicurezza e verificare che l'opzione Accessibile al pubblico sia Sì. Per verificare che l'istanza si trovi nella sottorete pubblica del tuo VPC AWS Management Console o il AWS CLI.Per configurare l'accesso a Lambda, si utilizza il AWS Management Console o il AWS CLI per creare una regola in uscita sul tuo gruppo VPC di sicurezza. La regola in uscita specifica che è TCP possibile utilizzare la porta 443 per inviare pacchetti a qualsiasi IPv4 indirizzo (0.0.0.0/0).
privato RDSper istanza Postgre SQL DB: in questo caso, la proprietà "PubliclyAccessible" dell'istanza si trova
false
o si trova in una sottorete privata. Per consentire all'istanza di funzionare con Lambda, puoi utilizzare un gateway (Network Address Translation)NAT. Per ulteriori informazioni, consulta i NATgateway. Oppure puoi configurarlo VPC con un VPC endpoint per Lambda. Per ulteriori informazioni, consulta gli VPCendpoint nella Amazon VPC User Guide. L'endpoint risponde alle chiamate effettuate dal alle funzioni Lambda. SQL L'endpoint utilizza la propria risoluzione privata. VPC DNS RDSfor Postgre non SQL può utilizzare l'VPCendpoint Lambda finché non si modifica il valore di ilrds.custom_dns_resolution
dal valore predefinito 0 (non abilitato) a 1. A tale scopo:Crea un gruppo parametri del database personalizzato.
Cambia il valore del parametro
rds.custom_dns_resolution
da0
(valore predefinito) a1
.Modifica l'istanza database per utilizzare il gruppo parametri del database personalizzato.
Affinché il parametro modificato abbia effetto, riavvia l'istanza.
Ora VPC puoi interagire con AWS Lambda VPCa livello di rete. Successivamente, si configurano le autorizzazioni utilizzandoIAM.
Fase 2: Configurazione del cluster e SQLAWS Lambda
L'invocazione di funzioni Lambda dal RDScluster privilegi SQL. Questo approccio fornisce all'istanza database privilegi per richiamare la funzione Lambda specificata per tuo conto. I passaggi seguenti mostrano come eseguire questa operazione utilizzando AWS CLI.
Per configurare le IAM autorizzazioni per l'utilizzo dell'RDSistanza Amazon con Lambda
Usa la create-policy
AWS CLI comando per creare una IAM policy che consenta al di richiamare la funzione SQL Lambda specificata. (L'ID dichiarazione (Sid) è una descrizione facoltativa per la dichiarazione di policy e non ha alcun effetto sull'utilizzo). Questa policy fornisce all'istanza database 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 Politiche basate sull'identità IAM per LambdaUsa
il create-role AWS CLI comando per creare un IAM ruolo che la policy può assumere in fase di esecuzione. 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 politica al ruolo utilizzando 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
AWS CLI comando. Quest'ultimo passaggio consente agli utenti dell'istanza database di richiamare le funzioni Lambda.
aws rds add-role-to-db-instance \ --db-instance-identifier
my-instance-name
\ --feature-name Lambda \ --role-arn arn:aws:iam::444455556666:role/rds-lambda-role
\ --regionaws-region
Una volta VPC IAM completate le configurazioni, ora puoi installare l'aws_lambda
estensione. (Tieni presente che puoi installare l'estensione in qualsiasi momento, ma finché non configuri il VPC supporto e IAM i privilegi corretti, l'aws_lambda
estensione non aggiunge nulla al RDScluster Aurora Postgre DB per SQL .)
Passaggio 3: Installare l'aws_lambda
estensione per un SQL
Per utilizzare AWS Lambda Questa estensione fornisce al la possibilità di richiamare le SQL funzioni Lambda da Postgre. SQL
Per installare l'aws_lambda
estensione nel SQL
Usa la SQL psql
riga di comando Postgre o pgAdmin lo strumento per connetterti al tuo cluster DB. RDS SQL
Connect al come utente con privilegi.
rds_superuser
L'utentepostgres
predefinito viene visualizzato nell'esempio.psql -h
instance.444455556666.
.rds.amazonaws.com -U postgres -p 5432aws-region
-
Installa l'estensione
aws_lambda
. Anche l'estensioneaws_commons
è obbligatoria. Fornisce funzioni di supportoaws_lambda
e molte altre estensioni Aurora per Postgre. SQL Se non è già presente nel , viene installato come illustrato di seguito.aws_lambda
CREATE EXTENSION IF NOT EXISTS aws_lambda CASCADE;
NOTICE: installing required extension "aws_commons" CREATE EXTENSION
L'aws_lambda
estensione viene installata nell'istanza DB principale del . Ora puoi creare strutture utili per richiamare le tue funzioni Lambda.
Fase 4: Usare le funzioni di supporto Lambda con il (opzionale) SQL
È possibile utilizzare le funzioni di supporto dell'aws_commons
estensione per preparare entità da richiamare più facilmente da Postgre. SQL Per farlo, devi disporre delle seguenti informazioni sulle funzioni Lambda:
-
Nome della funzione: il nome, Amazon Resource Name (ARN), la versione o l'alias della funzione Lambda. La IAM policy creata Fase 2: Configurazione IAM per l'istanza e Lambda richiede ilARN, quindi ti consigliamo di utilizzare le tue funzioni. ARN
-
AWS Regione: (Facoltativo) AWS Regione in cui si trova la funzione Lambda se non si trova nella stessa regione del cluster RDS SQL
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 Passaggio 5: richiamare una funzione Lambda dal cluster RDS SQL.
Passaggio 5: richiamare una funzione Lambda dal cluster RDS SQL
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
Connect all'istanza DB utilizzando
psql
opgAdmin.psql -h
instance.444455556666.
.rds.amazonaws.com -U postgres -p 5432aws-region
Invoca la funzione usando la suaARN.
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
Connect all'istanza DB utilizzando
psql
opgAdmin.psql -h
instance.444455556666.
.rds.amazonaws.com -U postgres -p 5432aws-region
Esegui i seguenti SQL comandi:
postgres=>
GRANT USAGE ON SCHEMA aws_lambda TOdb_username
; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA aws_lambda TOdb_username
;