2.3.6. 使用 Ruby AWS S3 访问 Ceph 对象网关
您可以使用 Ruby 编程语言以及 aws-s3
gem 用于 S3
访问。在用于通过 Ruby AWS::S3
访问 Ceph 对象网关服务器的节点上执行下方所述的步骤。
先决条件
- Ceph 对象网关用户级访问权限.
- 访问 Ceph 对象网关的 root 级别访问节点。
- 互联网访问。
流程
安装
ruby
软件包:[root@dev ~]# yum install ruby
注意以上命令将安装
ruby
,它是rubygems
和ruby-libs
等基本依赖项。如果某种方式命令没有安装所有依赖项,请单独安装它们。安装
aws-s3
Ruby 软件包:[root@dev ~]# gem install aws-s3
创建项目目录:
[user@dev ~]$ mkdir ruby_aws_s3 [user@dev ~]$ cd ruby_aws_s3
创建连接文件:
[user@dev ~]$ vim conn.rb
将以下内容粘贴到
conn.rb
文件中:语法
#!/usr/bin/env ruby require 'aws/s3' require 'resolv-replace' AWS::S3::Base.establish_connection!( :server => 'FQDN_OF_GATEWAY_NODE', :port => '8080', :access_key_id => 'MY_ACCESS_KEY', :secret_access_key => 'MY_SECRET_KEY' )
将
FQDN_OF_GATEWAY_NODE
替换为 Ceph 对象网关节点的 FQDN。将MY_ACCESS_KEY
和MY_SECRET_KEY
替换为您在为 S3 创建radosgw
用户进行S3
访问时生成的access_key
和secret_key
,如 Red Hat Ceph Storage Object Gateway Configuration and Administration Guide 中所述。示例
#!/usr/bin/env ruby require 'aws/s3' require 'resolv-replace' AWS::S3::Base.establish_connection!( :server => 'testclient.englab.pnq.redhat.com', :port => '8080', :access_key_id => '98J4R9P22P5CDL65HKP8', :secret_access_key => '6C+jcaP0dp0+FZfrRNgyGA9EzRy25pURldwje049' )
保存文件并退出编辑器。
使文件可执行:
[user@dev ~]$ chmod +x conn.rb
运行该文件:
[user@dev ~]$ ./conn.rb | echo $?
如果您在文件中正确提供了值,命令的输出将是
0
。创建存储桶的新文件:
[user@dev ~]$ vim create_bucket.rb
将以下内容粘贴到文件中:
#!/usr/bin/env ruby load 'conn.rb' AWS::S3::Bucket.create('my-new-bucket1')
保存文件并退出编辑器。
使文件可执行:
[user@dev ~]$ chmod +x create_bucket.rb
运行该文件:
[user@dev ~]$ ./create_bucket.rb
如果命令的输出为
true
,这表示 bucketmy-new-bucket1
已创建成功。创建用于列出所拥有的存储桶的新文件:
[user@dev ~]$ vim list_owned_buckets.rb
将以下内容粘贴到文件中:
#!/usr/bin/env ruby load 'conn.rb' AWS::S3::Service.buckets.each do |bucket| puts "{bucket.name}\t{bucket.creation_date}" end
保存文件并退出编辑器。
使文件可执行:
[user@dev ~]$ chmod +x list_owned_buckets.rb
运行该文件:
[user@dev ~]$ ./list_owned_buckets.rb
输出应类似如下:
my-new-bucket1 2020-01-21 10:33:19 UTC
创建用于创建对象的新文件:
[user@dev ~]$ vim create_object.rb
将以下内容粘贴到文件中:
#!/usr/bin/env ruby load 'conn.rb' AWS::S3::S3Object.store( 'hello.txt', 'Hello World!', 'my-new-bucket1', :content_type => 'text/plain' )
保存文件并退出编辑器。
使文件可执行:
[user@dev ~]$ chmod +x create_object.rb
运行该文件:
[user@dev ~]$ ./create_object.rb
这将创建一个含有字符串
Hello World!
的文件hello.txt
。创建用于列出存储桶内容的新文件:
[user@dev ~]$ vim list_bucket_content.rb
将以下内容粘贴到文件中:
#!/usr/bin/env ruby load 'conn.rb' new_bucket = AWS::S3::Bucket.find('my-new-bucket1') new_bucket.each do |object| puts "{object.key}\t{object.about['content-length']}\t{object.about['last-modified']}" end
保存文件并退出编辑器。
使文件成为可执行文件。
[user@dev ~]$ chmod +x list_bucket_content.rb
运行该文件:
[user@dev ~]$ ./list_bucket_content.rb
输出将类似如下:
hello.txt 12 Fri, 22 Jan 2020 15:54:52 GMT
创建用于删除空存储桶的新文件:
[user@dev ~]$ vim del_empty_bucket.rb
将以下内容粘贴到文件中:
#!/usr/bin/env ruby load 'conn.rb' AWS::S3::Bucket.delete('my-new-bucket1')
保存文件并退出编辑器。
使文件可执行:
[user@dev ~]$ chmod +x del_empty_bucket.rb
运行该文件:
[user@dev ~]$ ./del_empty_bucket.rb | echo $?
如果删除了存储桶,命令会返回
0
作为输出。注意编辑
create_bucket.rb
文件,以创建空存储桶,例如:my-new-bucket4、
my-new-bucket5
。接下来,在尝试删除空存储桶前相应地编辑上述del_empty_bucket.rb
文件。创建用于删除非空存储桶的新文件:
[user@dev ~]$ vim del_non_empty_bucket.rb
将以下内容粘贴到文件中:
#!/usr/bin/env ruby load 'conn.rb' AWS::S3::Bucket.delete('my-new-bucket1', :force => true)
保存文件并退出编辑器。
使文件可执行:
[user@dev ~]$ chmod +x del_non_empty_bucket.rb
运行该文件:
[user@dev ~]$ ./del_non_empty_bucket.rb | echo $?
如果删除了存储桶,命令会返回
0
作为输出。创建用于删除对象的新文件:
[user@dev ~]$ vim delete_object.rb
将以下内容粘贴到文件中:
#!/usr/bin/env ruby load 'conn.rb' AWS::S3::S3Object.delete('hello.txt', 'my-new-bucket1')
保存文件并退出编辑器。
使文件可执行:
[user@dev ~]$ chmod +x delete_object.rb
运行该文件:
[user@dev ~]$ ./delete_object.rb
这将删除对象
hello.txt
。