Comment télécharger un fichier depuis un bucket AWS S3 public (sans informations d'identification) avec python ?

Created 13 novembre 2022 | Edited 14 novembre 2022 | Viewed 97 | by Benjamin Edit


Exemple de comment télécharger un fichier depuis un bucket AWS S3 public (sans informations d'identification) avec python ?

Exemple avec la NOAA AWS S3 bucket

Considérons la publique bucket s3 NOAA. Nous voulons télécharger un fichier du dossier suivantSNPP/VIIRS/SNPP_AF_I-Band_EDR_NRT/2022/09/09/.

Installer boto3

Pour télécharger un fichier depuis un bucket aw S3 avec python, une solution consiste à utiliser boto3. Pour installer boto3 avec anaconda :

conda install -c anaconda boto3

Trouver tous les fichiers dans un dossier S3

Une première étape consiste souvent à répertorier tous les fichiers dans un dossier de compartiment S3. Pour ce faire une solution est de faire

import boto3

from botocore import UNSIGNED
from botocore.config import Config

s3 = boto3.resource('s3', config=Config(signature_version=UNSIGNED))

bucket = "noaa-jpss"
folder = "SNPP/VIIRS/SNPP_AF_I-Band_EDR_NRT/2022/09/09/"

s3_bucket = s3.Bucket(bucket)

files_in_s3 = [f.key.split(folder + "/")[0] for f in s3_bucket.objects.filter(Prefix=folder).all()]

Notez que UNSIGNED a été utilisé ici car aucune information d'identification n'est requise.

revient ici :

  ['SNPP/VIIRS/SNPP_AF_I-Band_EDR_NRT/2022/09/09/AF-Iband_v1r0_npp_s202209082232478_e202209082234120_c202209090027207.nc',
     'SNPP/VIIRS/SNPP_AF_I-Band_EDR_NRT/2022/09/09/AF-Iband_v1r0_npp_s202209082234132_e202209082235374_c202209090027250.nc',
     'SNPP/VIIRS/SNPP_AF_I-Band_EDR_NRT/2022/09/09/AF-Iband_v1r0_npp_s202209082235387_e202209082237028_c202209090027364.nc',
     'SNPP/VIIRS/SNPP_AF_I-Band_EDR_NRT/2022/09/09/AF-Iband_v1r0_npp_s202209082237041_e202209082238282_c202209090025187.nc',
     'SNPP/VIIRS/SNPP_AF_I-Band_EDR_NRT/2022/09/09/AF-Iband_v1r0_npp_s202209082238295_e202209082239536_c202209090025206.nc',
     'SNPP/VIIRS/SNPP_AF_I-Band_EDR_NRT/2022/09/09/AF-Iband_v1r0_npp_s202209082239549_e202209082241190_c202209090027181.nc',

Télécharger un fichier donné

Maintenant, pour télécharger un fichier, une solution consiste à utiliser la fonction boto3 download_file()

s3 = boto3.client('s3', config=Config(signature_version=UNSIGNED))

bucket_name = "noaa-jpss"
bucket_dir = "SNPP/VIIRS/SNPP_AF_I-Band_EDR_NRT/2022/09/10/"

filename = 'AF-Iband_v1r0_npp_s202209092219338_e202209092220580_c202209100006307.nc'

s3.download_file(Filename=filename,Bucket=bucket_name,Key=bucket_dir + filename)