0

我在AWS中創建了一些Lambda,並創建了一個Aurora RDS(公開可用)。我無法執行lambdas(通過call mysql.lambda_async)。從Aurora RDS存儲過程權限中調用AWS Lambda問題

當我試圖獲得錯誤ERROR 1873: 1873: Lambda API returned error: Missing Credentials: Cannot instantiate Lambda Client

我試着附加一個名爲aurora-lambdas的IAM角色,我設置了對RDS和Lambdas的完全訪問權限以及這些服務之間的信任關係,但在嘗試各種配置後,我仍然遇到了問題。

某人是否已成功從RDS執行AWS Lambda?謝謝:)

+0

的IAM角色必須附加到調用真實(在RDS控制檯,而不是IAM控制檯)機能的研究具體的極光集羣。你做到了嗎? –

+0

我通過將IAM角色ARN添加到RDS DB Cluseter參數組配置來解決該問題。我將ARN添加到了'aws_default_lambda_role'鍵。 – lu1s

回答

1

經過艱苦的調查,我們添加了aws_default_lambda_role密鑰,並將IAM角色ARN作爲值添加到RDS數據庫羣集參數組配置文件。完成之後,具有正確權限的角色現在RDS可以成功調用mysql lambda API。

2

參數關鍵字aws_default_lambda_role需要具有既附加到Aurora羣集且具有與其相關的正確lambda訪問策略的角色的完整ARN值路徑。

首先,啓用IAM DB Authentication Enabled這意味着您的數據庫用戶憑證可以通過AWS IAM用戶和角色進行管理。

創建策略,創建角色,將策略附加到角色,將角色關聯到Aurora羣集的步驟如下。

1.Create a IAM Policy to Access AWS Lambda Resources.

2.Create IAM Role to Allow Amazon Aurora to Access AWS Services with Policy attached.

3.Associate IAM Role with an Amazon Aurora MySQL DB Cluster that needs to use Lambda.

4.設置相關AWS服務於ARN集羣級參數鍵爲關聯的IAM角色。 使用上面給出的網絡鏈接3中的步驟10。步驟10描述了aws_default_s3_role,但我們只需要尋找aws_default_lambda_role

5.轉到RDS Dashboard

6.點擊參數組

7.點擊創建參數組

Steps 5, 6, 7 in picture.

8.選擇參數組家庭aurora5.6

9。選擇類型DB Cluster Parameter Group

所需的配置組名鍵入文本框中爲someName56

創建,然後編輯參數

看參數名稱爲aws_default_lambda_role,然後鍵入AR N代表上面第4步中創建的IAM角色。 Step 12 with aws_default_lambda_role

簡要說明

要記住,因爲所涉及的抽象層,還有IAM用戶,角色和策略的分離是很重要的。策略可以附加到用戶或角色。但不能與運行的實例(如EC2或RDS)相關聯。要將S3或Lambda訪問附加到寫在本地計算機上的代碼,必須使用具有相應策略的IAM用戶。要附加對Amazon內部服務的訪問權限,則必須分配IAM角色,例如,允許RDS Aurora羣集數據庫觸發Lambda並使用CALL mysql.lambda_async過程。 RDS實例具有觸發lambda函數的作用,因爲它在AWS內部,因此必須分配一個IAM角色。除非需要更多內容,否則就會給出最少的訪問權限,以及如何在不直接訪問RDS虛擬機的情況下更改配置文件。因此,需要更改參數組值以便在DB軟件中進行一些配置更改,而無需直接連接到虛擬機。它的設計比使用SSH或直接連接軟件的傳統方法更簡單。由於abstaction層(即AWS控制檯可以跟蹤用戶活動,因此哪個用戶/服務提交了Lambda觸發器的操作以幫助查明問題),這還允許更大的責任。

注意

我不是專家,所以請糾正我的解釋,我沒有對AWS十足的把握,所以我可以在我的任一步驟或解釋所犯的錯誤。但這是我爲解決我的特定問題所做的。

編輯:(發佈之後分鐘)

我的具體問題:

當我做在SQL中直接調用,它給了我下面的錯誤輸出,使我的步驟我概述解決這個問題。

的mysql> CALL mysql.lambda_async('arn:aws:lambda:us-region-1:02020202020:function:FuncSomeNameLambdaFunc', CONCAT('{ "subject" : "', 'subject contents', '", "message" : "', 'Message Contents', '" }'));

ERROR 1873 (HY000): Lambda API returned error: Missing designated IAM role (aws_default_lambda_role)