2.4.2. Ruby AWS::S3 Examples (aws-s3 gem)
Ruby プログラミング言語は、S3 アクセスに aws-s3 gem と共に使用できます。Ruby AWS::S3 で Ceph Object Gateway サーバーにアクセスするために使用されるノードで以下の手順を実行します。
Ruby の設定
以下の手順を実行して Ruby を設定します。
rootとしてrubyをインストールします。# yum install ruby注記上記のコマンドは
rubyと、rubygemsやruby-libsなどの基本的な依存関係もインストールします。コマンドによってすべての依存関係がインストールされない場合は、個別にインストールします。rootとして、aws-s3をインストールします。# gem install aws-s3
コネクションの作成
プロジェクトディレクトリーを作成します。
$ mkdir ruby_aws_s3 $ cd ruby_aws_s3コネクションファイルを作成します。
$ vim conn.rbconn.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>をゲートウェイノードの FQDN に置き換えます。Red Hat Enterprise Linux のオブジェクトゲートウェイガイド または Ubuntu のオブジェクトゲートウェイガイド で説明されているように、my-access-keyおよびmy-secret-keyは、S3アクセスのradosgwが作成されたときに生成されたaccess_keyおよびsecret_keyに置き換えます。コネクションファイルの例を以下に示します。
#!/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' )ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
$ chmod +x conn.rbコマンドを実行します。
$ ./conn.rb | echo $?ファイルに正しく値を指定した場合は、コマンドの出力は
0になります。
バケットの作成
新しいファイルを作成します。
$ vim create_bucket.rb以下のコンテンツをファイルに貼り付けます。
#!/usr/bin/env ruby load 'conn.rb' AWS::S3::Bucket.create('my-new-bucket1')ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
$ chmod +x create_bucket.rbコマンドを実行します。
$ ./create_bucket.rbコマンドの出力が
trueの場合は、バケットmy-new-bucket1が正常に作成されたことを意味します。
所有するバケットの一覧表示
新しいファイルを作成します。
$ 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ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
$ chmod +x list_owned_buckets.rbコマンドを実行します。
$ ./list_owned_buckets.rb出力は以下のようになります。
my-new-bucket1 2016-01-21 10:33:19 UTC
オブジェクトの作成
新しいファイルを作成します。
$ 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' )ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
$ chmod +x create_object.rbコマンドを実行します。
$ ./create_object.rbこれで、文字列
Hello World!でhello.txtが作成されます。
バケットの内容の一覧表示
新しいファイルを作成します。
$ 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ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
$ 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' AWS::S3::Bucket.delete('my-new-bucket1')ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
$ chmod +x del_empty_bucket.rbコマンドを実行します。
$ ./del_empty_bucket.rb | echo $?バケットが正常に削除されると、コマンドは
0を出力として返します。注記create_bucket.rbファイルを編集して、my-new-bucket9、my-new-bucket10などの空のバケットを作成し、空のバケットの削除を試みる前に上記のdel_empty_bucket.rbファイルを適宜編集してください。
空でないバケットの削除(強制的に実行)
新しいファイルを作成します。
$ vim del_non_empty_bucket.rb以下のコンテンツをファイルに貼り付けます。
#!/usr/bin/env ruby load 'conn.rb' AWS::S3::Bucket.delete('my-new-bucket1', :force => true)ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
$ 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' AWS::S3::S3Object.delete('hello.txt', 'my-new-bucket1')ファイルを保存して、エディターを終了します。
ファイルを実行可能にします。
$ chmod +x delete_object.rbコマンドを実行します。
$ ./delete_object.rbこれにより、オブジェクト
hello.txtが削除されます。