【问题标题】:AWS Lambda: no items in Destination listAWS Lambda:目标列表中没有项目
【发布时间】:2022-12-20 09:12:04
【问题描述】:

我创建了一个 Lambda 函数,它从一个 SQS 队列中获取数据,执行一些修改并将输出数据放入另一个 SQS 队列。但是在尝试指定目的地时,我得到了 SQS 队列的空列表:

请你帮助我好吗?

提供 Lambda 函数的权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sqs:SendMessage",
                "sqs:DeleteMessage",
                "sqs:ChangeMessageVisibility",
                "sqs:ReceiveMessage",
                "sqs:TagQueue",
                "sqs:UntagQueue",
                "sqs:PurgeQueue"
            ],
            "Resource": "arn:aws:sqs:eu-west-1:myaccountid:my-queue.fifo"
        }
    ]
}

尝试了 SQS 队列的两种访问策略配置。使用专有网络:

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__owner_statement",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "SQS:*",
      "Resource": "arn:aws:sqs:eu-west-1:myacy-queuecountid:m.fifo",
      "Condition": {
        "StringEquals": {
          "aws:SourceVpc": "my-vpc"
        }
      }
    }
  ]
}

和主要账户:

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__owner_statement",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "SQS:*",
      "Resource": "arn:aws:sqs:eu-west-1:myaccountid:my-queue.fifo",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalAccount": [
            "myaccountid"
          ]
        }
      }
    }
  ]
}

(我的账号,我的队列,我的vpc是有效值的掩码)

但结果是一样的——可用 SQS 队列列表为空

【问题讨论】:

  • 所以你有一个触发 lambda 的队列和另一个从 lamda 获取处理后数据的队列?第二个队列是否存在/是否已经创建?您是否尝试提供 sqs:* 以查看是否有帮助?也许您需要列出它们的可能性?
  • 是的,没错——第一个队列是一个触发器,第二个队列应该是一个目的地。是的,存在第二个队列。我刚刚检查了使用“sqs:*”更改 Lambda 角色策略,但不幸的是,问题仍然存在

标签: amazon-web-services aws-lambda amazon-sqs


【解决方案1】:

Destinations 仅适用于 lambda 的 asynchronous invocations。 SQS 调用 lambda synchronously,因此 Destinations 不适用。这不是它没有出现在您的列表中的原因,但由于 Destinations 和 SQS 调用 lambda,您将永远无法首先使用。

【讨论】:

    【解决方案2】:

    AWS Asynchronous invocation

    您还可以将 Lambda 配置为发送一个调用记录到另一个服务。 Lambda 支持以下异步调用目标。

    • 亚马逊 SQS – A标准SQS 队列。
    • Amazon SNS – SNS 主题。
    • AWS Lambda – Lambda 函数。
    • Amazon EventBridge – EventBridge 事件总线。

    调用记录包含有关 JSON 格式的请求和响应的详细信息.

    强烈强调标准,你有先进先出。

    使用 SDK 将消息发送到队列可能比使用目标将调用记录发送到队列更好。

    【讨论】:

      猜你喜欢
      • 2021-06-19
      • 1970-01-01
      • 2020-04-27
      • 2022-09-23
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      • 2017-09-03
      相关资源
      最近更新 更多