Assez basique mais je ne suis pas en mesure de télécharger des fichiers étant donné le chemin s3.
par exemple, j'ai ce s3://name1/name2/file_name.txt
import boto3
locations = ['s3://name1/name2/file_name.txt']
s3_client = boto3.client('s3')
bucket = 'name1'
prefix = 'name2'
for file in locations:
s3_client.download_file(bucket, 'file_name.txt', 'my_local_folder')
Je reçois une erreur en tant que botocore.exceptions.ClientError: An error occurred (404) when calling the HeadObject operation: Not Found
Ce fichier existe comme lors du téléchargement. en utilisant aws cli comme s3 path: s3://name1/name2/file_name.txt .
Vous devrez peut-être le faire avec un certain type d'authentification. Il existe plusieurs méthodes, mais la création d'une session est simple et rapide:
from boto3.session import Session
bucket_name = 'your_bucket_name'
folder_prefix = 'your/path/to/download/files'
credentials = 'credentials.txt'
with open(credentials, 'r', encoding='utf-8') as f:
line = f.readline().strip()
access_key = line.split(':')[0]
secret_key = line.split(':')[1]
session = Session(
aws_access_key_id=access_key,
aws_secret_access_key=secret_key
)
s3 = session.resource('s3')
bucket = s3.Bucket(bucket_name)
for s3_file in bucket.objects.filter(Prefix=folder_prefix):
file_object = s3_file.key
file_name = str(file_object.split('/')[-1])
print('Downloading file {} ...'.format(file_object))
bucket.download_file(file_object, '/tmp/{}'.format(file_name))
Dans credentials.txt
fichier vous devez ajouter une seule ligne où vous concaténerez l'ID de la clé d'accès et le secret, par exemple:
~$ cat credentials.txt
AKIAIO5FODNN7EXAMPLE:ABCDEF+c2L7yXeGvUyrPgYsDnWRRC1AYEXAMPLE
N'oubliez pas de bien protéger ce fichier sur votre hôte, accordez des autorisations en lecture seule à l'utilisateur qui exécute ce programme. J'espère que cela fonctionne pour vous, cela fonctionne parfaitement pour moi.