2.3.7. Ruby AWS SDK를 사용하여 Ceph Object Gateway에 액세스
S3
액세스를 위해 aws-sdk
gem과 함께 Ruby 프로그래밍 언어를 사용할 수 있습니다. Ruby AWS::SDK
를 사용하여 Ceph Object Gateway 서버에 액세스하는 데 사용되는 노드에서 아래에 언급된 단계를 실행합니다.
사전 요구 사항
- Ceph Object Gateway에 대한 사용자 수준 액세스.
- Ceph Object Gateway에 액세스하는 노드에 대한 루트 수준 액세스입니다.
- 인터넷 액세스.
절차
ruby
패키지를 설치합니다.[root@dev ~]# yum install ruby
참고위의 명령은 ruby를 설치하고
ruby
gemsruby-libs
와 같은 필수 종속 항목을 설치합니다. 임의의 경우 명령은 모든 종속 항목을 설치하지 않는 경우 별도로 설치합니다.aws-sdk
Ruby 패키지를 설치합니다.[root@dev ~]# gem install aws-sdk
프로젝트 디렉터리를 생성합니다.
[user@dev ~]$ mkdir ruby_aws_sdk [user@dev ~]$ cd ruby_aws_sdk
연결 파일을 생성합니다.
[user@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
를 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-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@ruby_aws_sdk]$ chmod +x conn.rb
파일을 실행합니다.
[user@ruby_aws_sdk]$ ./conn.rb | echo $?
파일에 값을 올바르게 제공한 경우 명령의 출력은
0
이 됩니다.버킷을 만들기 위한 새 파일을 만듭니다.
[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')
파일을 저장하고 편집기를 종료합니다.
파일을 실행 가능으로 설정합니다.
[user@ruby_aws_sdk]$ chmod +x create_bucket.rb
파일을 실행합니다.
[user@ruby_aws_sdk]$ ./create_bucket.rb
명령의 출력이
true
이면 버킷my-new-bucket2
가 성공적으로 생성되었습니다.소유 버킷을 나열할 새 파일을 만듭니다.
[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
파일을 저장하고 편집기를 종료합니다.
파일을 실행 가능으로 설정합니다.
[user@ruby_aws_sdk]$ chmod +x list_owned_buckets.rb
파일을 실행합니다.
[user@ruby_aws_sdk]$ ./list_owned_buckets.rb
출력은 다음과 같아야 합니다.
my-new-bucket2 2022-04-21 10:33:19 UTC
오브젝트를 생성하기 위한 새 파일을 생성합니다.
[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' )
파일을 저장하고 편집기를 종료합니다.
파일을 실행 가능으로 설정합니다.
[user@ruby_aws_sdk]$ chmod +x create_object.rb
파일을 실행합니다.
[user@ruby_aws_sdk]$ ./create_object.rb
이렇게 하면
Hello World!!
문자열이 포함된hello.txt
파일이 생성됩니다.버킷의 콘텐츠를 나열할 새 파일을 만듭니다.
[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
파일을 저장하고 편집기를 종료합니다.
파일을 실행 가능하게 만듭니다.
[user@ruby_aws_sdk]$ chmod +x list_bucket_content.rb
파일을 실행합니다.
[user@ruby_aws_sdk]$ ./list_bucket_content.rb
출력은 다음과 같이 표시됩니다.
hello.txt 12 Fri, 22 Apr 2022 15:54:52 GMT
빈 버킷을 삭제하기 위해 새 파일을 생성합니다.
[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')
파일을 저장하고 편집기를 종료합니다.
파일을 실행 가능으로 설정합니다.
[user@ruby_aws_sdk]$ chmod +x del_empty_bucket.rb
파일을 실행합니다.
[user@ruby_aws_sdk]$ ./del_empty_bucket.rb | echo $?
버킷이 성공적으로 삭제되면 명령은
0
을 출력으로 반환합니다.참고create_bucket.rb
파일을 편집하여 빈 버킷을 생성합니다(예:my-new-bucket6
,my-new-bucket7
). 그런 다음 빈 버킷을 삭제하기 전에 위의del_empty_bucket.rb
파일을 적절하게 편집합니다.비어 있지 않은 버킷을 삭제하기 위해 새 파일을 생성합니다.
[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')
파일을 저장하고 편집기를 종료합니다.
파일을 실행 가능으로 설정합니다.
[user@ruby_aws_sdk]$ chmod +x del_non_empty_bucket.rb
파일을 실행합니다.
[user@ruby_aws_sdk]$ ./del_non_empty_bucket.rb | echo $?
버킷이 성공적으로 삭제되면 명령은
0
을 출력으로 반환합니다.오브젝트를 삭제하기 위한 새 파일을 생성합니다.
[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')
파일을 저장하고 편집기를 종료합니다.
파일을 실행 가능으로 설정합니다.
[user@ruby_aws_sdk]$ chmod +x delete_object.rb
파일을 실행합니다.
[user@ruby_aws_sdk]$ ./delete_object.rb
그러면
hello.txt
오브젝트가 삭제됩니다.