Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Invocation d'une AWS Lambda fonction depuis une instance de base de données
AWS Lambda est un service de calcul piloté par les événements qui vous permet d'exécuter du code sans provisionner ni gérer de serveurs. Il peut être utilisé avec de nombreux AWS services, notamment RDS pour PostgreSQL. Par exemple, vous pouvez utiliser des fonctions Lambda pour traiter les notifications d'événements à partir d'une base de données ou pour charger des données à partir de fichiers chaque fois qu'un nouveau fichier est chargé sur Amazon S3. Pour en savoir plus sur Lambda, consultez Qu'est-ce que c'est ? AWS Lambda dans le Guide AWS Lambda du développeur.
Note
L'appel d'une AWS Lambda fonction est pris en charge dans les versions RDS pour PostgreSQL suivantes :
Toutes les versions de PostgreSQL 17
Toutes les versions de PostgreSQL 16
Toutes les versions de PostgreSQL 15
PostgreSQL 14.1 et versions mineures ultérieures
-
PostgreSQL 13.2 et versions mineures ultérieures
-
PostgreSQL 12.6 et versions mineures ultérieures
Vous trouverez ci-après des résumés des étapes nécessaires.
Pour plus d'informations sur les fonctions Lambda, veuillez consulter Mise en route avec Lambda et Principes de base d'AWS Lambda dans le Guide du développeur AWS Lambda .
Rubriques
Étape 1 : configurer votre instance de base de données pour les connexions sortantes vers AWS Lambda
Étape 2 : configurer IAM pour votre instance de base de données et AWS Lambda
Étape 3 : installer l'extension aws_lambda pour une instance de base de données RDS for PostgreSQL
Étape 6 : accorder aux autres utilisateurs l'autorisation d'appeler les fonctions Lambda
Exemples : Invocation de fonctions Lambda depuis votre RDScluster de SQL
Étape 1 : configurer votre instance de base de données pour les connexions sortantes vers AWS Lambda
Les fonctions Lambda s'exécutent toujours au sein d'un Amazon VPC appartenant au service. AWS Lambda Lambda applique des règles d'accès réseau et de sécurité à ce VPC, le maintient et le surveille automatiquement. Votre instance de base de données RDS for PostgreSQL envoie du trafic réseau vers le VPC du service Lambda. La façon dont vous configurez cela dépend de si votre instance de base de données est publique ou privée.
instance de base de données publique RDS pour PostgreSQL — L'instance de base de données données est publique si elle se trouve dans un sous-réseau public de votre VPC et si la propriété « » de l'instance est. PubliclyAccessible
true
Pour trouver la valeur de cette propriété, vous pouvez utiliser la describe-db-instances AWS CLI commande. Vous pouvez également utiliser la AWS Management Console afin d'ouvrir l'onglet Connectivity & security (Connectivité et sécurité) et vérifier que l'option Publicly accessible (Accessible publiquement) est définie sur Yes (Oui). Pour vérifier que l'instance se trouve dans le sous-réseau public de votre VPC, vous pouvez utiliser la AWS Management Console ou AWS CLI.Pour configurer l'accès à Lambda, vous utilisez le AWS Management Console ou AWS CLI pour créer une règle sortante sur le groupe de sécurité de votre VPC. La règle de sortie indique que TCP peut utiliser le port 443 pour envoyer des paquets à n'importe quelle IPv4 adresse (0.0.0.0/0).
Cluster de RDS privé pour instance de base de données PostgreSQL — Dans ce cas, la propriété PubliclyAccessible
false
« » de l'instance est ou se trouve dans un sous-réseau privé. Pour permettre à l'instance de fonctionner avec Lambda, vous pouvez utiliser une passerelle traduction d'adresses réseau (NAT). Pour plus d'informations, veuillez consulter Passerelles NAT. Vous pouvez également configurer votre VPC avec un point de terminaison VPC pour Lambda. Pour de plus amples informations, consultez Points de terminaison VPC dans le Guide de l’utilisateur Amazon VPC. Le point de terminaison répond aux appels faits par votre instance de base de données RDS for PostgreSQL à vos fonctions Lambda. Le point de terminaison d'un VPC utilise sa propre résolution DNS privée. RDS for PostgreSQL ne peut pas utiliser le point de terminaison d'un VPC Lambda tant que vous n'avez pas changé la valeur du paramètrerds.custom_dns_resolution
de sa valeur par défaut de 0 (non activée) à 1. Pour ce faire :Créez un groupe de paramètres DB personnalisé.
Change la valeur du paramètre
rds.custom_dns_resolution
de sa valeur par défaut de0
à1
.Modifiez votre instance de base de données pour utiliser votre groupe de paramètres de base de données personnalisé.
Redémarrez l'instance pour que le paramètre modifié prenne effet.
Votre VPC peut désormais interagir avec le AWS Lambda VPC au niveau du réseau. Ensuite, vous configurez les autorisations à l'aide d'IAM.
Étape 2 : configurer IAM pour votre instance de base de données et AWS Lambda
L'appel de fonctions Lambda depuis votre instance de base de données RDS for PostgreSQL requiert certains privilèges. Pour configurer les privilèges requis, nous vous recommandons de créer une politique IAM qui permet d'appeler des fonctions Lambda, d'attribuer cette politique à un rôle, puis d'appliquer le rôle à votre instance de base de données. Cette approche accorde à l'instance de base de données des privilèges pour appeler la fonction Lambda spécifiée en votre nom. Les étapes suivantes expliquent comment procéder à l'aide de l' AWS CLI.
Pour configurer les autorisations IAM pour l'utilisation de votre instance Amazon RDSavec Lambda
Utilisez la AWS CLI commande create-policy
pour créer une politique IAM qui permet à votre instance de base de données Aurora d'appeler la fonction Lambda spécifiée. (L'ID d'instruction (Sid) est une description facultative pour votre instruction de politique et n'a aucun effet sur l'utilisation.) Cette politique accorde à votre instance de base de données les autorisations minimales requises pour appeler la fonction Lambda spécifiée. 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-functionVous pouvez également utiliser la politique
AWSLambdaRole
prédéfinie qui vous permet d'appeler n'importe laquelle de vos fonctions Lambda. Pour de plus amples informations, veuillez consulter la rubrique Politiques IAM basées sur l'identité pour Lambda.Utilisez la AWS CLI commande create-role
pour créer un rôle IAM que la politique peut assumer lors de l'exécution. 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" } ] }'Appliquez la politique au rôle à l'aide de la attach-role-policy
AWS CLI commande. aws iam attach-role-policy \ --policy-arn arn:aws:iam::
444455556666
:policy/rds-lambda-policy
\ --role-namerds-lambda-role
--regionaws-region
AWS CLI Cette dernière étape permet aux utilisateurs de base de données de votre instance de base de données d'appeler des fonctions 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
Une fois le VPC et les configurations IAM terminées, vous pouvez désormais installer l'extension aws_lambda
. (Notez que vous pouvez installer l'extension à tout moment, mais tant que vous n'avez pas configuré la prise en charge du VPC et les privilèges IAM corrects, l'extension aws_lambda
n'ajoute rien aux fonctionnalités de votre instance de base de données RDS for PostgreSQL.)
Étape 3 : installer l'extension aws_lambda
pour une instance de base de données RDS for PostgreSQL
Cette extension offre à votre instance de base de données RDS for PostgreSQL la capacité d'appeler des fonctions Lambda depuis PostgreSQL.
Pour installer l'extension aws_lambda
dans votre instance de base de données RDS for PostgreSQL
Utilisez la ligne de commande psql
de PostgreSQL ou l'outil pgAdmin afin de vous connecter à votre instance de base de données RDS for PostgreSQL.
Connectez-vous à votre instance de base de données RDS for PostgreSQL en tant qu'utilisateur doté de privilèges
rds_superuser
. L'utilisateurpostgres
par défaut est illustré dans l'exemple.psql -h
instance.444455556666.
.rds.amazonaws.com -U postgres -p 5432aws-region
-
Installez l'extension
aws_lambda
. L'extensionaws_commons
est également requise. Elle fournit des fonctions d'assistance pouraws_lambda
et de nombreuses autres extensions Aurora pour PostgreSQL. Si elle n'est pas déjà sur votre instance de base de données RDS for PostgreSQL, elle est installée avecaws_lambda
comme illustré ci-dessous.CREATE EXTENSION IF NOT EXISTS aws_lambda CASCADE;
NOTICE: installing required extension "aws_commons" CREATE EXTENSION
L'extension aws_lambda
est installée dans l'instance de base de données primaire de votre . Vous pouvez désormais créer des structures de commodité pour appeler vos fonctions Lambda.
Étape 4 : utiliser les fonctions d'assistance Lambda avec votre instance de base de données RDS for PostgreSQL (Facultatif)
Vous pouvez utiliser les fonctions d'assistance de l'extension aws_commons
pour préparer les entités que vous pouvez appeler plus facilement depuis PostgreSQL. Pour ce faire, vous avez besoin des informations suivantes concernant vos fonctions Lambda :
-
Function name (Nom de la fonction) — Le nom, l'Amazon Resource Name (ARN), la version ou l'alias de la fonction Lambda. La politique IAM créée dans Étape 2 : configurer IAM pour votre instance et Lambda nécessite l'ARN, nous vous recommandons donc d'utiliser l'ARN de votre fonction.
-
AWS Région — (Facultatif) AWS Région dans laquelle se trouve la fonction Lambda si elle ne se trouve pas dans la même région que votre instance de base de données Aurora .
Pour conserver les informations de nom de la fonction Lambda, utilisez la fonction aws_commons.create_lambda_function_arn. Cette fonction d'assistance crée une structure composite aws_commons._lambda_function_arn_1
avec les détails requis par la fonction d'appel. Vous trouverez ci-dessous trois autres approches pour configurer cette structure composite.
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
N'importe laquelle de ces valeurs peut être utilisée dans les appels à la fonction aws_lambda.invoke. Pour obtenir des exemples, consultez Étape 5 : appeler une fonction Lambda à partir de votre instance de base de données RDS for PostgreSQL..
Étape 5 : appeler une fonction Lambda à partir de votre instance de base de données RDS for PostgreSQL.
La fonction aws_lambda.invoke
se comporte de manière synchrone ou asynchrone, en fonction du invocation_type
. Les deux alternatives à ce paramètre sont RequestResponse
(valeur par défaut) et Event
, comme suit.
-
RequestResponse
— Ce type d'appel est synchrone. Il s'agit du comportement par défaut lorsque l'appel est effectué sans spécifier de type d'appel. La charge utile de réponse inclut les résultats de la fonctionaws_lambda.invoke
. Utilisez ce type d'appel lorsque votre flux de travail nécessite la réception des résultats de la fonction Lambda avant de continuer. -
Event
— Ce type d'appel est asynchrone. La réponse n'inclut pas de charge utile contenant des résultats. Utilisez ce type d'appel lorsque votre flux de travail n'a pas besoin de résultat de la fonction Lambda pour continuer le traitement.
Pour tester simplement votre configuration, vous pouvez vous connecter à votre instance de base de données en utilisant psql
et appeler un exemple de fonction depuis la ligne de commande. Supposons que l'une des fonctions de base soit configurée sur votre service Lambda, telle que la fonction simple Python affichée dans la capture d'écran suivante.

Pour invoquer un exemple de fonction
Connectez-vous à votre instance de base de données avec
psql
ou pgAdmin.psql -h
instance.444455556666.
.rds.amazonaws.com -U postgres -p 5432aws-region
Appelez la fonction en utilisant son 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 réponse se présente comme suit.
status_code | payload | executed_version | log_result -------------+-------------------------------------------------------+------------------+------------ 200 | {"statusCode": 200, "body": "\"Hello from Lambda!\""} | $LATEST | (1 row)
Si votre tentative d'appel ne réussit pas, veuillez consulter la section Messages d'erreur de fonction Lambda .
Étape 6 : accorder aux autres utilisateurs l'autorisation d'appeler les fonctions Lambda
À ce stade des procédures, vous êtes le seul, en tant que rds_superuser
, à pouvoir appeler vos fonctions Lambda. Pour permettre à d'autres utilisateurs d'appeler les fonctions que vous avez créées, vous devez leur accorder des autorisations.
Pour accorder à d'autres personnes l'autorisation d'appeler les fonctions Lambda
Connectez-vous à votre instance de base de données avec
psql
ou pgAdmin.psql -h
instance.444455556666.
.rds.amazonaws.com -U postgres -p 5432aws-region
Exécutez les commandes SQL suivantes :
postgres=>
GRANT USAGE ON SCHEMA aws_lambda TOdb_username
; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA aws_lambda TOdb_username
;