当前位置: 首页 > 知识库问答 >
问题:

AWS SQS Lambda,在Lambda上执行作业后执行"DeleteMessage"时出错

贾成天
2023-03-14

我正在使用AWS/AWS sdk php“^3.185”实现AWS SQS作业队列。正确处理作业(拉作业-

PHP工匠队列:工作

但在Lambda环境中,使用相同的凭证,作业完成后不能删除。简而言之,拉作业-

“errorType”:“Aws\Sqs\Exception\SQSExException”,

“errorMessage”:“在上执行”DeleteMessage“时出错”https://sqs.ap-northeast-1.amazonaws.com/xxxxxxxxxxx/SQS-TestJob“AWS HTTP错误:客户端错误:POSThttps://sqs.ap-northeast-1.amazonaws.com/xxxxxxxxxxx/SQS-TestJob导致403禁止的响应:\n

应用程序引导时,我应该续订令牌吗?

谢谢,


共有2个答案

舒嘉德
2023-03-14

虽然您尚未发布代码,但我怀疑,尽管您认为使用的是相同的凭据,但事实并非如此。为了让lambda运行,您必须为其分配IAM角色。当您的代码尝试使用底层AWS例程时,它将首先自动搜索以查看是否可以找到凭证。lambda服务可以自动为运行的lambda代码提供临时访问密钥和秘密访问密钥,可用于访问分配给lambda的IAM角色允许访问的AWS服务。实际上,出于安全原因,这是lambda中的首选方法,因此您不需要硬编码凭据。

简而言之,我将验证分配给lambda函数的IAM角色是否与原始凭证的IAM用户的权限匹配。

巴英韶
2023-03-14

如果Amazon SQS正在触发AWS Lambda函数,则该函数不应检索或删除SQS队列中的消息。

相反,Lambda函数将通过事件变量提供消息,这取代了从SQS队列检索消息的需要。

当Lambda函数成功完成且无错误时,Lambda服务(运行该函数)将自动从SQS队列中删除消息。如果函数未成功完成,消息将不会被删除,这将导致消息在不可见期过后重新出现在队列上。

因此,如果SQS触发Lambda函数,那么Lambda函数实际上不需要任何权限来访问Amazon SQS队列。

相反,如果AWS Lambda函数是以另一种方式触发的(例如按计划每5分钟触发一次),则Lambda函数将负责调用ReceiveMessage()DeleteMessage()

该函数需要一个具有调用这两个函数的权限的IAM角色。

调用DeleteMessage()时,函数将传递在ReceiveMessage()调用期间提供的ReceiptHandle

 类似资料:
  • 问题内容: 我有一个http服务器(使用启动),我想做一些操作。 我该怎么做(在Linux上)?在ctrl-C的情况下可以进行那些操作吗? 我不熟悉Unix信号,因此答案可能很简单。 问题答案: 您可以使用信号包订购TERM和INT信号。但是请注意,只有在明确终止进程时才发送这些信号。正常退出(由流程本身启动)不涉及任何信号。我认为,对于正常退出,只需在主例程中执行某些操作即可(该例程应该生成工作

  • 我基本上需要做同样的事情,但在一个自动化的sql作业。是否有方法运行并在sql作业中执行输出? 步骤1-运行 步骤2-执行步骤1的输出 末端闭合弯曲;释放CurCreate; 如果OBJECT_ID('tempdb..#tmplogins')不为空,则删除表#tmplogins

  • 我在Openshift环境中运行SCDF。我正在安排一个Spring批处理作业每5分钟运行一次。有时作业可能运行超过5分钟。在这种情况下,是否可以保留下一个计划的作业执行,直到上一个完成其执行? 我们不想改变作业执行的频率和间隔。 谢了。

  • 我已经写了以下Hello World Lambda,我正在通过AWS Eclipse工具包上传到AWS上。 我在执行上述代码时出现以下错误。知道我做错了什么吗?顺便说一句,有这个处理程序的Maven项目没有任何其他类,唯一的依赖项是aws lambda java core 1.1.0版。

  • 问题内容: 我目前正在开发一个涉及在Rails服务器上同步联系人的应用程序。我正在使用Redis服务器和sidekiq在后台执行联系人同步。我的数据库是mongodb,我正在使用Mongoid gem作为ORM。工作流程如下: 电话上的联系人通过应用程序传递到Rails服务器,然后在Rails服务器上,它在Redis服务器中排队。 现在,cron作业会触发连接到Redis的sidekiq并完成作业

  • null 所以你可以不受任何限制地做背景工作。尽管由于这些原因您应该使用服务,但链接。 这是做背景工作的另一种方式(当然不是更好,但仍然是一种方式)吗?我错了吗?