Lorsque vous placez les données dans Amazon S3 (ci-après S3) dans Red Shift, vous pouvez facilement le faire car il s'agit du même AWS, mais lorsque vous faites la même chose avec BigQuery, c'est toujours via Google Cloud Storage (ci-après GCS) Pratique. GCS peut être rendu compatible avec S3, qui peut être utilisé pour migrer de S3 vers GCS et vice versa.
Cet article décrit comment faire cela avec Python et boto.
Pour les applications telles que l'exécution d'une copie sur la ligne de commande, les meilleures méthodes suivantes peuvent être utilisées.
gsutil
Habituellement, le moyen le plus simple de copier des données entre S3 et GCS est d'utiliser la commande gsutil
.
https://cloud.google.com/storage/docs/gsutil
$ gsutil cp s3://bucket/file gs://bucket/file
Rendre GCS compatible à partir de la console de gestion GCS Activer l'accès opérationnel. (Article de référence: Télécharger sur Google Cloud Storage avec AWS CLI ou AWS SDK for PHP)
Les informations suivantes sont requises pour S3 et GCS, veuillez donc les obtenir à l'avance. Bien sûr, l'écrivain a besoin d'une autorisation en écriture.
boto
Installez-le pour utiliser boto.
$ pip install boto
Heureusement, boto peut lire et écrire à la fois dans S3 et GCS (les classes liées à GCS sont implémentées en héritant des classes liées à S3). Il est utilisé pour lire et écrire sur Python.
bucket2bucket.py
from boto.gs.connection import GSConnection
from boto.s3.connection import S3Connection
gs_bucket = GSConnection(
'GS_ACCSESS_KEY', 'GS_SECRET_ACCSESS_KEY').get_bucket('GS_BUCKET_NAME')
s3_bucket = S3Connection(
'S3_ACCSESS_KEY', 'S3_SECRET_ACCSESS_KEY').get_bucket('S3_BUCKET_NAME')
bucket2bucket.py
from StringIO import StringIO
def bucket2bucket(from_bucket, to_bucket, file_name):
io = StringIO()
try:
from_bucket.get_key(file_name).get_file(io)
io.seek(0)
key = to_bucket.new_key(key_name=file_name)
key.set_contents_from_file(io, replace=True) #remplacer permet l'écrasement
finally:
io.close()
D'autres arguments tels que get_file
et set_contents_from_file
peuvent être spécifiés, il est donc recommandé de vérifier la documentation.
bucket2bucket.py
bucket2bucket(s3_bucket, gs_bucket, 'spam')
bucket2bucket(gs_bucket, s3_bucket, 'egg')
De cette façon, boto peut gérer S3 et GCS de la même manière, vous pouvez donc facilement échanger des données entre eux. De plus, Bucket.copy_key
est préparé pour la copie dans le même compartiment, il est donc recommandé de l'utiliser.
Recommended Posts