#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, необходимо отредактировать документ политики очереди, включив в него соответствующие разрешения.
Альтернативой использованию EC2 для обработки сообщений является запуск функции AWS Lambda, которая может обработать сообщение. Это может обойтись гораздо дешевле, и он может обрабатывать сообщения сразу после их размещения в корзине S3.