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-s3Ruby 软件包:[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。