S3 отправляет сообщение в SQS, а сценарий EC2 проверяет, существует ли сообщение

#amazon-web-services #amazon-s3 #amazon-sqs

#amazon-web-services #amazon-s3 #amazon-sqs

Вопрос:

У меня есть корзина S3, которая отправляет сообщение в мою очередь SQS, когда в корзину добавлен новый элемент. Мой план состоял в том, чтобы затем создать скрипт на моем сервере EC2, который запускался бы каждые 10 минут с использованием cron, этот скрипт проверял бы, существует ли сообщение в очереди SQS.

Я дал разрешение корзине S3 отправлять сообщения в мою очередь SQS, но теперь я пытаюсь разрешить моему EC2 читать сообщения из очереди SQS из-за разрешений.

Ниже приведена моя политика, мой вопрос заключается в том, как мне также разрешить роли IAM и моему разрешению S3 bucket для ЧТЕНИЯ / ОТПРАВКИ сообщений.

 {
  "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 политику к роли IAM, которую мой сервер EC2 будет использовать для чтения сообщений из очереди SQS.

Я предполагаю, что это возможно, но если нет, то как я могу запустить сценарий EC2 (не lambda) после добавления нового элемента в мою корзину S3.

Ответ №1:

Роль IAM, связанная с экземпляром EC2, должна включать больше, чем просто разрешения только для чтения, потому что после обработки сообщения программе потребуется снова вызвать SQS, чтобы удалить сообщение. (Во время обработки сообщения оно переводится в «невидимое» состояние. Если программа не удаляет сообщение в течение определенного периода времени, SQS предположит, что программа завершилась ошибкой, и сообщение снова появится в очереди.) Следовательно, для этого также требуются sqs:DeleteMessage разрешения.

Чтобы разрешить корзине S3 отправлять сообщение в очередь SQS, необходимо отредактировать документ политики очереди, включив в него соответствующие разрешения.

Смотрите: Пошаговое руководство: Настройте корзину для уведомлений (раздел SNS или очередь SQS) — Amazon Simple Storage Service

Альтернативой использованию EC2 для обработки сообщений является запуск функции AWS Lambda, которая может обработать сообщение. Это может обойтись гораздо дешевле, и он может обрабатывать сообщения сразу после их размещения в корзине S3.