IBM CloudでWebアプリやLINEアプリを開発していると、画像ファイルや動画ファイルの保存場所に困ることがあります。 Node.jsなどが稼動しているファイルシステム上に保存したファイルは、アプリが再起動したときに消えてしまいますし、他のインスタンスからは参照できないためです。
そこで、IBM CloudのObject Storageです。 Object Storageにアップロードしたファイルを、WebアプリやLINEアプリからアクセスできるようにする方法を紹介します。
目次
Serviceの作成
最初に、Object Storageサービスを作成します。
IBM Cloudのカタログから「Cloud Object Storage」を選択します。
次に、必要に応じてサービス名を変更してサービスの種類を選択します。
今回は、IBM Cloud契約のみで、無料でも利用可能な、右端にあるObject Storageを作成します。
最後に、価格プランを選択します。
しばらくすると、サービスが作成されます。
コンテナーの作成
ファイルを保存するコンテナーを作成します。
作成されたObject Storageサービスをクリックすると、選択している地域のコンテナー一覧が表示されます。
右側にある[アクションの選択]をクリックして表示される[コンテナーの作成]を選択します。
コンテナー名を入力して[保存]ボタンをクリックします。
コンテナーが作成されます。
ファイルのアップロード
作成したコンテナーをクリックすると、コンテナー内のファイルが一覧表示されます。
コンテナー内のリストに青枠が表示されるようにファイルをドラッグ&ドロップするとアップロードが始まります。
アップロードが完了すると、ファイル名が表示されます。
資格情報の作成
アクセスに必要な資格情報を作成します。
左にある[サービス資格情報]をクリックして、[新資格情報]をクリックします。
表示されたウィンドウの[追加]をクリックします。
作成された資格情報の[資格情報の表示]をクリックすると、内容が表示されます。
ブラウザでアクセス
試しに、アップロードしたファイルにブラウザでアクセスします。
URLは次のように決まります。
https://地域.objectstorage.open.softlayer.com/v1/AUTH_プロジェクトID/コンテナ名/ファイル名
地域
ダラス: dal
ロンドン: lon
プロジェクトID: 資格情報のprojectId
すると、アクセスを許可されていないというエラーが発生して、画像ファイルを表示できません。
そこで、認証なしにアクセスできるようにコンテナーにアクセス権を設定していきます。
Swiftコマンドのインストール
アクセストークンの取得に必要なSwiftコマンドをインストールします。Ubuntuなどで下記コマンドを実行してインストールします。
1 2 3 |
sudo apt-get install python-pip sudo pip install python-swiftclient sudo pip install python-keystoneclient |
アクセストークンの取得
REST APIに必要なアクセストークンを、Swiftコマンドで取得します。
資格情報から環境変数を設定して、コマンドを実行します。
1 2 3 4 5 6 7 8 |
export OS_USER_ID=資格情報のuserId export OS_PASSWORD=資格情報のpassword export OS_PROJECT_ID=資格情報のprojectId export OS_AUTH_URL=https://identity.open.softlayer.com/v3 export OS_REGION_NAME=資格情報のregion export OS_IDENTITY_API_VERSION=3 export OS_AUTH_VERSION=3 swift auth |
成功するとURLとアクセストークンが表示されます。
パスワードがカッコなどでエラーになる場合は、パスワードを”で括ります。
コンテナにアクセス権を設定
取得したアクセストークンを使用して、コンテナーのファイルに認証無しでアクセスできるようにします。次のコマンドでアクセス権を設定します。
1 |
curl -i https://dal.objectstorage.open.softlayer.com/v1/AUTH_プロジェクトID/コンテナ名 -X POST -H "X-Container-Read: .r:*" -H "X-Auth-Token: アクセストークン" |
次のように表示されたら成功です。
ブラウザで再アクセス
もう一度、ブラウザでアクセスしてみます。今度は、画像が表示されます。
まとめ
今回は、Object Storageに置いたファイルをアプリから簡単にアクセスできるようにしてみました。
ただ、場合によっては、アドレスが分かっただけでアクセスできては困ることがあります。
そのような場合にどうすればいいのかについて、機会があれば紹介したいと思います。
執筆者プロフィール
- 2016年からIBM Watsonを使ったシステム開発に従事しています。最近は、IBM Cloud のOpenWisk、Kubernetes、Push Notificationsなども使い始めています。