【问题标题】:S3 Sends Message to SQS and EC2 Script Checks If Message ExistsS3 向 SQS 发送消息,EC2 脚本检查消息是否存在
【发布时间】:2021-01-05 07:41:00
【问题描述】:

我有一个 S3 存储桶,当新项目添加到存储桶时,它会向我的 SQS 队列发送一条消息。然后我的计划是在我的 EC2 服务器上使用 cron 每 10 分钟运行一次脚本,该脚本将检查 SQS 队列中是否存在消息。

我已授予 S3 存储桶将消息发送到我的 SQS 队列的权限,但现在我正在努力如何允许我的 EC2 由于权限而从 SQS 队列中读取消息。

以下是我的政策,我的问题是如何同时允许 IAM 角色和我的 S3 存储桶权限来读取/发送消息。

{
  "Version": "2012-10-17",
  "Id": "arn:aws:sqs:eu-west-1:446971925991:S3-Probe-Data-Imported/SQSDefaultPolicy",
  "Statement": [
    {
      "Sid": "example-statement-ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "SQS:*",
      "Resource": "arn:aws:sqs:eu-west-1:446971925991:S3-Probe-Data-Imported",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:s3:*:*:probe-request-backups"
        }
      }
    }
  ]
}

我已将 AmazonSQSReadOnlyAccess 策略附加到我的 EC2 服务器将用于从 SQS 队列读取消息的 IAM 角色。

我认为这是可能的,但如果不是,一旦将新项目添加到我的 S3 存储桶中,我如何触发 EC2 脚本(不是 lambda)。

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-sqs


    【解决方案1】:

    与 EC2 实例关联的 IAM 角色需要包含不仅仅是只读权限,因为一旦处理了消息,程序将需要再次调用 SQS 以删除该消息。 (在处理消息时,它处于“不可见”状态。如果程序在特定时间段内没有删除该消息,SQS 将假定该程序失败,该消息将重新出现在队列中。)因此,它还需要sqs:DeleteMessage 权限。

    要允许 S3 存储桶向 SQS 队列发送消息,必须编辑队列的策略文档以包含适当的权限。

    见:Walkthrough: Configure a bucket for notifications (SNS topic or SQS queue) - Amazon Simple Storage Service

    使用 EC2 处理消息的替代方法是触发可以处理消息的 AWS Lambda 函数。这可以降低成本,并且可以在将消息放入 S3 存储桶后立即处理它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-12
      • 2015-05-03
      • 2023-03-23
      • 2020-02-18
      • 1970-01-01
      • 2013-01-02
      • 2014-11-23
      • 2015-04-07
      相关资源
      最近更新 更多