Я пытаюсь связать события Amazon S3 с сервисом SQS. В целях развития я использую localstack
образ докера, но он должен быть совместим с AWS, поэтому я думаю, что проблема должна быть где-то в коде.
Есть 3 связанные услуги:
$bucket = $this->s3Client->createBucket(['Bucket' => 'my-bucket']);
$topic = $this->snsClient->createTopic(['Name' => 'my-topic']);
$queue = $this->sqsClient->createQueue(['QueueName' => 'my-queue']);
Затем я подписываюсь на очередь SQS в теме SNS:
$this->snsClient->subscribe(['TopicArn' => $topic['TopicArn'], 'Protocol' => 'sqs', 'Endpoint' => $sqsArn]);
И, наконец, я пытаюсь настроить S3 Bucket для отправки уведомлений о событиях:
$this->s3Client->putBucketNotification([
'Bucket' => 'my-bucket', // REQUIRED
'NotificationConfiguration' => [ // REQUIRED
'TopicConfigurations' => [
'Events' => [
's3:ObjectCreated:*',
's3:ObjectRemoved:*',
],
'Id' => 'topic-id',
'TopicArn' => $topic['TopicArn'],
'QueueArn' => $sqsArn,
],
"QueueConfigurations" =>[
"Id" => "S3EventsSQSNotification",
"QueueArn" => $sqsArn,
'Events' => [
's3:ObjectCreated:*',
's3:ObjectRemoved:*',
],
]
],
]);
Ответ на этот запрос возвращает статус 200, но похоже, что в конфигурации ничего не изменилось. Когда я звоню get
ответ на запрос пуст, как и при вводе URL-адреса конфигурации (я полагаю, что изменения должны быть видны здесь) http://127.0.0.1:4572/my-bucket?notification
<NotificationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"></NotificationConfiguration>
Когда я пытаюсь опубликовать пользовательское сообщение, оно работает нормально, поэтому проблема заключается в подключении S3 (и отсутствующей конфигурации).
Задача ещё не решена.
Других решений пока нет …