监听 AWS S3 中的对象更改(AWS SDK)

Lee*_*fin 5 ruby amazon-s3 amazon-web-services aws-sdk

在AWS S3中,我有一个名为 的存储桶'my-bucket',在下面my-bucket我有以下结构:

my-bucket/
    customers/
         products/
              - data1.txt
              - data2.txt
Run Code Online (Sandbox Code Playgroud)

使用AWS Ruby SDK,我可以通过ruby代码列出下面的所有项目my-bucket

require 'aws-sdk'

s3 = Aws::S3::Resource.new(region: 'us-west-2')

bucket = s3.bucket('my-bucket')

# Show only the first 50 items
bucket.objects.limit(50).each do |item|
  puts "Name:  #{item.key}"
end
Run Code Online (Sandbox Code Playgroud)

这很好,我想知道是否可以让侦听器侦听使用 AWS Ruby SDK 上传到的任何新文件对象my-bucket/customers/products/?如果可以的话,该怎么做呢?

joh*_*hni 3

不能直接用代码来完成。但是,您可以做的是在SQS队列上有一个侦听器(您可以使用代码完成)并在其中创建一个事件S3以便在存储桶中完成的每个更改时将消息推送到队列。

如需SQS文档,请点击此处(非常简单)。

要配置事件,您可以点击此详细链接,对于较短的版本,请执行以下操作(SQS首先创建队列):

  1. 转到您的存储桶(通过AWS 控制台)。
  2. 单击“属性”选项卡(位于左上角)。
  3. 展开活动
  4. 单击添加通知
  5. 选择您想收听的活动类型。
  6. 可选,如果您希望事件应用于具有特定前缀的对象,请指定前缀。
  7. 可选,,后缀相同。
  8. 将其发送到SQS 队列
  9. 将队列的ARN.

现在,您需要做的Ruby就是侦听(使用轮询机制)队列上的新消息。这些消息将JSON在某些模式中具有某种格式,请使用它。

那应该可以解决你的问题。