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)