3.2.6. Ruby AWS SDK を使用した Ceph Object Gateway へのアクセス
Ruby プログラミング言語は、S3 アクセスに aws-sdk gem と共に使用できます。Ruby AWS::SDK を使用して Ceph Object Gateway サーバーにアクセスするために使用されるノードで以下の手順を実行します。
前提条件
- Ceph Object Gateway へのユーザーレベルのアクセス。
- Ceph Object Gateway にアクセスするノードへのルートレベルのアクセス。
- インターネットアクセス。
手順
rubyパッケージをインストールします。[root@dev ~]# yum install ruby注記上記のコマンドは
rubyと、rubygems、ruby-libsなどの基本的な依存関係をインストールします。コマンドによってすべての依存関係がインストールされていない場合は、個別にインストールします。Ruby パッケージ
aws-sdkをインストールします。[root@dev ~]# gem install aws-sdkプロジェクトディレクトリーを作成します。
[user@dev ~]$ mkdir ruby_aws_sdk [user@dev ~]$ cd ruby_aws_sdkコネクションファイルを作成します。
[user@dev ~]$ vim conn.rbconn.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 Object Gateway ノードの FQDN に置き換えます。MY_ACCESS_KEYとMY_SECRET_KEYは、Red Hat Ceph Storage Object Gateway 設定および管理ガイド に記載されているように、S3アクセス用のradosgwユーザーの作成時に生成されたaccess_keyとsecret_keyに置き換えます。例
#!/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@dev ~]$ chmod +x conn.rbコマンドを実行します。
[user@dev ~]$ ./conn.rb | echo $?ファイルに正しく値を指定した場合は、コマンドの出力は
0になります。バケットを作成するための新規ファイルを作成します。
[user@dev ~]$ 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@dev ~]$ chmod +x create_bucket.rbコマンドを実行します。
[user@dev ~]$ ./create_bucket.rbコマンドの出力が
trueの場合は、バケットmy-new-bucket2が正常に作成されていることを意味します。所有されるバケットをリスト表示するために新規ファイルを作成します。
[user@dev ~]$ 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@dev ~]$ chmod +x list_owned_buckets.rbコマンドを実行します。
[user@dev ~]$ ./list_owned_buckets.rb出力は以下のようになります。
my-new-bucket2 2020-01-21 10:33:19 UTCオブジェクトを作成するための新規ファイルを作成します。
[user@dev ~]$ 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@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' 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@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' s3_client = Aws::S3::Client.new s3_client.delete_bucket(bucket: 'my-new-bucket2')ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
[user@dev ~]$ chmod +x del_empty_bucket.rbコマンドを実行します。
[user@dev ~]$ ./del_empty_bucket.rb | echo $?バケットが正常に削除されると、コマンドは
0を出力として返します。注記create_bucket.rbファイルを編集し、空のバケットを作成します (例:my-new-bucket6、my-new-bucket7)。次に、空のバケットの削除を試みる前に、上記のdel_empty_bucket.rbファイルを適宜編集します。空でないバケットを削除する新規ファイルを作成します。
[user@dev ~]$ 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@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' s3_client = Aws::S3::Client.new s3_client.delete_object(key: 'hello.txt', bucket: 'my-new-bucket2')ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
[user@dev ~]$ chmod +x delete_object.rbコマンドを実行します。
[user@dev ~]$ ./delete_object.rbこれにより、オブジェクト
hello.txtが削除されます。