漢なら GCE(Google Compute Engine) から GCS(Cloud Storage) に, 安全かつお手軽にアクセスしたいですよね!
GCE インスタンス起動
GCE インスタンス起動時に, cloud storage へのアクセスが出来る様ようにしておきます.
を参考に, scopes の devstorage.full_control あたりです.
GCE から GCS にアクセスしてみる.
GCE のインスタンスに gcutil ssh INSTANCE-NAME でログインし, 内部から OAuth アクセストークンをメタデータサーバから取得してみます(curl がインストールされていると仮定).
$ curl "http://metadata/computeMetadata/v1/instance/service-accounts/default/token" -H "X-Google-Metadata-Request: True"
以下のようなレスポンスが得られれば成功です.
{"access_token":"XXXXXXXXXX","expires_in":3599,"token_type":"Bearer"}
ファイルをアップロードしてみる.
適当にファイルを作り…
$ echo bora > muda.txt
curl でアップロードしてみます.
$ curl -X PUT --data-binary @muda.txt -H "x-goog-api-version: 2" -H "Authorization: OAuth XXXXXXXXXXX" "http://storage.googleapis.com/MY-BUCKET/muda.txt"
MY-BUCKET にはあらかじめ作っておいた bucket の名前を指定します.
Google Developers Console などで muda.txt が生成されているのを確認します.
ファイル(の内容)を取得してみる.
$ curl -H "x-goog-api-version: 2" -H "Authorization: OAuth XXXXXXXXXXXXXXXXX" "http://storage.googleapis.com/MY-BUCKET/muda.txt"
bora
テキストのデータがそのまま(?)で取得されました. Cool!
これで GCE での計算結果を, 特段ツールをインストールしなくてもGCS に置く, などの活用ができますね.
TODO
- エラーハンドリング
- 内部間通信でも https のほうが安全?
- REST でアクセスしたときは, エラーなどの response が GCS だと JSON ではなくて XML になるようで謎…