Oracle Cloud Infrastructure REST APIをリクエストしてみた vol.2:Storage Classic編

みなさんこんにちは。id:k.furusawa--gです。2019年最初の投稿になります。前回MyService APIをやると書きましたが諸所問題がありまして変更になりました。

今回は何かとお世話になる人も多いObject StorageのAPIを扱おうと思います。Oracle CloudのObject StorageといえばおそらくOracle Cloud InfrastructureのObject Storageを使うのが妥当なのだと思うのですが、こちらはcURLでは呼び出せないのでC#やJavaでAPI開発をやる勢いで記事を書かなければいけません。気合がいるので比較的楽なCloud Infrastructure ClassicのStorage Classic REST APIを使ってみようと思います! Oracle Cloud InfrastructureのObject Storageもいつかどこかで書くと思います。

Storage Classic REST APIドキュメント docs.oracle.com

Identity Service Idとエンドポイントの把握のためにダッシュボードで開いてみましょう。

f:id:k-furusawa--g:20190109101146j:plain
ダッシュボードトップ

f:id:k-furusawa--g:20190109101212j:plain
Identity Service Idとエンドポイント

Identity Service Idはいつも通りです。Storage Classicの特徴としてエンドポイントが3つあります。最初見たときぎょっとしましたがそれぞれ役割があるようです。

  • REST Endpoint (Permanent)

    その名の通り恒久的に利用できるエンドポイントです。アカウントに紐づく自動生成GUIDが含まれておりアカウント情報が変更(Identity Service Idの変更)されても利用し続けることができます。そのためこちらを利用する場合はIdentity Service Idを必要としません。この記事では使いません。公式ドキュメントに詳しい利用方法が書かれています。

  • REST Endpoint

    通常のエンドポイントです。「https://Cloud Account Name.us.storage.oraclecloud.com/v1/Storage-Cloud Account Name」の形式になります。

  • Auth V1 Endpoint

    認証用エンドポイントです。認証時にのみ利用します。

ではStorage Classicにファイルを置くところまでやってみましょう。まずは認証です。

認証cURL

curl -v -X GET \
    -H "X-Storage-User: Storage-Identity Service Id:ユーザーID"\
    -H "X-Storage-Pass: パスワード" \
    https://atomitech.us.storage.oraclecloud.com/auth/v1.0

ヘッダのX-Storage-Userに注意してください。Storage-Identity Service Id:ユーザーID(メールアドレス)の形式になります。

認証が正常に通ると以下の様に長々とヘッダが返ってくると思います。

HTTP/1.1 200 OK
X-Auth-Token: AUTH_***
X-Storage-Token: AUTH_***
X-Storage-Url: https://uscom-east-1.storage.oraclecloud.com/v1/Storage-idcs-***

X-Auth-Tokenを利用しますので変数に入れるなりどこかにメモするなりしてください。

認証が済んだので次にコンテナを作りましょう。以下のようなcURLを組みます。

コンテナ作成cURL

curl -v -X PUT \
    -H "X-Auth-Token: AUTH_***" \
    https://atomitech.us.storage.oraclecloud.com/v1/Storage-atomitech/MyContainer

X-Auth-Tokenに認証のレスポンスに含まれていたX-Auth-Tokenを入れます。

MyContainerの部分は任意のコンテナ名を入れてください。

これを実行し200が返ってこれば成功です。GETして確認してみましょう。

コンテナ一覧取得cURL

curl -v -X GET \
    -H "X-Auth-Token:AUTH_***"\
    https://atomitech.us.storage.oraclecloud.com/v1/Storage-atomitech

実行するとコンテナ名が返ります。

MobileMetadata
MyContainer
_apaas
mautic
omcemodileVFTD2

先ほど作成したMyContainerが含まれています! ちゃんと作成されたようですね。

分かりやすいようにダッシュボードでも確認しに行きます。

f:id:k-furusawa--g:20190109161748j:plain
コンテナが作成される

コンテナがありますね! 大丈夫みたいです。

コンテナ詳細を得たい場合は上のリクエストにコンテナ名を含めれば得られます。

コンテナ詳細の取得cURL

curl -v -X GET \
    -H "X-Auth-Token:AUTH_***" \
    https://atomitech.us.storage.oraclecloud.com/v1/Storage-atomitech/MyContainer

では、このコンテナにオブジェクトをアップロードしてみましょう。cURLを叩いている環境の適当な場所にtest.txtを作成します。中身はなんでもいいですが今回は以下の様にしてみました。

test storage

微妙な内容ですね! もっとわかりやすい内容のほうがよかったですね。

オブジェクトのアップロードには以下のcURLを組みます。

オブジェクト作成cURL

curl -v -X PUT \
    -H "X-Auth-Token: AUTH_***" \
    -T test.txt \
    https://atomitech.us.storage.oraclecloud.com/v1/Storage-atomitech/MyContainer/myObject

私の環境ではhome直下にファイルを置いたのでファイル名を直に指定しました。環境に合わせてパスは変更してください。

myObjectはアップロードしたオブジェクトにつける任意の名称です。

200で成功したらコンテナ詳細でGETするとアップロードしたオブジェクト名も返ってきます。ダッシュボードでも確認してみましょう。

f:id:k-furusawa--g:20190109164822j:plain
オブジェクトがアップロードされている

コンテナにオブジェクトが入っていますね。成功です。オブジェクトの中身も確認しておきましょう。中途半端にアップロードされている危険もあります。

オブジェクト詳細の取得cURL

curl -v -X GET \
   -H "X-Auth-Token:AUTH_***" \
   https://atomitech.us.storage.oraclecloud.com/v1/Storage-atomitech/MyContainer/myObject

実行するとBodyに内容が入って返ります。

test storage

正常ですね!

エンドポイントが3つもあるので何事かと思いましたが、事実上使うのは2つ(認証と呼び出し)なのでそこまで複雑でもなかったですね。

次回こそMyService APIについて書きたいと思います!