ラベル OpenStack の投稿を表示しています。 すべての投稿を表示
ラベル OpenStack の投稿を表示しています。 すべての投稿を表示

2015年7月5日日曜日

新ConoHaのオブジェクトストレージにAjaxを使ってアップロードする


前回(新ConoHaのオブジェクトストレージ上のデータをAjaxで取得してみる)の続き。

次はAjaxによるアップロードを試します。

参考サイト

コンテナの準備

アップロード先となるコンテナの準備をする。といっても前回の記事から何も変更なかった。
アップロード先のコンテナ
必要なのはX-Container-Meta-Access-Control-Allow-Originメタデータだけみたい。

サイトの準備

参考サイト4つ目のGitHubのソースを真似てWebページを作った。(http://localhost:3000/ のホストとしてアクセス)
https://github.com/naichilab/cors-swift-example/blob/master/app.js
アップロード処理が書かれてるjsファイル。
URL組み立ててtokenつけてPUTするだけっぽい。

トークンの発行

参考サイト3つ目のConoHaドキュメントを見てみると、トークン発行方法が書かれてる。
ターミナルで下記コマンドを実行してトークンを取得する。
curl -i -X POST \
-H "Accept: application/json" \
-d '{"auth":{"passwordCredentials":{"username":"APIユーザー名","password":"APIユーザーパスワード"},"tenantId":"テナントID"}}' \
https://identity.tyo1.conoha.io/v2.0/tokens
長々としたJSONが返ってくるのでaccess->token->idをメモる。
どうもトークンは一度発行すると24時間有効みたいですね。

アップロード実行

さきほど立ち上げたサイトのフォームに入力していく。

  • StorageURL:ConoHaコントロールパネル->API->Object Storage Serviceエンドポイント
  • StorageToken:さきほどメモしたトークン
  • Container:コンテナ名
こんな感じ

File Selectionのボタンからファイルを選ぶとアップロードが始まる。
アップロード完了


すんなりとアップロードできた。
CyberDuckで確認した。

まとめ

  • ConoHaのAPIユーザーを使ってトークンを発行する。
  • コンテナにX-Auth-Tokenメタデータの設定は不要
あってんのかなこれ・・・


だいぶやりたいことに近づいてきたような気がする。
自分のサーバーでトークンを発行してブラウザに渡す→ブラウザが直接オブジェクトストレージにアップロードって感じでいいのかな。
トークンが24時間有効だしこのままじゃ好きなファイルアップロードできちゃうからもーちょい厳しい認証が必要だよなぁ。
どうしたらいいんかな。

関連記事

ConoHa関連の記事をまとめました。
ConoHa関連まとめ

2015年7月2日木曜日

Swiftコマンドラインクライアントで新ConoHaのオブジェクトストレージに接続する。


最近リニューアルした新ConoHa(https://www.conoha.jp/)のオブジェクトストレージを試してます。

公式にはオブジェクトストレージを操作する方法として下記2つが紹介されていました。
・CyberDuck(GUIクライアント)を使う方法
・APIを叩く方法

CyberDuck

GUIクライアントは下記記事の通り接続できました。
新ConoHaのオブジェクトストレージにCyberDuckで接続しようとして401認証エラー
コンテナの作成やファイルのアップロード、ダウンロードは問題なくできるんですがコンテナへの属性追加とか、細かい操作はできないみたい。
やりたいのはそっちなので結局APIを使う方法に切り替えることに。

APIによる操作

APIを操作する方法はCURLを使う方法とSwiftコマンドラインクライアントを使う方法がある(?)っぽいです。(ちゃんと調べてない)
swiftコマンドラインクライアントを使う方が、OpenStackSwiftの操作に適してそうな気がしたのでそっちを先に試してみます。

インストールは下記記事の通り行いました。
ConoHaのオブジェクトストレージを操作するためにOpenStackSwiftのコマンドラインクライアントをインストールする

swiftコマンドラインクライアントによる接続

環境

MacOSX 10.10.3
swift 2.4.0

環境変数ファイルを準備

~/swift_conoha
export OS_AUTH_URL=https://identity.tyo1.conoha.io/v2.0 (認証サーバーのAPIエンドポイント)
export OS_TENANT_NAME=XXXXXXXXXXXX (テナント名)
export OS_USERNAME=XXXXXXXXXXXX (APIユーザー名)
export OS_PASSWORD=XXXXXXXXXXXX (APiユーザーパスワード)

起動確認

$ source ~/swift_conoha 
$ swift stat

Auth versions 2.0 and 3 require python-keystoneclient, install it or use Auth
version 1.0 which requires ST_AUTH, ST_USER, and ST_KEY environment
variables to be set or overridden with -A, -U, or -K.
なんか怒られた。python-keystoneclientが足りない?

python-keystoneclientをインストール

$ sudo pip install python-keystoneclient

再チャレンジ

$ swift stat
                        Account: xx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                     Containers: 1
                        Objects: 1
                          Bytes: 0
Containers in policy "policy-0": 1
   Objects in policy "policy-0": 1
     Bytes in policy "policy-0": 0
               Meta Quota-Bytes: 107374182400
                    X-Timestamp: 1432076457.10619
                     X-Trans-Id: txa813d66137274a32b79f2-0055954ee7
                   Content-Type: text/plain; charset=utf-8
                  Accept-Ranges: bytes
いけたー

とりあえずここまで。

関連記事

ConoHa関連の記事をまとめました。
ConoHa関連まとめ

ConoHaのオブジェクトストレージを操作するためにOpenStackSwiftのコマンドラインクライアントをインストールする

新ConoHaのオブジェクトストレージにも採用されてるらしいOpenStack Swift。
コンテナの属性を触るのにAPI操作が必要そうなのでクライアントをインストールしてみる。
いまいちよくわかってないのでメモしとくけど手順合ってるかは不明。

環境

・OS X Yosemite 10.10.3

参考

OpenStack コマンドラインクライアントのインストール
https://swiftstack.com/docs/integration/python-swiftclient.html

前提ソフトウェアのインストール

Python2.6かそれ以降

OS Xには最初から入ってた。
$ python -V
Python 2.7.6
※けどこのままではswiftクライアントが動かず、Homebrew経由で入れ直した。
$ brew install python
$ python -V
Python 2.7.10

setuptoolsパッケージ

これもOS Xには最初から入ってるらしい。

pipパッケージ

これも書かれてる通りのコマンド実行してみる。
$ sudo easy_install pip
・・・略
Installed /Library/Python/2.7/site-packages/pip-7.1.0-py2.7.egg
Processing dependencies for pip
Finished processing dependencies for pip

これでいいのかな。

クライアントのインストール

いろいろクライアントの種類があるみたいだけどオブジェクトストレージだけ操作できればいいからswiftclientってのをインストール。
$ sudo pip install python-swiftclient
・・・略
Successfully installed futures-3.0.3 python-swiftclient-2.4.0 requests-2.7.0 simplejson-3.7.3 six-1.9.0

動かしてみるもエラーで動かない
$ swift
Traceback (most recent call last):
  File "/usr/local/bin/swift", line 7, in <module>
    from swiftclient.shell import main
  File "/Library/Python/2.7/site-packages/swiftclient/shell.py", line 31, in <module>
    from swiftclient.multithreading import OutputManager
  File "/Library/Python/2.7/site-packages/swiftclient/multithreading.py", line 22, in <module>
    from six.moves.queue import PriorityQueue
ImportError: No module named queue
以下のページを発見。
Installing python-swiftclient on OS X Yosemite
どうもMacに最初から入ってるpythonに問題があるらしい。
上記ページの通り、下記コマンドを実行(一旦インストールしたものを削除する)
$ sudo pip uninstall futures
$ sudo pip uninstall requests
$ sudo pip uninstall simplejson
$ sudo pip uninstall six
$ sudo pip uninstall python-swiftclient
Homebrew経由でpythonをインストール
$ brew install python
再度swiftclientをインストール
$ pip install python-swiftclient
これでうまくいきました。
$ swift --version
swift 2.4.0
めでたしめでたし。
次はConoHaのオブジェクトストレージを操作してみる。

関連記事

ConoHa関連の記事をまとめました。
ConoHa関連まとめ
Related Posts Plugin for WordPress, Blogger...