Hatena::ブログ(Diary)

Kazzzの日記 このページをアンテナに追加 RSSフィード

2014-06-14

[][]gsutilによるACL設定にXML不要

Google Cloud Storage(以降GCS)のバケットとオブジェクトデフォルトではGAEからアクセスできる設定されておらず、ACL(Access Control List)の設定が必要だ。
ネット情報を仕入れるとACLの取得と設定にはXMLを使うとあるので、まずは現状のACLがどのようになっているのか取得してみたのだが、

>python gsutil acl get gs://Kazz

[
  {
    "entity": "project-owners-XXXXXXXXXX",
    "projectTeam": {
      "projectNumber": "XXXXXXXXXX",
      "team": "owners"
    },
    "role": "OWNER"
  },
  {
    "entity": "project-editors-XXXXXXXXXX",
    "projectTeam": {
      "projectNumber": "XXXXXXXXXX",
      "team": "editors"
    },
    "role": "OWNER"
  },
  {
    "entity": "project-viewers-XXXXXXXXXX",
    "projectTeam": {
      "projectNumber": "XXXXXXXXXX",
      "team": "viewers"
    },
    "role": "READER"
  }
]

XXXXXXXXXXはGCSを有効にしているプロジェクト番号。

なんとXMLではなくJSONが戻った。

どうやらgsutil自体、大幅に変更されたらしく、XMLは扱わなくなった模様。※
ACLの設定もXMLを使うのではなく、gsutil自身でできるようだ。

例) GAEのService Account Nameに対してバケットkazzにFULL_CONTROLのACLを設定する

python gsutil acl ch -u XXXXXX@appspot.gserviceaccount.com:FC gs://kazz

これで良いようだ。

なお、同じことはGoogle Cloud Consoleでもできるようだ。
f:id:Kazzz:20140614133256p:image


※googleのサービスAPI更新が早く、ネットに散見される情報は古く全く役に立たないケースがあるので注意が必要だ。

2014-06-13

[][]gsutilの使い方

時間的に余裕が出来たので、日記も久しぶりに書いてみる。

GAE/Jで書いているアプリケーションで「データアップロード->クラウド側に蓄積」という処理が必要なので、BLOBStoreを使うのだろうと思いきや、アップロードは良いとしても、その後のデータをファイルのように扱うためのFiles APIはdeprecatedだという。
Writing files to the Blobstore using the Files APIDeprecated!

ならばどうするのだろうと思いきや、Google Cloud Storageを使うのだそうな。
Google Cloud Storage ― Google Developers

Google Cloud StorageをGAEから使うだけであれば、以下の手順でOKだ。

1. Google Cloud Consoleを開く ( https://console.developers.google.com )
2. 自身のプロジェクト(昔はアプリケーション名)を選択する
3. 左側のペインでCloud Storageを選択する
4. Billingの設定を行う
5. Bucketを作成する

BlobStoreはGAE中のインフラだったため、契約なしで使えたがCloud Storageは単独で契約可能なクラウドサービスなので、支払もGAEとは別に契約が必要となるが、企業では契約が別々になるのは煩雑なだけだ。正直、ここはGAEの支払と統合できるようにしてほしかった。

単に使うだけならこれでおしまいなのだが、Cloud Storage上のデータをある程度自由に触るためにはコンソールだけではなくコマンドラインからも操作したい所だ。
表題のgsutilの出番である

gsutil Tool - Google Cloud Storage ― Google Developers

コマンドラインといってもgsutilはPythonで書かれており、Pythonインタープリタが必要であるため、予め最新のPhthon(2.x系)をインストールする必要がある。
Download Python | Python.org

以下、gsutilを使えるようになるまでの手順だ。

1. gsutilをダウンロードして適当ディレクトリに展開
2. gsutilのコンフィグを行う

>python gsutil config

configコマンドを実行すると以下のプロンプトが出てauthorization codeの入力を促されるので

This command will create a boto config file at C:\Users\Kazz\.boto containing your credentials, based on your responses to the following questions.
Please navigate your browser to the following URL: https://accounts.google.com/o/oauth2/auth?〜
In your browser you should see a page that requests you to authorize access to Google Cloud Platform APIs and Services on your behalf.
After you approve, an authorization code will be displayed.

Enter the authorization code:

OAuthのアカウント発行のためURLが示される。
URL部分をコピーしてWebブラウザで開くとブラウザ上にauthorization codeが表示されので、それをコマンドプロンプト上に張り付ければよい。

Enter the authorization code:XXXXXXXXXXXXXXXXXXXXX 

そうすると今度は対象のプロジェクトの名前を聞いてくるので、現在のプロジェクト(Google Cloud Consoleで確認できる)を入力する。

Please navigate your browser to https://cloud.google.com/console#/project, then find the project you will use, and copy the Project ID string from the second column. Older projects do not have Project ID strings. For such projects, click the project and then copy the Project Number listed under that project.

What is your project-id? XXXXXXXX

Boto config file "C:\Users\Kazz\.boto" created. If you need to use a proxy to access the Internet please see the instructions in that file.

これでユーザディレクトリに.botoという名前の設定ファイル(私の場合C:\Users\Kazz\.boto)が生成されてgsutilが使えるようになる。

例) bucket名にKazzと付けた場合

python gsutil ls
gs://Kazz/

これはWindowsでの手順だが、Macでも手順はほぼ同様だろう。