使用 Aurora 調用 Lambda 函數我的SQL本機函數 - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Aurora 調用 Lambda 函數我的SQL本機函數

注意

您可以呼叫原生函式,以lambda_synclambda_async當您使用 Aurora 我的SQL版本 2,或 Aurora 我的SQL版本 3.01 及更高版本時。如需 Aurora 我的SQL版本的詳細資訊,請參閱Amazon Aurora 我的數據庫引擎更新 SQL

您可以調用 AWS Lambda 通過調用SQL本機函數lambda_synclambda_async. 當您想要將在 Aurora My 上執行的資料庫SQL與其他資料庫整合時,此方法很有用 AWS 服務。例如,每當資料列插入資料庫中的特定資料表時,您可能想要使用 Amazon 簡單通知服務 (AmazonSNS) 傳送通知。

使用原生函數呼叫 Lambda 函數

lambda_synclambda_async 函式是內建的原生函式,可同步或非同步叫用 Lambda 函式。如果您在繼續執行另一個動作之前,必須得知 lambda_sync 函數的結果,請使用同步函數 Lambda。如果您在繼續執行另一個動作之前,並不需要得知 Lambda 函數的結果,請使用非同步函數 lambda_async

授予 Aurora 我的SQL版本 3 中的角色

在 Aurora 我的SQL版本 3 中,調用本機函數的用戶必須被授予AWS_LAMBDA_ACCESS角色。若要將此角色授予使用者,請以管理使用者身分連接至資料庫執行個體,然後執行下列陳述式。

GRANT AWS_LAMBDA_ACCESS TO user@domain-or-ip-address

您可以執行下列陳述式來撤銷此角色。

REVOKE AWS_LAMBDA_ACCESS FROM user@domain-or-ip-address
提示

當您在 Aurora My SQL 版本 3 中使用角色技術時,也可以使用SET ROLE role_nameSET ROLE ALL陳述式來啟動角色。如果您不熟悉 My SQL 8.0 角色系統,可以在中深入瞭解角色型權限模型。如需詳細資訊,請參閱「我的SQL參考手冊」中的使用角色」。

此僅適用於目前的作用中工作階段。重新連線時,您必須再次執行SET ROLE陳述式以授與權限。如需詳細資訊,請參閱「我的SQL參考手冊」中的SETROLE陳述式

您可以使用 activate_all_roles_on_login 資料庫叢集參數,在使用者連線至資料庫執行個體時自動啟動所有角色。設定此參數時,您通常不需要明確呼叫SET ROLE陳述式即可啟用角色。如需詳細資訊,請參閱「我的參考手冊」中的「啟動」。SQL

不過,當不同的使用者呼叫預存程序時,您必須在預存程序開頭SET ROLE ALL明確呼叫,才能啟動角色。

如果在嘗試叫用 Lambda 函數時出現如下錯誤,請執行 SET ROLE 陳述式。

SQL Error [1227] [42000]: Access denied; you need (at least one of) the Invoke Lambda privilege(s) for this operation

授予權限 Aurora 我的SQL版本 2

在 Aurora 我的SQL版本 2 中,調用本機函數的用戶必須被授予INVOKE LAMBDA權限。若要將此權限授予使用者,請以管理使用者身分連接至資料庫執行個體,然後執行下列陳述式。

GRANT INVOKE LAMBDA ON *.* TO user@domain-or-ip-address

您可以執行下列陳述式來撤銷此權限。

REVOKE INVOKE LAMBDA ON *.* FROM user@domain-or-ip-address

lambda_sync 函數的語法

您可以指定 lambda_sync 呼叫類型,以同步呼叫 RequestResponse 函數。該函數返回JSON有效負載中 Lambda 調用的結果。此函數的語法如下。

lambda_sync ( lambda_function_ARN, JSON_payload )

lambda_sync 函數的參數

lambda_sync 函數具有下列參數。

羔羊田函數 ARN

要叫用的 Lambda 函數的 Amazon 資源名稱 (ARN)。

JSON_ 有效負載

叫用 Lambda 函數的裝載,格JSON式為。

注意

Aurora 我的SQL版本 3 支持我的 SQL 8.0 的JSON解析功能。但是,Aurora 我的SQL版本 2 不包含這些功能。JSON當 Lambda 函數傳回原子值 (例如數字或字串) 時,不需要剖析。

lambda_sync 函數範例

以下查詢會使用函數BasicTestLambda同步lambda_sync叫用 Lambda 函數。ARN函數的承載為 {"operation": "ping"}

SELECT lambda_sync( 'arn:aws:lambda:us-east-1:123456789012:function:BasicTestLambda', '{"operation": "ping"}');

lambda_async 函數的語法

您可以指定 lambda_async 呼叫類型,以非同步呼叫 Event 函數。該函數返回JSON有效負載中 Lambda 調用的結果。此函數的語法如下。

lambda_async ( lambda_function_ARN, JSON_payload )

lambda_async 函數的參數

lambda_async 函數具有下列參數。

羔羊田函數 ARN

要叫用的 Lambda 函數的 Amazon 資源名稱 (ARN)。

JSON_ 有效負載

叫用 Lambda 函數的裝載,格JSON式為。

注意

Aurora 我的SQL版本 3 支持我的 SQL 8.0 的JSON解析功能。但是,Aurora 我的SQL版本 2 不包含這些功能。JSON當 Lambda 函數傳回原子值 (例如數字或字串) 時,不需要剖析。

lambda_async 函數範例

下列以函數為基礎的查詢會以BasicTestLambda非同步方式lambda_async叫用 Lambda 函數。ARN函數的承載為 {"operation": "ping"}

SELECT lambda_async( 'arn:aws:lambda:us-east-1:123456789012:function:BasicTestLambda', '{"operation": "ping"}');

叫用觸發條件內的 Lambda 函數

您可以在資料修改陳述式上使用觸發條件來呼叫 Lambda。下列範例會使用 lambda_async 原生函數,並將結果存放在變數中。

mysql>SET @result=0; mysql>DELIMITER // mysql>CREATE TRIGGER myFirstTrigger AFTER INSERT ON Test_trigger FOR EACH ROW BEGIN SELECT lambda_async( 'arn:aws:lambda:us-east-1:123456789012:function:BasicTestLambda', '{"operation": "ping"}') INTO @result; END; // mysql>DELIMITER ;
注意

每個SQL語句不會運行一次觸發器,但每行修改一次,一次一行。觸發程序執行時,處理程序是同步的。只有在觸發程序完成時,才會傳回資料修改陳述式。

調用時要小心 AWS Lambda 來自發生高寫入流量之資料表上觸發程序的功能。 INSERTUPDATE、和DELETE觸發程序會每列啟動。具有INSERT、或DELETE觸發器的資料表上需要大量寫入的工作負載UPDATE,會導致大量呼叫您的 AWS Lambda 功能。