Invocare un AWS Lambdafunzione da un SQL - Amazon Relational Database Service

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.

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 . 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 il rds.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 da 0 (valore predefinito) a 1.

    • 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
  1. 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-function" } ] }'

    In 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 Lambda

  2. Usa 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" } ] }'
  3. 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-name rds-lambda-role --region aws-region
  4. 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 \ --region aws-region

Una volta VPC IAM completate le configurazioni, ora puoi installare l'aws_lambdaestensione. (Tieni presente che puoi installare l'estensione in qualsiasi momento, ma finché non configuri il VPC supporto e IAM i privilegi corretti, l'aws_lambdaestensione non aggiunge nulla al RDScluster Aurora Postgre DB per SQL .)

Passaggio 3: Installare l'aws_lambdaestensione 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_lambdaestensione nel SQL

Usa la SQL psql riga di comando Postgre o pgAdmin lo strumento per connetterti al tuo cluster DB. RDS SQL

  1. Connect al come utente con privilegi. rds_superuser L'utente postgres predefinito viene visualizzato nell'esempio.

    psql -h instance.444455556666.aws-region.rds.amazonaws.com -U postgres -p 5432
  2. Installa l'estensione aws_lambda. Anche l'estensione aws_commons è obbligatoria. Fornisce funzioni di supporto aws_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_lambdaestensione 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_commonsestensione 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 funzione aws_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.

Esempio di funzione Lambda mostrata nella AWS CLI for AWS Lambda
Per richiamare una funzione di esempio
  1. Connect all'istanza DB utilizzando psql opgAdmin.

    psql -h instance.444455556666.aws-region.rds.amazonaws.com -U postgres -p 5432
  2. 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
  1. Connect all'istanza DB utilizzando psql opgAdmin.

    psql -h instance.444455556666.aws-region.rds.amazonaws.com -U postgres -p 5432
  2. Esegui i seguenti SQL comandi:

    postgres=> GRANT USAGE ON SCHEMA aws_lambda TO db_username; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA aws_lambda TO db_username;