use*_*854 15 amazon-sqs amazon-web-services aws-lambda
我有一个 SQS 队列,我想在消息到达队列时触发 lambda 函数。我已经编写了 lambda 函数,当我单击“测试”按钮时它可以成功运行。当我转到 SQS 并尝试将其配置为 lambda 触发器时,我看到以下错误消息。
我使用相同的用户和角色创建了 SQS 队列和 lambda 函数,并且 lambda 函数对同一角色具有执行权限。
我还添加了 SQS receiveMessage 权限,但它似乎没有什么区别,除非我在设置时做错了什么。
什么可能导致问题?
谢谢你的帮助
ami*_*ttn 20
或者可能sqs:*
只是为了测试它而给它一个上帝模式。
如果这可能在以后有效,那么您可以只使用特定的方法。附加了 lambda 角色的策略,如果您需要从这个 lambda 调用另一个 lambda,您可能必须将 account_number 更改为您的帐户
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:eu-west-2:account_number:function:*"
},
{
"Sid": "",
"Effect": "Allow",
"Action": [
"logs:PutLogEvents",
"logs:CreateLogStream",
"logs:CreateLogGroup"
],
"Resource": "*"
},
{
"Sid": "",
"Effect": "Allow",
"Action": [
"sqs:*"
],
"Resource": "*"
}
]
Run Code Online (Sandbox Code Playgroud)
}
30t*_*thh 18
您需要将以下权限附加到该角色,您的 lambda 假定
如果您使用 Terraform:
data "aws_iam_policy_document" "YOUR_DOCUMENT" {
statement {
sid = "some_id"
actions = [
"sqs:ReceiveMessage",
"sqs:DeleteMessage",
"sqs:GetQueueAttributes"
]
resources = [
aws_sqs_queue.YOUR_QUEUE.arn
]
}
}
resource "aws_iam_policy" "YOUR_POLICY" {
name = "your_policy"
policy = data.aws_iam_policy_document.YOUR_DOCUMENT.json
}
resource "aws_iam_role_policy_attachment" "POLICY_ATTACHMENT" {
role = aws_iam_role.YOUR_LAMBDA_ROLE.name
policy_arn = aws_iam_policy.YOUR_POLICY.arn
}
resource "aws_lambda_function" "YOUR_LAMBDA" {
....
role = aws_iam_role.YOUR_LAMBDA_ROLE.arn
....
}
Run Code Online (Sandbox Code Playgroud)
小智 7
虽然现在可能已经实现了这个解决方案..但是由于在顶部向我建议了这个线程..我将为其他用户发布答案:
即使在向用户授予 SQS 完全访问权限后,我也遇到了同样的问题。问题在于 lambda 执行角色。创建 lambda 时,需要为其分配一个 lambda 执行角色。大多数用户在创建 lambda 时分配自动生成的执行角色。该执行角色没有 SQS 的权限。
所以打开 lambda >> 单击 Permissions 选项卡 >> 在顶部编辑执行角色 >> 分配 SQS 权限 >> 繁荣。
归档时间: |
|
查看次数: |
20721 次 |
最近记录: |