【以下的问题经过翻译处理】 你好,
问题简述:
当我在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 分钟。
如果您能就问题所在提供一些见解,我将不胜感激:))。