Lors de l'accès à Google Cloud Storage à partir de boto, il est possible d'accéder avec la clé d'accès et la clé secrète en activant un accès opérationnel compatible avec s3. http://qiita.com/itkr/items/d990e87a2540332ee0e5
Cependant, il y a un problème avec cette méthode. La clé d'accès qui peut être émise avec un accès opérationnel compatible est liée au compte utilisateur Google, ce qui n'est pas pratique pour les projets à plusieurs personnes. Ensuite, vous aurez la possibilité d'accéder avec un compte de service et un fichier clé (p12).
Ici, nous utilisons une bibliothèque appelée gcs-oauth2-boto-plugin.
pip install gcs-oauth2-boto-plugin
Préparez un fichier de configuration décrivant le compte de service et le chemin du fichier de clé.
Par défaut, il regarde ~ / .boto
, mais vous pouvez spécifier n'importe quel chemin en préparant l'un des éléments suivants dans la variable d'environnement. En passant, c'est la même chose que gsutil.
--BOTO_CONFIG (spécifier un seul fichier)
--BOTO_PATH (spécifiez plusieurs fichiers séparés par :
)
Lors de l'écriture de variables d'environnement en python, écrivez comme suit.
import os
os.environ['BOTO_CONFIG'] = '/path.to/boto_config'
Vous pouvez écrire divers paramètres, mais les plus importants cette fois sont les paramètres suivants
[Credentials]
gs_service_key_file = /path.to/sample-KEYFILE.p12
gs_service_client_id = [email protected]
[GSUtil]
default_project_id = sampleproject-994
Référence: https://cloud.google.com/storage/docs/gsutil/commands/config#additional-configuration-controllable-features
import boto
bucket_name = 'bucket_name'
uri = boto.storage_uri(bucket_name, 'gs')
print uri.get_bucket()
En gros, c'est tout ce dont vous avez besoin si vous avez installé gcs-oauth2-boto-plugin.
boto a un mécanisme qui vous permet d'installer un plugin lors du collage d'une AuthConnection. Je vais l'omettre car je réimprimerai la plupart de l'implémentation de boto si je l'écris en détail, mais si vous regardez le code lié à l'auth de boto, vous pouvez trouver l'appel de la fonction get_plugin
.
boto/plugin.py
def get_plugin(cls, requested_capability=None):
if not requested_capability:
requested_capability = []
result = []
for handler in cls.__subclasses__():
if handler.is_capable(requested_capability):
result.append(handler)
return result
__subclasses__
affiche une liste de sous-classes, mais dans ce cas c'est une liste de classes qui héritent de la classe ʻAuthHandler. Puisque la classe ʻOAuth2ServiceAccountAuth
dans gcs-oauth2-boto-plugin hérite de ʻAuthHandler, elle est reconnue comme un plug-in. Dans celui-ci, les informations nécessaires telles que
gs_service_key_file` sont obtenues à partir du fichier de configuration.
Vous pouvez également implémenter votre propre classe qui hérite de ʻAuthHandler` et écraser de force le chemin du fichier de configuration qu'il contient pour le changer dynamiquement. Mais je pense que cela peut probablement être plus intelligent.
from boto.auth_handler import AuthHandler
from boto.pyami.config import Config
boto_path = ''
class SpamAuth(AuthHandler):
def __init__(self, path, config, provider):
config = Config(path=boto_path)
# ...Abréviation...
def spam(path='/path.to/boto_config'):
global boto_path
boto_path = path
bucket_name = 'bucket_name'
uri = boto.storage_uri(bucket_name, 'gs')
print uri.get_bucket()
À ce stade, la classe URI (BucketStorageUri
dans ce cas) contient la connexion dans le dict appelé provider_pool
une fois la connexion établie, donc lors du changement de connexion,del BucketStorageUri.provider_pool ['gs']
Il semble que vous deviez l'effacer comme BucketStorageUri.provider_pool = {}
.
Recommended Posts