本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
調用 AWS Lambda 來自適用於 的功能 SQL
AWS Lambda 是一項事件驅動的運算服務,可讓您執行程式碼,而無需佈建或管理伺服器。它可以與許多人一起使用 AWS 服務,包括波斯特 。SQL例如,您可以使用 Lambda 函數處理來自資料庫的事件通知,或在新檔案上傳到 Simple Storage Service (Amazon S3) 時從檔案中載入資料。若要進一步了解 Lambda,請參閱什麼是 AWS Lambda? 在 AWS Lambda 開發人員指南。
注意
調用 AWS Lambda 這些RDS功能支持 Postgre SQL 版本:
所有郵政 SQL 16 版本
所有後 SQL 15 版本
下一頁 SQL 14.1 及更高的次要版本
-
下載 SQL 13.2 及更高的次要版本
-
下載 SQL 12.6 和更高的次要版本
SQLRDS為 波斯特SQL來使用 Lambda 函數是一個涉及的多步驟過程 AWS Lambda、IAMVPC、您的和您的 行個SQL體)。以下提供必要步驟的摘要。
如需 Lambda 函數的詳細資訊,請參閱開始使用 Lambda 和 AWS Lambda 基金會 AWS Lambda 開發人員指南。
主題
- 步驟 1:RDS為輸出連線設定適用於 Postgre SQL 資料庫執行個體的 Aurora Postgre SQL 資料庫AWS Lambda
- 步驟 2:IAM針對 和 AWS Lambda
- 步驟 3:安裝適用於 Postgre 資料庫執行個體的 的aws_lambda擴充功能 SQL
- 步驟 4:RDS針對 Postgre 資料庫執行個體使用 Lambda 協助程式函數搭配 Aurora Postgre SQL 資料SQL庫叢 (選用)
- 步驟 5:RDS針對 Postgre 資料庫執行個體從 叫用 Lambda 函數 SQL
- 步驟 6:授予其他使用者呼叫 Lambda 函數的許可權限
- 範例:RDS針對 Postgre 資料庫執行個體從 叫用 Lambda 函數 SQL
- Lambda 函數錯誤訊息
- AWS Lambda函數和參數參考
步驟 1:RDS為輸出連線設定適用於 Postgre SQL 資料庫執行個體的 Aurora Postgre SQL 資料庫AWS Lambda
Lambda 函數總是在 Amazon 內部運行VPC,該函數由 AWS Lambda 服務。Lambda 會對此套用網路存取VPC和安全規則,並VPC自動維護和監控。RDS適用於 Postgre SQL 資料庫執行個體的 Aurora Postgre SQL 資料庫會將網路流量傳送至 Lambda 服務。VPC具體設定取決於 資料庫執行個體是公有的或私有。
集 — 如果行個體位於您的公有子網路中VPC,且執行個體的 "PubliclyAccessible" 屬性為,則該執行個體為公用資料庫執行個體。
true
若要尋找此屬性的值,您可以使用 describe-db-instances AWS CLI 指令。或者,您可以使用 AWS Management Console 以開啟 [連線與安全性] 索引標籤,並檢查 [公開存取] 為 [是]。若要驗證執行個體是否位於您的公有子網路中VPC,您可以使用 AWS Management Console 或 AWS CLI.若要設定 Lambda 的存取權限,請使用 AWS Management Console 或 AWS CLI 以在您VPC的安全群組上建立輸出規則。輸出規則指定TCP可以使用連接埠 443 將封包傳送到任何IPv4位址 (0.0.0.0/0)。
— 在此情況下,執行個體的 PubliclyAccessible "" 內容為
false
或位RDS於私有子網路中。若要允許執行個體使用 Lambda,您可以使用網路位址轉譯) NAT 閘道。如需詳細資訊,請參閱NAT閘道。或者,您可以使用 Lambda VPC 的VPC端點進行設定。如需詳細資訊,請參閱 Amazon VPC 使用者指南中的VPC端點。端點會回應 執行個體對 Lambda 函數所發出的呼叫。VPC端點使用自己的私有DNS解析度。RDS對於 Postgre 不SQL能使用 Lambda VPC 端點,直到您將的值rds.custom_dns_resolution
從其默認值 0(未啟用)更改為 1。若要這麼做:建立自訂資料庫參數群組。
將參數
rds.custom_dns_resolution
從預設值0
變更為1
。修改資料庫執行個體以使用自訂資料庫參數群組。
為了讓修改過的參數生效,請重新啟動執行個體。
您現在VPC可以與 AWS Lambda VPC在網絡級別。接下來,您可以使用IAM.
步驟 2:IAM針對 和 AWS Lambda
從您的 執行個體需要特定權限。若要設定必要的權限,建議您建立允許叫用 Lambda 函數的IAM政策,將該原則指派給角色,然後將該角色套用至執行個體。此做法會提供資料庫執行個體權限,允許代表您叫用指定的 Lambda 函數。下列步驟說明如何使用 AWS CLI.
設IAM定將Amazon RDS 執行個體與 Lambda 搭配使用的許可
使用建立原
則 AWS CLI 此指令可建立IAM政策,以允許 RDS叫用指定的 Lambda 函數。(陳述式 ID (Sid) 是政策陳述式的選用描述,不會影響使用。) 此政策為 資料庫執行個體提供叫用指定 Lambda 函數所需的最低許可。 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或者,您可以使用預先定義的
AWSLambdaRole
政策,該政策允許叫用任何 Lambda 函數。如需詳細資訊,請參閱 Lambda 的身分識別型IAM政策使用創建
角色 AWS CLI 命令,以建立原則可在執行階段承擔的IAM角色。 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" } ] }'使用將原則套用至角色 attach-role-policy
AWS CLI 指令。 aws iam attach-role-policy \ --policy-arn arn:aws:iam::
444455556666
:policy/rds-lambda-policy
\ --role-namerds-lambda-role
--regionaws-region
AWS CLI 指令。最後這個步驟允許資料庫執行個體的資料庫使用者叫用 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
IAM配置完成VPC後,您現在可以安裝aws_lambda
擴展程序。請注意,您可以隨時安裝擴充功能,但在您設定正確的VPC支援和IAM權限之前,aws_lambda
擴充功能不會RDS為您的 SQL料庫執行個體功能。)
步驟 3:安裝適用於 Postgre 資料庫執行個體的 的aws_lambda
擴充功能 SQL
使用 AWS Lambda 使用RDS適用於 Postgre SQL 資料庫執行個體的 Aurora Postgre SQL 資料庫,將 Postgre SQL 擴充功能新增至 aws_lambda
Postgre 資料庫執行個體的 RDS。SQL此擴充功能RDS為 Postgre SQL 資料庫執行個體提供 Aurora Postgre SQL 資料庫,並能夠從 Postgre 呼叫 Lambda 函數。SQL
在RDS適用於 Postgre 資料庫執行個體的 中安裝aws_lambda
擴充功能 SQL
使用 Postgre SQL psql
指令列或 pgAdmin 工具連線至RDS適用於 Postgre 資料庫執行個體的 。SQL
以具
rds_superuser
有權限的使用者身分 Connect 至 RDS。預設postgres
使用者顯示於範例中。psql -h
instance.444455556666.
.rds.amazonaws.com -U postgres -p 5432aws-region
-
安裝
aws_lambda
擴充功能。另外也需要aws_commons
擴充功能。它為 Postgre SQL 提供了輔助功能以aws_lambda
及許多其他 Aurora 擴展。如果它不在 Postgre SQLDB執行個體的 Aurora Postgre SQLDB RDS上,則會以下列方aws_lambda
式安裝。CREATE EXTENSION IF NOT EXISTS aws_lambda CASCADE;
NOTICE: installing required extension "aws_commons" CREATE EXTENSION
aws_lambda
擴充功能已安裝在您的 資料庫執行個體中。您現在可以建立便利的結構,用於叫用 Lambda 函數。
步驟 4:RDS針對 Postgre 資料庫執行個體使用 Lambda 協助程式函數搭配 Aurora Postgre SQL 資料SQL庫叢 (選用)
您可以使用aws_commons
擴展程序中的輔助函數來準備可以更輕鬆地從 Postgre SQL 調用的實體。若要執行此操作,您需要以下有關 Lambda 函數的資訊:
-
函數名稱 — Lambda 函數的名稱、Amazon 資源名稱 (ARN)、版本或別名。中建立的IAM原則步驟 2:IAM為您的執行個體和 Lambda 進行設定需要ARN,因此我們建議您使用函數的ARN。
-
AWS 區域 — (選填) AWS 如果 Lambda 函數所在的區域與 Postgre 資料庫執行個體的 不在相同RDS的區域。SQL
若要保存 Lambda 函數名稱資訊,可使用 aws_commons.create_lambda_function_arn 函數。此 helper 函數會建立一個 aws_commons._lambda_function_arn_1
複合結構,其中包含叫用函數所需的詳細資訊。接下來說明設定此複合結構的三種替代做法。
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
這些值全部都可以用於 aws_lambda.invoke 函數呼叫。如需範例,請參閱 步驟 5:RDS針對 Postgre 資料庫執行個體從 叫用 Lambda 函數 SQL。
步驟 5:RDS針對 Postgre 資料庫執行個體從 叫用 Lambda 函數 SQL
aws_lambda.invoke
函數採同步或異步行為,具體取決於 invocation_type
。此參數的兩個替代項目是 RequestResponse
(預設值) 和 Event
,如下所示:
-
RequestResponse
– 此叫用類型為同步。這是在未指定叫用類型的情況下進行呼叫時的預設行為。回應承載包括aws_lambda.invoke
函數的結果。如果您的工作流程需要接收 Lambda 函數的結果才能繼續執行,請使用此叫用類型。 -
Event
– 此叫用類型為非同步。回應不包括含有結果的承載。如果您的工作流程不需要 Lambda 函數的結果即可繼續執行,請使用此叫用類型。
如要簡單測試您的設定,可以使用 psql
連線至資料庫執行個體,並從命令列叫用範例函數。假設您在 Lambda 服務上設定了一個基本函數,例如下方螢幕擷取畫面中顯示的簡單 Python 函數。
叫用範例函數
使用
psql
或 Connect 到您的資料庫執行個體pgAdmin。psql -h
instance.444455556666.
.rds.amazonaws.com -U postgres -p 5432aws-region
調用使用它的功能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 );回應如下所示。
status_code | payload | executed_version | log_result -------------+-------------------------------------------------------+------------------+------------ 200 | {"statusCode": 200, "body": "\"Hello from Lambda!\""} | $LATEST | (1 row)
如果您的叫用嘗試未成功,請參閱 Lambda 函數錯誤訊息 。
步驟 6:授予其他使用者呼叫 Lambda 函數的許可權限
在程序中的這一點上,只有身為 rds_superuser
的您可以叫用 Lambda 函式。如要允許其他使用者呼叫您建立的任何函數,您需要授予其許可權限。
如要授予叫用 Lambda 函數的許可權限
使用
psql
或 Connect 到您的資料庫執行個體pgAdmin。psql -h
instance.444455556666.
.rds.amazonaws.com -U postgres -p 5432aws-region
執行下列SQL命令:
postgres=>
GRANT USAGE ON SCHEMA aws_lambda TOdb_username
; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA aws_lambda TOdb_username
;