2.4.3. Ruby AWS::SDK Examples (aws-sdk gem ~>2)
Ruby プログラミング言語は、S3
アクセスに aws-sdk
gem と共に使用できます。Ruby AWS::SDK
を使用して Ceph Object Gateway サーバーにアクセスするために使用されるノードで以下の手順を実行します。
Ruby の設定
以下の手順を実行して Ruby を設定します。
root
としてruby
をインストールします。# yum install ruby
注記上記のコマンドは ruby と、
rubygems
やruby
-libsroot
として、aws-sdk
をインストールします。# gem install aws-sdk
コネクションの作成
プロジェクトディレクトリーを作成します。
$ mkdir ruby_aws_sdk $ cd 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>
をゲートウェイノードの FQDN に置き換えます。Red Hat Ceph Storage オブジェクトゲートウェイガイド で説明されているように、my-access-key
およびmy-secret-key
は、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' )
ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
chmod +x conn.rb
コマンドを実行します。
./conn.rb | echo $?
ファイルに正しく値を指定した場合は、コマンドの出力は
0
になります。
バケットの作成
新しいファイルを作成します。
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')
ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
chmod +x create_bucket.rb
コマンドを実行します。
./create_bucket.rb
コマンドの出力が
true
の場合は、バケットmy-new-bucket2
が正常に作成されていることを意味します。
所有するバケットの一覧表示
新しいファイルを作成します。
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
ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
chmod +x list_owned_buckets.rb
コマンドを実行します。
./list_owned_buckets.rb
出力は以下のようになります。
my-new-bucket2 2016-01-21 10:33:19 UTC
オブジェクトの作成
新しいファイルを作成します。
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' )
ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
chmod +x create_object.rb
コマンドを実行します。
./create_object.rb
これで、文字列
Hello World!
でhello.txt
が作成されます。
バケットの内容の一覧表示
新しいファイルを作成します。
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
ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
chmod +x list_bucket_content.rb
コマンドを実行します。
./list_bucket_content.rb
出力は以下のようになります。
hello.txt 12 Fri, 22 Jan 2016 15:54:52 GMT
空のバケットの削除
新しいファイルを作成します。
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')
ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
chmod +x del_empty_bucket.rb
コマンドを実行します。
./del_empty_bucket.rb | echo $?
バケットが正常に削除されると、コマンドは
0
を出力として返します。注記create_bucket.rb
ファイルを編集し、my-new-bucket6
、my-new-bucket7
などの空のバケットを作成し、空のバケットの削除を試みる前に上記のdel_empty_bucket.rb
ファイルを適宜編集してください。
空でないバケットの削除(強制的に実行)
新しいファイルを作成します。
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')
ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
chmod +x del_non_empty_bucket.rb
コマンドを実行します。
./del_non_empty_bucket.rb | echo $?
バケットが正常に削除されると、コマンドは
0
を出力として返します。
オブジェクトの削除
新しいファイルを作成します。
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')
ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
chmod +x delete_object.rb
コマンドを実行します。
./delete_object.rb
これにより、オブジェクト
hello.txt
が削除されます。