2.3.6. Ruby AWS S3를 사용하여 Ceph Object Gateway에 액세스
S3 액세스에 대해 aws-s3 gem과 함께 Ruby 프로그래밍 언어를 사용할 수 있습니다. Ruby AWS::S3 을 사용하여 Ceph Object Gateway 서버에 액세스하는 데 사용되는 노드에서 아래에 언급된 단계를 실행합니다.
사전 요구 사항
- Ceph Object Gateway에 대한 사용자 수준 액세스.
- Ceph Object Gateway에 액세스하는 노드에 대한 루트 수준 액세스입니다.
- 인터넷 액세스.
절차
ruby패키지를 설치합니다.[root@dev ~]# yum install ruby참고위의 명령은 ruby를 설치하고
및rubygemsruby-libs와 같은 필수 종속 항목을 설치합니다. 임의의 경우 명령은 모든 종속 항목을 설치하지 않는 경우 별도로 설치합니다.aws-s3Ruby 패키지를 설치합니다.[root@dev ~]# gem install aws-s3프로젝트 디렉터리를 생성합니다.
[user@dev ~]$ mkdir ruby_aws_s3 [user@dev ~]$ cd ruby_aws_s3연결 파일을 생성합니다.
[user@dev ~]$ vim conn.rb다음 내용을
conn.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를 Ceph Object Gateway 노드의 FQDN으로 바꿉니다.MY_ACCESS_KEY및MY_SECRET_KEY를 Red Hat Ceph Storage 오브젝트 게이트웨이 구성 및 관리 가이드에서 언급한 대로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' )파일을 저장하고 편집기를 종료합니다.
파일을 실행 가능으로 설정합니다.
[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' AWS::S3::Bucket.create('my-new-bucket1')파일을 저장하고 편집기를 종료합니다.
파일을 실행 가능으로 설정합니다.
[user@dev ~]$ chmod +x create_bucket.rb파일을 실행합니다.
[user@dev ~]$ ./create_bucket.rb명령 출력이
true이면 버킷my-new-bucket1이 성공적으로 생성되었습니다.소유 버킷을 나열할 새 파일을 만듭니다.
[user@dev ~]$ 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파일을 저장하고 편집기를 종료합니다.
파일을 실행 가능으로 설정합니다.
[user@dev ~]$ chmod +x list_owned_buckets.rb파일을 실행합니다.
[user@dev ~]$ ./list_owned_buckets.rb출력은 다음과 같아야 합니다.
my-new-bucket1 2020-01-21 10:33:19 UTC오브젝트를 생성하기 위한 새 파일을 생성합니다.
[user@dev ~]$ 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' )파일을 저장하고 편집기를 종료합니다.
파일을 실행 가능으로 설정합니다.
[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' 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파일을 저장하고 편집기를 종료합니다.
파일을 실행 가능하게 만듭니다.
[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' AWS::S3::Bucket.delete('my-new-bucket1')파일을 저장하고 편집기를 종료합니다.
파일을 실행 가능으로 설정합니다.
[user@dev ~]$ chmod +x del_empty_bucket.rb파일을 실행합니다.
[user@dev ~]$ ./del_empty_bucket.rb | echo $?버킷이 성공적으로 삭제되면 명령은
0을 출력으로 반환합니다.참고create_bucket.rb파일을 편집하여 빈 버킷(예:my-new-bucket4,my-new-bucket5)을 생성합니다. 그런 다음 빈 버킷을 삭제하기 전에 위의del_empty_bucket.rb파일을 적절하게 편집합니다.비어 있지 않은 버킷을 삭제하기 위해 새 파일을 생성합니다.
[user@dev ~]$ vim del_non_empty_bucket.rb다음 내용을 파일에 붙여넣습니다.
#!/usr/bin/env ruby load 'conn.rb' AWS::S3::Bucket.delete('my-new-bucket1', :force => true)파일을 저장하고 편집기를 종료합니다.
파일을 실행 가능으로 설정합니다.
[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' AWS::S3::S3Object.delete('hello.txt', 'my-new-bucket1')파일을 저장하고 편집기를 종료합니다.
파일을 실행 가능으로 설정합니다.
[user@dev ~]$ chmod +x delete_object.rb파일을 실행합니다.
[user@dev ~]$ ./delete_object.rb그러면
hello.txt오브젝트가 삭제됩니다.