SQS错误消息:指定的队列在此WSDL版本中不存在

34次阅读
没有评论

问题描述

在使用Lambda函数时,通过serverless框架设置了一个队列URL作为环境变量。但是在这样做时,出现了以下错误消息。尽管用户已经多次检查了队列URL的格式,没有拼写错误。他也尝试了直接将实际的URL作为纯字符串传递,但没有成功。同时,用户在serverless.yml配置文件中也尝试了不同的方式,但也没有解决问题。用户在网上寻找解决方法时,发现大多数人的问题都是由于URL中的拼写错误,而这不是他的问题所在。因此,用户希望能够找到问题所在并解决它。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

检查队列是否存在

首先,我们需要确保指定的队列确实存在。用户提到已在控制台中检查队列是否存在,并从控制台复制/粘贴了URL。但是,有时候队列名称在不同的环境中可能会有差异。确保使用与您的环境一致的队列名称。

检查CloudFormation逻辑ID

在用户的评论中提到了CloudFormation逻辑ID EmailEventSourceMappingSQSEmailqueuedev,这是在serverless框架的配置文件中定义的。这个逻辑ID用于识别与SQS队列相关的资源。请确保逻辑ID与定义的资源一致,没有拼写错误。

检查队列的Region

SQS队列的URL中包含有关队列所在区域的信息。确保队列的区域与Lambda函数所在区域相同,否则将导致该错误。

使用硬编码URL

用户尝试将队列URL作为环境变量传递,但仍然遇到了问题。为了排除环境变量的问题,我们可以尝试直接在serverless.yml文件中硬编码队列的URL。在environment部分,将emailQueue的值改为硬编码的队列URL,而不是使用${ssm:/pae/${opt:stage}/SENDGRID_API_KEY~true}。这将确保直接使用已知的队列URL,而不涉及环境变量的解析。

考虑缓存问题

用户在编辑中提到,尝试在不同时间段执行相同的代码时,问题可能会解决。这可能是由于一些缓存机制或延迟导致的。尝试在操作之间加入适当的延迟,以确保队列在操作之间有足够的时间来完全创建和准备。

验证IAM权限

最后,确保Lambda函数具有适当的IAM权限来访问SQS队列。在serverless.yml文件中的iamRoleStatements部分中,确认权限声明包含了对SQS队列的必要操作权限。

以上是解决问题的一些建议,您可以根据具体情况尝试这些方法。如果问题仍然存在,请提供更多细节以供进一步分析。

正文完