ご利用ガイドオブジェクトストレージを使う(RESTful API [curl] 編)

目次

RESTful APIを使ってオブジェクトストレージを操作します。
今回はプログラミング言語に依存しないcurlを使って解説していこうと思います。
また、APIのレスポンスの形式がjsonのためjqを使います。



$ yum install jq -y

認証トークンの取得

トークン発行に関するAPIドキュメントは下記となります。

APIドキュメント[トークン発行]

まず、APIを利用するための認証トークンを取得します。
認証トークンの取得のコマンドは下記となります。

$ curl -s -XPOST \
-H “Accept: application/json” \
-d ‘{
“auth”:{
“passwordCredentials”:{
“username”:”ConoHa”,
“password”:”paSSword123456#$%”
},
“tenantId”:”487727e3921d44e3bfe7ebb337bf085e”
}
}’ \
https://identity.tyo1.conoha.io/v2.0/tokens | jq .

※エンドポイントURLについてはお客様環境ごとに異なりますのでコントロールパネルにてご確認ください※

・認証成功

認証に成功した場合は下記のような結果になります。

{
  "access": {
    "token": {
      "issued_at": "2018-10-29T07:28:03.233280",
      "expires": "2018-10-30T07:28:03Z",
      "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "tenant": {
        "description": "",
        "enabled": true,
        "tyo1_image_size": "50GB",
        "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "domain_id": "gnc",
        "name": "gnct00000000"
      },
      "audit_ids": [
        "xxxxxxxxxxxxxxxxxxxxxx"
      ]
    },
    "serviceCatalog": [

・認証失敗

認証に失敗した場合は下記のような結果になります。

{
  "error": {
    "message": "Could not find user: ConoHa (Disable debug mode to suppress these details.)",
    "code": 401,
    "title": "Unauthorized"
  }
}

今回使用するトークンはaccessのtokenのidになります。
jq .ではなくjq “.access.token.id”にする事で認証トークンだけを表示させる事が可能です。

オブジェクトストレージへのアクセス

オブジェクトストレージの操作はHTTPヘッダに
X-Auth-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxと指定する事で操作が行えます。

コンテナ一覧の取得

情報取得に関するAPIドキュメントは下記となります。

APIドキュメント[アカウント情報取得]

まずは下記のコマンドでコンテナの一覧を取得してみます。

$ curl -s -XGET \
-H "Accept: application/json" \
-H "X-Auth-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
https://object-storage.tyo1.conoha.io/v1/nc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

・リクエスト成功

現在のところはまだコンテナを作成していないため、空配列がレスポンスとして返ってきています。

[]

・リクエスト失敗

下記がレスポンスとして返ってきた場合は認証トークンが間違っている可能性があります。

<html><h1>Unauthorized</h1><p>This server could not verify that you are authorized to access the document you requested.</p></html>

コンテナの作成

コンテナ作成に関するAPIドキュメントは下記となります。

APIドキュメント[コンテナ作成]

コンテナを作成する時のリクエストはPUTで行います。
オブジェクトストレージのエンドポイントの最後のtest-conohaがコンテナ名になります。
レスポンスのステータスコードを見て成功か失敗か判断する事が多いので、-vをつけて確認しようと思います。

$ curl -v -s -XPUT \
-H "Accept: application/json" \
-H "X-Auth-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
https://object-storage.tyo1.conoha.io/v1/nc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/test-conoha

以下のように表示されるの事が確認できます。(ハンドシェイクは省略)

> PUT /v1/nc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/test-conoha HTTP/1.1
> User-Agent: curl/7.29.0
> Host: object-storage.tyo1.conoha.io
> Accept: application/json
> X-Auth-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> 
< HTTP/1.1 201 Created
< Content-Length: 0
< Content-Type: text/html; charset=UTF-8
< X-Trans-Id: xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxx
< Date: Wed, 31 Oct 2018 12:36:48 GMT
< 
* Connection #0 to host object-storage.tyo1.conoha.io left intact

ステータスコードで以下のように判断可能です。

201 Created     : コンテナが作成完了
202 Accepted    : 作成済みのコンテナに対してリクエストを送った場合等
401 Unauthorized: 認証に失敗

作成後に再度コンテナ一覧の取得を行うと以下のように作成したコンテナが確認できます。

[
  {
    "count": 0,
    "bytes": 0,
    "name": "test-conoha"
  }
]

オブジェクトのアップロード

オブジェクトのアップロードに関するAPIドキュメントは下記となります。

APIドキュメント[オブジェクトアップロード]

オブジェクトのアップロードをする時のリクエストはPUTで行います。
コンテナ名の後ろのtest.txtが実際にオブジェクトストレージで扱われるオブジェクト名になります。
アップロードしようとしているファイル名と違っていても問題ないです。
また、アップロードするファイルはパイプで渡しても-dで渡しても大丈夫です。

$ cat << EOF > /tmp/tmp.txt
このはちゃん清楚かわいい
EOF
$ curl -s -XPUT \
-H "Accept: application/json" \
-H "X-Auth-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
https://object-storage.tyo1.conoha.io/v1/nc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/test-conoha/test.txt -d @/tmp/tmp.txt
> PUT /v1/nc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/test-conoha/test.txt HTTP/1.1
> User-Agent: curl/7.29.0
> Host: object-storage.tyo1.conoha.io
> Accept: application/json
> X-Auth-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> Content-Length: 36
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 36 out of 36 bytes
< HTTP/1.1 201 Created
< Last-Modified: Wed, 31 Oct 2018 12:45:16 GMT
< Content-Length: 0
< Etag: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
< Content-Type: text/html; charset=UTF-8
< X-Trans-Id: xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxx
< Date: Wed, 31 Oct 2018 12:45:15 GMT
< 
* Connection #0 to host object-storage.tyo1.conoha.io left intact

オブジェクトのダウンロード

オブジェクトのダウンロードに関するAPIドキュメントは下記となります。

APIドキュメント[オブジェクトダウンロード]

ダウンロードする時もデフォルトではトークンの指定が必須になっています。
トークンなしで取得する方法は次に紹介しようと思います。

$ curl -H "X-Auth-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
https://object-storage.tyo1.conoha.io/v1/nc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/test-conoha/test.txt
このはちゃん清楚かわいい

オブジェクトの公開

Web公開に関するAPIドキュメントは下記となります。

APIドキュメント[web publishing]

オブジェクトの公開を行う事によりトークンを使わないでダウンロードを行う事が可能です。
誰でもアクセスできるようになるため、公開したくないファイルは注意が必要です。

ヘッダにX-Container-Readに指定する事でコンテナ単位で公開する事ができます。

curl -v -s -XPUT \
-H "Accept: application/json" \
-H "X-Auth-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "X-Container-Read: .r:*" \
https://object-storage.tyo1.conoha.io/v1/nc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/test-conoha
> PUT /v1/nc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/test-conoha HTTP/1.1
> User-Agent: curl/7.29.0
> Host: object-storage.tyo1.conoha.io
> Accept: application/json
> X-Auth-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> X-Container-Read: .r:*
> 
< HTTP/1.1 202 Accepted
< Content-Length: 76
< Content-Type: text/html; charset=UTF-8
< X-Trans-Id: xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxx
< Date: Wed, 31 Oct 2018 13:06:40 GMT
< 
* Connection #0 to host object-storage.tyo1.conoha.io left intact

設定したのでトークンをヘッダに含めないでリクエストをすると公開されていることが確認できます。

$ curl \
https://object-storage.tyo1.conoha.io/v1/nc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/test-conoha/test.txt
このはちゃん清楚かわいい

まとめ

今回はcurlを使って操作する方法をご紹介致しました。
curlで出来るのでPHP等のプログラミング言語でも実装ができます。
以下をご参考にしてください。

オブジェクトストレージを使う(RESTful API [PHP] 編)

問題は解決できましたか?

ご回答ありがとうございます。

ご回答受け付けました。ご協力ありがとうございました。