本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Aurora 調用 Lambda 函數我的SQL本機函數
注意
您可以呼叫原生函式,以lambda_sync
及lambda_async
當您使用 Aurora 我的SQL版本 2,或 Aurora 我的SQL版本 3.01 及更高版本時。如需 Aurora 我的SQL版本的詳細資訊,請參閱Amazon Aurora 我的數據庫引擎更新 SQL。
您可以調用 AWS Lambda 通過調用SQL本機函數lambda_sync
和lambda_async
. 當您想要將在 Aurora My 上執行的資料庫SQL與其他資料庫整合時,此方法很有用 AWS 服務。例如,每當資料列插入資料庫中的特定資料表時,您可能想要使用 Amazon 簡單通知服務 (AmazonSNS) 傳送通知。
內容
使用原生函數呼叫 Lambda 函數
lambda_sync
和 lambda_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_name
SET ROLE
ALL
陳述式來啟動角色。如果您不熟悉 My SQL 8.0 角色系統,可以在中深入瞭解角色型權限模型。如需詳細資訊,請參閱「我的SQL參考手冊」中的「使用角色
此僅適用於目前的作用中工作階段。重新連線時,您必須再次執行SET ROLE
陳述式以授與權限。如需詳細資訊,請參閱「我的SQL參考手冊」中的SETROLE陳述式
您可以使用 activate_all_roles_on_login
資料庫叢集參數,在使用者連線至資料庫執行個體時自動啟動所有角色。設定此參數時,您通常不需要明確呼叫SET ROLE
陳述式即可啟用角色。如需詳細資訊,請參閱「我的參考手冊」中的「啟動
不過,當不同的使用者呼叫預存程序時,您必須在預存程序開頭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 來自發生高寫入流量之資料表上觸發程序的功能。 INSERT
UPDATE
、和DELETE
觸發程序會每列啟動。具有INSERT
、或DELETE
觸發器的資料表上需要大量寫入的工作負載UPDATE
,會導致大量呼叫您的 AWS Lambda 功能。