我在AWS中创建了一些Lambda,以及一个Aurora RDS(公开发布)。我无法执行lambdas(通过call mysql.lambda_async
)。
当我尝试时,我收到错误ERROR 1873: 1873: Lambda API returned error: Missing Credentials: Cannot instantiate Lambda Client
。
我尝试附加一个名为aurora-lambdas的IAM角色,在那里我设置了对RDS和Lambdas的完全访问权限以及这些服务之间的可信关系,但在尝试了各种配置后,我仍然遇到了问题。
有人是否已成功从RDS执行AWS Lambda?谢谢:))
答案 0 :(得分:5)
参数键aws_default_lambda_role
需要具有角色的完整ARN值路径,该路径都附加到Aurora群集并具有与之关联的正确lambda访问策略。
首先,启用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服务的群集级参数键设置为关联IAM角色的ARN。 使用上面给出的网络链接3 中的第10步。第10步介绍了aws_default_s3_role
,但我们只需要查找aws_default_lambda_role
。
5. 转到RDS Dashboard
6。点击参数组
7。点击创建参数组
8。选择参数组系列 aurora5.6
9。选择输入 DB Cluster Parameter Group
10。在文本框中输入所需的配置群组名称为someName56
11。创建,然后编辑参数
12。查找参数名称aws_default_lambda_role
并输入上面步骤4中创建的IAM角色的ARN。
简要说明
重要的是要记住,由于涉及抽象层,IAM用户,角色和策略之间存在分离。策略可以附加到用户或角色。但不能与EC2或RDS等运行实例关联。要附加对本地计算机上编写的代码的S3或Lambda访问权限,必须使用附带相应策略的IAM用户。要附加对Amazon内部服务的访问权限,必须分配IAM角色,例如,允许RDS Aurora Cluster DB使用CALL mysql.lambda_async
过程触发Lambda。 RDS实例具有触发lambda函数的作用,因为它是AWS的内部函数,因此必须为其分配IAM角色。除非需要更多访问权限,否则无需直接访问RDS虚拟机即可更改配置文件。因此,需要更改参数组值,以便在DB软件中进行某些配置更改,而无需直接连接到虚拟机。它的设计比使用SSH或直接连接软件的传统方法更容易。这也允许更大的问责制,因为抽象层,即AWS控制台可以跟踪用户活动,以便用户/服务提交Lambda触发器的操作以帮助查明问题。
注意强>
我不是专家,所以请更正我的解释,因为我没有完全掌握AWS,所以我可能在我的步骤或解释中犯了错误。但这就是我为解决我的特定问题所做的工作。
编辑:(发布后几分钟)
我的具体问题:
当我在SQL中直接调用时,它给了我以下错误输出,这导致我按照我概述的步骤来解决问题。
<强>的MySQL&GT; 强>
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)
答案 1 :(得分:1)
在进行了艰苦的调查后,我们将aws_default_lambda_role
密钥与IAM角色ARN作为值添加到RDS数据库群集参数组配置文件中。完成后,现在具有正确权限的角色RDS可以成功调用mysql lambda API。
答案 2 :(得分:0)
我有一个类似的问题。正确设置所有内容后,我仍然得到Error Code: 63996. Lambda API returned error: Missing Credentials: Cannot instantiate Lambda Client
。由于某种原因未正确选择参数。只需重新启动实例即可解决该问题。
答案 3 :(得分:0)
我设置:“ aws_default_lambda_role”, 'arn:aws:iam :: 29XXXXXXX82:role / RDStoLAMDA'
**RDStoLAMDA :**
AmazonRDSDirectoryServiceAccess
RDSCloudHsmAuthorizationRole
Custom one - "lambda:InvokeFunction",
Aurora版本:'2.03.2',并且在数据库端启用了IAM身份验证。
DROP PROCEDURE IF EXISTS SP_Submit_Attr_Status;
DELIMITER ;;
CREATE PROCEDURE SP_testing_Attr_Status (IN user_id VARCHAR(255), IN attr_id TEXT, IN action_name TEXT) LANGUAGE SQL
BEGIN
CALL mysql.lambda_async('arn:aws:lambda:ap-zzzz-1:*********182:function:dsg-aws-backend-customerWebhook',
'{"action": "SUBMIT_**_ATTR", "attrId": ****5, "actionBy": 12***5 }'
);
END
;;
DELIMITER ;
致电SP_Submit_Attr_Status(“ ***”,“ ** rId”,“ ** nBy”);
错误代码:63996。Lambda API返回错误:缺少凭据: 无法实例化Lambda客户端
答案 4 :(得分:0)
最后,它工作正常。只错过了一步。
AWS控制台> RDS>选择数据库集群>滚动“管理IAM角色”
添加与您添加的相同的IAM角色:aws_default_lambda_role。
要允许Aurora MySQL数据库集群中的数据库用户调用Lambda函数,请将您在创建IAM角色以允许Amazon Aurora访问AWS服务中创建的角色与数据库集群相关联。有关将IAM角色与数据库集群关联的信息,请参阅将IAM角色与Amazon Aurora MySQL数据库集群关联。
答案 5 :(得分:0)
请在集群角色中添加角色arn
步骤
选择数据库。
选择要与 IAM 角色关联的 Aurora 数据库集群的名称以显示其详细信息。
在连接和安全选项卡上, 在管理 IAM 角色部分, 在将 IAM 角色添加到此集群下选择要添加的角色。