在AWS Lambda中调用Javascript IoT客户端SDK的AttachPolicy方法会阻塞,导致Lambda超时,而没有任何错误/异常/日志。

0

【以下的问题经过翻译处理】 你好,

问题简述:

当我在AWS Lambda内使用Javascript v3 AWS SDK IoT Client调用AttachPolicy时,该调用会阻塞,并导致lambda超时,没有任何错误/异常/日志。

我很难确定为什么这个调用没有成功并被阻塞,因此我在这里提问。

详细信息:

我有一个lambda函数,我想要使用Javascript v3 AWS SDK IoT Client。我想要向IoT核心发出的请求是AttachPolicy,以便将策略附加到Thing的证书(证书由ARN标识)。

基本上,我在代码中有以下代码(摘录):

1)创建IoT客户端:

new IoTClient({ region: process.env.REGION });

我没有提供任何凭据,因为我读到它们是从Lambda的执行角色中检索的:

https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/loading-node-credentials-lambda.html

2)创建AttachPolicyCommand:

const attachPolicyCommand = new AttachPolicyCommand({ policyName: <NAME_OF_POLICY>, target: <CERTIFICATE_ARN> });
console.log(`Sending attach policy request to attach '${policyName}' to '${targetArn}'.`)

根据上面的日志,我再次检查并确保策略名称和证书ARN是正确的。

3)AttachPolicy请求-这是问题出现的地方

const attachPolicyResponse = await this.iotClient.send(attachPolicyCommand);
... // 调用上述代码后无法到达的代码 ...
... // 经过配置的lambda超时后,函数执行停止而不执行任何其他代码行

我也尝试将上述调用包装在try/catch/finally块中,但是没有任何区别。

我注意到并认为导致问题的一个原因是,lambda 的执行角色没有访问 AttachPolicy 操作的权限。 但当我解决了这个问题并添加了所需的策略后,问题依然存在。这是我添加到 lambda 执行角色以允许 AttachPolicy 的策略: { "Version": "2012-10-17", "Statement": [ { "Action": "iot:AttachPolicy", "Resource": "*", "Effect": "Allow" } ] } 还有一点是,lambda 的超时配置似乎没有什么区别--我试着设置为 5 秒和 2 分钟,结果阻塞时间分别为 5 秒和 2 分钟。 如果您能就问题所在提供一些见解,我将不胜感激:))。

profile picture
专家
已提问 5 个月前3 查看次数
1 回答
0

【以下的回答经过翻译处理】 你好,Stiliyan,

导致问题的可能原因是Lambda运行在缺少对Internet访问权限的VPC中。要解决这个问题,你可以使用NAT网关来使Lambda函数获得公共的Internet访问权限。为此,你需要在VPC中添加一个NAT网关,并配置路由表将Lambda子网的出站消息路由到NAT网关: https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html

IoT Core的VPC终端节点仅支持数据平面,并不能用于你的用例目的:https://docs.aws.amazon.com/iot/latest/developerguide/IoTCore-VPC.html

祝好,Andrei

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则