J'essaie d'écraser certaines variables dans boto3
en utilisant le fichier de configuration (~/aws/confg
). Dans mon dossier utilisateur, je souhaite utiliser le service fakes3
et envoyer des requêtes S3 à l'hôte local.
Dans boto
(pas boto3
), je peux créer une configuration dans ~/.boto
semblable à celle-ci:
[s3]
Host = localhost
calling_format = boto.s3.connection.OrdinaryCallingFormat
[Boto]
is_secure = False
Et le client peut capturer avec succès les modifications souhaitées et au lieu d’envoyer du trafic au service S3 réel, il l’enverra à l’hôte local.
>>> import boto
>>> boto.connect_s3()
S3Connection:localhost
>>>
J'essaie d'obtenir un résultat similaire en utilisant la bibliothèque boto3
. En regardant le code source, j'ai découvert que je pouvais utiliser ~/aws/config
location. J'ai également trouvé un exemple de configuration dans le dossier unittests
de botocore
.
J'ai essayé de modifier la configuration pour obtenir le comportement souhaité. Mais malheureusement ça ne marche pas.
Voici la config:
[default]
aws_access_key_id = XXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYY
region = us-east-1
is_secure = False
s3 =
Host = localhost
clients
à l'aide d'un fichier de configuration?Vous ne pouvez pas définir Host dans le fichier de configuration, mais vous pouvez le remplacer à partir de votre code avec boto3.
import boto3
session = boto3.session.Session()
s3_client = session.client(
service_name='s3',
aws_access_key_id='aaa',
aws_secret_access_key='bbb',
endpoint_url='http://localhost',
)
Ensuite, vous pouvez interagir comme d'habitude.
print(s3_client.list_buckets())
boto3
lit uniquement la version de la signature pour s3 à partir de ce fichier de configuration. Vous voudrez peut-être ouvrir une demande de fonctionnalité, mais pour l'instant, voici comment vous pouvez adresser un point de terminaison personnalisé:
import boto3
from botocore.utils import fix_s3_Host
resource = boto3.resource(service_name='s3', endpoint_url='http://localhost')
resource.meta.client.meta.events.unregister('before-sign.s3', fix_s3_Host)
Ce point concernant la méta est important car boto3
change automatiquement le noeud final en your_bucket_name.s3.amazonaws.com
quand il le juge utile 1 . Si vous travaillez avec votre propre hôte et s3, vous voudrez peut-être remplacer la fonctionnalité plutôt que de la supprimer complètement.
Autrement:
import boto3
s3client = boto3.client('s3', endpoint_url='http://X.X.x.X:8080/',
aws_access_key_id = 'XXXXXXX',
aws_secret_access_key = 'XXXXXXXX')
bucket_name = 'aaaaa'
s3client.create_bucket(Bucket=bucket_name)
en utilisant la ressource boto3:
import boto3
# use third party object storage
s3 = boto3.resource('s3', endpoint_url='https://URL:443',
aws_access_key_id = 'AccessKey',
aws_secret_access_key = 'SecertKey')
# Print out bucket names
for bucket in s3.buckets.all():
print(bucket.name)