2

マニュアルに従って、Google Cloud Storage に必要な環境をセットアップしました。「gsutil」をインストールし、すべてのパスを設定しました。私の gsutil は完全に動作しますが、以下のコードを実行しようとすると、

#!/usr/bin/python

import StringIO
import os
import shutil
import tempfile
import time
from oauth2_plugin import oauth2_plugin

import boto

# URI scheme for Google Cloud Storage.
GOOGLE_STORAGE = 'gs'
# URI scheme for accessing local files.
LOCAL_FILE = 'file'

uri=boto.storage_uri('sangin2', GOOGLE_STORAGE)

try:
    uri.create_bucket()
    print "done!"
except boto.exception.StorageCreateError, e:
    print "failed"

「403 アクセスが拒否されました」というエラーが表示されます。

  Traceback (most recent call last):
      File "/Volumes/WingIDE-101-4.0.0/WingIDE.app/Contents/MacOS/src/debug/tserver/_sandbox.py", line 23, in <module>
      File "/Users/lsangin/gsutil/boto/boto/storage_uri.py", line 349, in create_bucket
        return conn.create_bucket(self.bucket_name, headers, location, policy)
      File "/Users/lsangin/gsutil/boto/boto/gs/connection.py", line 91, in create_bucket
        response.status, response.reason, body)
    boto.exception.GSResponseError: GSResponseError: 403 Forbidden
      <?xml version='1.0' encoding='UTF-8'?><Error><Code>AccessDenied</Code><Message>Access denied.</Message></Error>

私はこれに慣れていないので、理由を理解するのはちょっと難しいです。誰かが私を助けることができますか?ありがとうございました。

4

1 に答える 1

1

boto ライブラリは自動的に $HOME/.boto ファイルを見つけて使用します。1 つの確認事項: 使用しているプロジェクトがレガシー アクセスの既定のプロジェクトとして設定されていることを確認します (API コンソールで [ストレージ アクセス] をクリックし、[これがレガシー アクセスの既定のプロジェクトです] と表示されていることを確認します)。 . その設定が間違っていて、参照したバケットの作成の例に従うと、403 エラーも発生しますが、これが gsutil では機能するが、boto を直接使用すると機能しないことは意味がありません。

次のように、storage_uri オブジェクトをインスタンス化するときに「debug=2」を追加してみてください。

uri = boto.storage_uri(name, GOOGLE_STORAGE, debug=2)

これにより、stdout に追加のデバッグ情報が生成されます。これは、類似した動作中の gsutil の例 ( gsutil -D mb を使用) からのデバッグ出力と比較できます。

于 2012-02-19T08:32:30.340 に答える