2.3.7. 使用 Ruby AWS SDK 访问 Ceph 对象网关
您可以使用 Ruby 编程语言以及 aws-sdk
gem 用于 S3
访问。在用于通过 Ruby AWS::SDK
访问 Ceph 对象网关服务器的节点上执行下方所述的步骤。
先决条件
- Ceph 对象网关用户级访问权限.
- 访问 Ceph 对象网关的 root 级别访问节点。
- 互联网访问。
流程
安装
ruby
软件包:[root@dev ~]# yum install ruby
注意以上命令将安装
ruby
,它是rubygems
和ruby-libs
等基本依赖项。如果某种方式命令没有安装所有依赖项,请单独安装它们。安装
aws-sdk
Ruby 软件包:[root@dev ~]# gem install aws-sdk
创建项目目录:
[user@dev ~]$ mkdir ruby_aws_sdk [user@dev ~]$ cd ruby_aws_sdk
创建连接文件:
[user@ruby_aws_sdk]$ vim conn.rb
将以下内容粘贴到
conn.rb
文件中:语法
#!/usr/bin/env ruby require 'aws-sdk' require 'resolv-replace' Aws.config.update( endpoint: 'http://FQDN_OF_GATEWAY_NODE:8080', access_key_id: 'MY_ACCESS_KEY', secret_access_key: 'MY_SECRET_KEY', force_path_style: true, region: 'us-east-1' )
将
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-sdk' require 'resolv-replace' Aws.config.update( endpoint: 'http://testclient.englab.pnq.redhat.com:8080', access_key_id: '98J4R9P22P5CDL65HKP8', secret_access_key: '6C+jcaP0dp0+FZfrRNgyGA9EzRy25pURldwje049', force_path_style: true, region: 'us-east-1' )
保存文件并退出编辑器。
使文件可执行:
[user@ruby_aws_sdk]$ chmod +x conn.rb
运行该文件:
[user@ruby_aws_sdk]$ ./conn.rb | echo $?
如果您在文件中正确提供了值,命令的输出将是
0
。创建存储桶的新文件:
[user@ruby_aws_sdk]$ vim create_bucket.rb
将以下内容粘贴到文件中:
语法
#!/usr/bin/env ruby load 'conn.rb' s3_client = Aws::S3::Client.new s3_client.create_bucket(bucket: 'my-new-bucket2')
保存文件并退出编辑器。
使文件可执行:
[user@ruby_aws_sdk]$ chmod +x create_bucket.rb
运行该文件:
[user@ruby_aws_sdk]$ ./create_bucket.rb
如果命令的输出为
true
,这表示 bucketmy-new-bucket2
已创建成功。创建用于列出所拥有的存储桶的新文件:
[user@ruby_aws_sdk]$ vim list_owned_buckets.rb
将以下内容粘贴到文件中:
#!/usr/bin/env ruby load 'conn.rb' s3_client = Aws::S3::Client.new s3_client.list_buckets.buckets.each do |bucket| puts "{bucket.name}\t{bucket.creation_date}" end
保存文件并退出编辑器。
使文件可执行:
[user@ruby_aws_sdk]$ chmod +x list_owned_buckets.rb
运行该文件:
[user@ruby_aws_sdk]$ ./list_owned_buckets.rb
输出应类似如下:
my-new-bucket2 2022-04-21 10:33:19 UTC
创建用于创建对象的新文件:
[user@ruby_aws_sdk]$ vim create_object.rb
将以下内容粘贴到文件中:
#!/usr/bin/env ruby load 'conn.rb' s3_client = Aws::S3::Client.new s3_client.put_object( key: 'hello.txt', body: 'Hello World!', bucket: 'my-new-bucket2', content_type: 'text/plain' )
保存文件并退出编辑器。
使文件可执行:
[user@ruby_aws_sdk]$ chmod +x create_object.rb
运行该文件:
[user@ruby_aws_sdk]$ ./create_object.rb
这将创建一个含有字符串
Hello World!
的文件hello.txt
。创建用于列出存储桶内容的新文件:
[user@ruby_aws_sdk]$ vim list_bucket_content.rb
将以下内容粘贴到文件中:
#!/usr/bin/env ruby load 'conn.rb' s3_client = Aws::S3::Client.new s3_client.list_objects(bucket: 'my-new-bucket2').contents.each do |object| puts "{object.key}\t{object.size}" end
保存文件并退出编辑器。
使文件成为可执行文件。
[user@ruby_aws_sdk]$ chmod +x list_bucket_content.rb
运行该文件:
[user@ruby_aws_sdk]$ ./list_bucket_content.rb
输出将类似如下:
hello.txt 12 Fri, 22 Apr 2022 15:54:52 GMT
创建用于删除空存储桶的新文件:
[user@ruby_aws_sdk]$ vim del_empty_bucket.rb
将以下内容粘贴到文件中:
#!/usr/bin/env ruby load 'conn.rb' s3_client = Aws::S3::Client.new s3_client.delete_bucket(bucket: 'my-new-bucket2')
保存文件并退出编辑器。
使文件可执行:
[user@ruby_aws_sdk]$ chmod +x del_empty_bucket.rb
运行该文件:
[user@ruby_aws_sdk]$ ./del_empty_bucket.rb | echo $?
如果删除了存储桶,命令会返回
0
作为输出。注意编辑
create_bucket.rb
文件以创建空存储桶,例如:my-new-bucket6
、my-new-bucket7
。接下来,在尝试删除空存储桶前相应地编辑上述del_empty_bucket.rb
文件。创建用于删除非空存储桶的新文件:
[user@ruby_aws_sdk]$ vim del_non_empty_bucket.rb
将以下内容粘贴到文件中:
#!/usr/bin/env ruby load 'conn.rb' s3_client = Aws::S3::Client.new Aws::S3::Bucket.new('my-new-bucket2', client: s3_client).clear! s3_client.delete_bucket(bucket: 'my-new-bucket2')
保存文件并退出编辑器。
使文件可执行:
[user@ruby_aws_sdk]$ chmod +x del_non_empty_bucket.rb
运行该文件:
[user@ruby_aws_sdk]$ ./del_non_empty_bucket.rb | echo $?
如果删除了存储桶,命令会返回
0
作为输出。创建用于删除对象的新文件:
[user@ruby_aws_sdk]$ vim delete_object.rb
将以下内容粘贴到文件中:
#!/usr/bin/env ruby load 'conn.rb' s3_client = Aws::S3::Client.new s3_client.delete_object(key: 'hello.txt', bucket: 'my-new-bucket2')
保存文件并退出编辑器。
使文件可执行:
[user@ruby_aws_sdk]$ chmod +x delete_object.rb
运行该文件:
[user@ruby_aws_sdk]$ ./delete_object.rb
这将删除对象
hello.txt
。