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)