2.3.7. 使用 Ruby AWS SDK 访问 Ceph 对象网关


您可以使用 Ruby 编程语言以及 aws-sdk gem 用于 S3 访问。在用于通过 Ruby AWS::SDK 访问 Ceph 对象网关服务器的节点上执行下方所述的步骤。

先决条件

  • Ceph 对象网关用户级访问权限.
  • 访问 Ceph 对象网关的 root 级别访问节点。
  • 互联网访问。

流程

  1. 安装 ruby 软件包:

    [root@dev ~]# yum install ruby
    注意

    以上命令将安装 ruby,它是 rubygemsruby-libs 等基本依赖项。如果某种方式命令没有安装所有依赖项,请单独安装它们。

  2. 安装 aws-sdk Ruby 软件包:

    [root@dev ~]# gem install aws-sdk
  3. 创建项目目录:

    [user@dev ~]$ mkdir ruby_aws_sdk
    [user@dev ~]$ cd ruby_aws_sdk
  4. 创建连接文件:

    [user@ruby_aws_sdk]$ vim conn.rb
  5. 将以下内容粘贴到 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_KEYMY_SECRET_KEY 替换为您在为 S3 创建 radosgw 用户进行 S3 访问时生成的 access_keysecret_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'
    )

    保存文件并退出编辑器。

  6. 使文件可执行:

    [user@ruby_aws_sdk]$ chmod +x conn.rb
  7. 运行该文件:

    [user@ruby_aws_sdk]$ ./conn.rb | echo $?

    如果您在文件中正确提供了值,命令的输出将是 0

  8. 创建存储桶的新文件:

    [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')

    保存文件并退出编辑器。

  9. 使文件可执行:

    [user@ruby_aws_sdk]$ chmod +x create_bucket.rb
  10. 运行该文件:

    [user@ruby_aws_sdk]$ ./create_bucket.rb

    如果命令的输出为 true,这表示 bucket my-new-bucket2 已创建成功。

  11. 创建用于列出所拥有的存储桶的新文件:

    [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

    保存文件并退出编辑器。

  12. 使文件可执行:

    [user@ruby_aws_sdk]$ chmod +x list_owned_buckets.rb
  13. 运行该文件:

    [user@ruby_aws_sdk]$ ./list_owned_buckets.rb

    输出应类似如下:

    my-new-bucket2 2022-04-21 10:33:19 UTC
  14. 创建用于创建对象的新文件:

    [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'
    )

    保存文件并退出编辑器。

  15. 使文件可执行:

    [user@ruby_aws_sdk]$ chmod +x create_object.rb
  16. 运行该文件:

    [user@ruby_aws_sdk]$ ./create_object.rb

    这将创建一个含有字符串 Hello World! 的文件 hello.txt

  17. 创建用于列出存储桶内容的新文件:

    [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

    保存文件并退出编辑器。

  18. 使文件成为可执行文件。

    [user@ruby_aws_sdk]$ chmod +x list_bucket_content.rb
  19. 运行该文件:

    [user@ruby_aws_sdk]$ ./list_bucket_content.rb

    输出将类似如下:

    hello.txt    12    Fri, 22 Apr 2022 15:54:52 GMT
  20. 创建用于删除空存储桶的新文件:

    [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')

    保存文件并退出编辑器。

  21. 使文件可执行:

    [user@ruby_aws_sdk]$ chmod +x del_empty_bucket.rb
  22. 运行该文件:

    [user@ruby_aws_sdk]$ ./del_empty_bucket.rb | echo $?

    如果删除了存储桶,命令会返回 0 作为输出。

    注意

    编辑 create_bucket.rb 文件以创建空存储桶,例如: my-new-bucket6my-new-bucket7。接下来,在尝试删除空存储桶前相应地编辑上述 del_empty_bucket.rb 文件。

  23. 创建用于删除非空存储桶的新文件:

    [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')

    保存文件并退出编辑器。

  24. 使文件可执行:

    [user@ruby_aws_sdk]$ chmod +x del_non_empty_bucket.rb
  25. 运行该文件:

    [user@ruby_aws_sdk]$ ./del_non_empty_bucket.rb | echo $?

    如果删除了存储桶,命令会返回 0 作为输出。

  26. 创建用于删除对象的新文件:

    [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')

    保存文件并退出编辑器。

  27. 使文件可执行:

    [user@ruby_aws_sdk]$ chmod +x delete_object.rb
  28. 运行该文件:

    [user@ruby_aws_sdk]$ ./delete_object.rb

    这将删除对象 hello.txt

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.