本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使 AWS Lambda 用 Amazon RDS
您可以直接或透過 Amazon RDS 代理將 Lambda 函數連接到 Amazon Relational Database Service 服務 (AmazonRDS) 資料庫。直接連線適用於簡單的案例,生產環境則建議使用代理。資料庫代理管理許多共用資料庫連線,讓函數在不耗盡資料庫連線的情況下達到高並行層級。
我們建議將 Amazon RDS Proxy 用於 Lambda 函數,這些函數可進行頻繁的短資料庫連線,或是開啟和關閉大量資料庫連線。如需詳細資訊,請參閱 Amazon 關聯式資料庫服務開發人員指南中的自動連接 Lambda 函數和資料庫執行個體。
配置您的功能以使用RDS資源
在 Lambda 主控台中,您可以佈建和設定 Amazon 資RDS料庫執行個體和代理資源。您可以通過導航到配置選項卡下的RDS數據庫來執行此操作。或者,您也可以在 Amazon RDS 主控台中建立和設定 Lambda 函數的連線。設定要搭配 Lambda 使用的RDS資料庫執行個體時,請注意下列準則:
-
要連接到數據庫,您的函數必須VPC位於數據庫運行的同一個 Amazon 中。
-
您可以將 Amazon RDS 數據庫與我的SQL,MariaDB 的,Postgre SQL 或 Microsoft SQL 服務器引擎一起使用。
-
您也可以將 Aurora 資料庫叢集與我SQL或 Postgre SQL 引擎搭配使用。
-
您需要提供 Secrets Manager 秘密以用於資料庫身分驗證。
-
IAM角色必須提供使用密碼的權限,而信任政策必須允許 Amazon RDS 擔任該角色。
-
使用IAM主控台設定 Amazon RDS 資源並將其連接到函數的主體必須具有以下許可:
注意
只有在將 Amazon RDS 代理設定為管理資料庫連線集區時,才需要 Amazon RDS 代理許可。
範例 許可政策
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateSecurityGroup", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:AuthorizeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupEgress", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "rds-db:connect", "rds:CreateDBProxy", "rds:CreateDBInstance", "rds:CreateDBSubnetGroup", "rds:DescribeDBClusters", "rds:DescribeDBInstances", "rds:DescribeDBSubnetGroups", "rds:DescribeDBProxies", "rds:DescribeDBProxyTargets", "rds:DescribeDBProxyTargetGroups", "rds:RegisterDBProxyTargets", "rds:ModifyDBInstance", "rds:ModifyDBProxy" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:ListFunctions", "lambda:UpdateFunctionConfiguration" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:AttachPolicy", "iam:CreateRole", "iam:CreatePolicy" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds", "secretsmanager:CreateSecret" ], "Resource": "*" } ] }
Amazon 會根據資料庫執行個體大小RDS收取代理伺服器的小時費率,如需詳細資訊,請參閱RDS代理定價
Lambda 和 Amazon RDS 設置
Lambda 和 Amazon RDS 主控台都將協助您自動設定一些必要的資源,以便在 Lambda 和 Amazon 之間建立連線RDS。
在 Lambda 函RDS數中連接到 Amazon 數據庫
下列程式碼範例示範如何實作連線至 Amazon RDS 資料庫的 Lambda 函數。該函數提出了一個簡單的數據庫請求,並返回結果。
處理 Amazon 的事件通知 RDS
您可以使用 Lambda 處理來自 Amazon RDS 資料庫的事件通知。Amazon RDS 將通知發送到 Amazon 簡單通知服務(AmazonSNS)主題,您可以將其配置為調用 Lambda 函數。Amazon 將來自 Amazon 的消息SNS包裝RDS在其自己的事件文檔中,並將其發送到您的函數中。
如需設定 Amazon 資RDS料庫以傳送通知的詳細資訊,請參閱使用 Amazon RDS 事件通知。
範例 Amazon SNS 事RDS件中的 Amazon 消息
{ "Records": [ { "EventVersion": "1.0", "EventSubscriptionArn": "arn:aws:sns:us-east-2:123456789012:rds-lambda:21be56ed-a058-49f5-8c98-aedd2564c486", "EventSource": "aws:sns", "Sns": { "SignatureVersion": "1", "Timestamp": "2023-01-02T12:45:07.000Z", "Signature": "tcc6faL2yUC6dgZdmrwh1Y4cGa/ebXEkAi6RibDsvpi+tE/1+82j...65r==", "SigningCertUrl": "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-ac565b8b1a6c5d002d285f9598aa1d9b.pem", "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e", "Message":
"{\"Event Source\":\"db-instance\",\"Event Time\":\"2023-01-02 12:45:06.000\",\"Identifier Link\":\"https://console.aws.amazon.com/rds/home?region=eu-west-1#dbinstance:id=dbinstanceid\",\"Source ID\":\"dbinstanceid\",\"Event ID\":\"http://docs.amazonwebservices.com/AmazonRDS/latest/UserGuide/USER_Events.html#RDS-EVENT-0002\",\"Event Message\":\"Finished DB Instance backup\"}",
"MessageAttributes": {}, "Type": "Notification", "UnsubscribeUrl": "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:123456789012:test-lambda:21be56ed-a058-49f5-8c98-aedd2564c486", "TopicArn":"arn:aws:sns:us-east-2:123456789012:sns-lambda", "Subject": "RDS Notification Message" } } ] }
完成 Lambda 和 Amazon RDS 教程
-
使用 Lambda 函數存取 Amazon 資料RDS庫 — 從 Amazon 使用RDS者指南,了解如何使用 Lambda 函數透過 Amazon RDS 代理將資料寫入 Amazon 資料RDS庫。每當新增訊息時,Lambda 函數都會讀取 Amazon SQS 佇列中的記錄,並將新項目寫入資料庫中的資料表。