Ruby版ユーザライブラリ¶
インストール¶
- バージョン2.1.0以降のRubyが導入されている必要があります。
- Gemパッケージは、Rubygems.orgにて公開されています。
$ gem install iij-dag-client
また以下のURLからGemファイルをダウンロードし、Gemファイル名を指定してインストールすることも可能です。
$ gem install iij-dag-client-1.0.2.gem
使い方¶
clientの生成¶
アクセスキーIDおよびシークレットアクセスキーを設定し、clientを生成します。
Dag::Client.new(<アクセスキーID>, <シークレットアクセスキー>, <オプション>)
パラメータについて¶
アクセスキーIDおよびシークレットアクセスキーに加え、以下の表に示すオプションを設定することが出来ます。
パラメータ名 | 必須 | 型 | デフォルト値 | 概要 |
---|---|---|---|---|
apikey | yes | String | アクセスキーID | |
secret | yes | String | シークレットアクセスキー | |
storage_api | no | String | https://storage-dag.iijgio.com | ストレージAPIのエンドポイント |
force_path_style | no | Boolean | false | |
debug | no | Boolean | false | デバッグモード |
サンプル¶
clientを生成
require 'dag'
client = Dag::Client.new("xxxxxxxxxx", "xxxxxxxxxxxxxxxxxxx")
オプションを設定する場合
require 'dag'
params = {
force_path_style: false,
debug: true
}
client = Dag::Client.new("xxxxxxxxxx", "xxxxxxxxxxxxxxxxxxx", params)
エラーレスポンス¶
ストレージAPIにて発生したエラーは、例外(Dag::Client::APIFailure)が発生します。
Dag::Client::APIFailure には以下の情報が格納されています。
名前 | 概要 |
---|---|
message | APIの実行時の情報 |
api_code | エラーコード |
api_message | エラーメッセージ |
api_status | エラーステータス |
api_request_id | エラー時のリクエストID |
api_resource | エラー時のパス情報 |
また、上記以外のエラーレスポンスには以下のものがあります。
名前 | 概要 |
---|---|
ParameterInvalid | 不正なパラメータが設定された |
APIOptionInvalid | 不正なAPIオプションが設定された |
機能一覧¶
機能詳細¶
ストレージ管理¶
ストレージの操作を行うことができます。
バケット一覧取得¶
バケット一覧を取得します。
client.buckets.each do |bucket|
puts bucket.name
#=> bucket1
#=> bucket2
end
バケット作成¶
バケットを作成します。
# バケットを作成
bucket = client.buckets.create('bucket')
puts bucket.name
#=> bucket
以下の方法で作成することもできます。
# バケットを作成
bucket = client.create_bucket('bucket')
puts bucket.name
#=> bucket
バケット削除¶
バケットを削除します。
# バケットを選択
bucket = client.buckets['bucket']
# バケットを削除
bucket.delete
以下の方法で削除することもできます。
# バケットを削除
client.delete_bucket('bucket')
オブジェクト一覧取得¶
以下のようにしてオブジェクトの一覧を取得可能です。
# バケットを選択
bucket = client.buckets['bucket']
# オブジェクト一覧を取得
bucket.objects.each do |object|
puts object.name
#=> object1/
#=> object1/test1
#=> object2/
end
# 接頭辞を指定して検索することが可能
bucket.objects.where(prefix: 'object1').each do |object|
puts object.name
#=> object1/
#=> object1/test1
end
delimiterを指定した場合の例
# ストレージ上に存在するデータ
# /foo/photo/2009/index.html
# /foo/photo/2009/12/index.html
# /foo/photo/2010/index.html
# /foo/photo/2010/xmas.jpg
# /foo/photo/2010/01/index.html
# /foo/photo/2010/01/xmas.jpg
# /foo/photo/2010/02/index.html
# バケットを選択
bucket = client.buckets['bucket']
# 以下の条件でdelimiterを指定した場合
bucket.objects.where(prefix: '/foo/photo/2010', delimiter: '/').each do |object|
puts object.name
#=> /foo/photo/2010/index.html
#=> /foo/photo/2010/xmas.jpg
#=> /foo/photo/2010/01
#=> /foo/photo/2010/02
end
whereメソッドの以下のパラメータを設定することでオブジェクトを絞り込んで取得できます。
パラメータ名 | 必須 | 型 | デフォルト値 | 概要 |
---|---|---|---|---|
prefix | no | String | 前方一致でフィルタするための文字列 | |
delimiter | no | String | オブジェクト階層の区切り文字 |
オブジェクト取得¶
オブジェクトを取得します。
# バケットを選択
bucket = client.buckets['bucket']
# オブジェクトを選択
object = bucket.objects['object1/test.gz']
puts object.name
#=> object1/test.gz
# オブジェクトからデータを読み込む
puts object.read
#=> "abcdefg"
# オブジェクトから3byte分データを読み込む
puts object.read(3)
#=> "abc"
オブジェクト作成¶
オブジェクトを作成します。
オプションを渡すことでマルチパートアップロードに対応しています。
# バケットを選択
bucket = client.buckets['bucket']
# オブジェクトを選択
object = bucket.objects['object1/test.json']
# 文字列
object.write('testobject')
# パス
object.write(Pathname.new('./object_1.json'))
マルチパートアップロードでオブジェクトを作成する
# バケットを選択
bucket = client.buckets['bucket']
# オブジェクトを選択
object = bucket.objects['object1/test.json']
# マルチパートアップロードでオブジェクトを作成する
object.write(Pathname.new('./object_1.json'), multipart: true, jobs: 10, splitsz: 10_000_000)
マルチパートアップロードを使用する場合は以下のオプションを指定することができます。
パラメータ名 | 必須 | 型 | デフォルト値 | 概要 |
---|---|---|---|---|
multipart | no | Boolean | false | マルチパートアップロードを有効にする |
jobs | no | String | 1 | マルチパートアップロードの並列アップロード数 |
splitsz | no | Integer | 104857600 | オブジェクト分割サイズ。5MBバイト以上を指定 |
オブジェクト削除¶
オブジェクトを削除します。
# バケットを選択
bucket = client.buckets['bucket']
# オブジェクトを選択
object = bucket.objects['object1/test.json']
# オブジェクトを削除
object.delete
以下の方法で削除することもできます。
# オブジェクトを削除
client.delete_object('bucket', 'object_1/test.json')