У вас есть два варианта
Я предполагаю, что вы установили свои учетные данные AWS на своем компьютере, так как это использует boto3. Если нет, то я думаю, что это выходит за рамки этого вопроса.
Самое простое - сохранить набор данных в файл на диске и затем загрузить его
Я предполагаю, что у вас нет набора данных на диске? Если у вас уже есть файл tif с вашим набором данных, вы можете просто проигнорировать часть createcopy
import boto3
# If you only have your dataset in memory, save your dataset in a tif file on disk
driver = gdal.GetDriverByName('GTiff')
driver.CreateCopy('path_to_tif_file.tif', your_dataset)
s3 = boto3.client('s3')
s3.upload_file('path_to_tif_file.tif', 'bucket_name', 'path_on_s3.tif')
Если вы предпочитаете не сохранять файл TIF на диске
Вы также можете загрузить набор данных непосредственно на S3, однако это немного сложнее
import boto3
def put_tif_from_gdal_mem_dataset(key, dataset, bucket_name):
# Load the dataset into the virtual filesystem
temp_name = '/vsimem/current.tif'
tiff_driver = gdal.GetDriverByName('GTiff')
tiff_driver.CreateCopy(temp_name, dataset)
# Read the raw data from the virtual filesystem
f = gdal.VSIFOpenL(temp_name, 'rb')
gdal.VSIFSeekL(f, 0, 2) # seek to end
size = gdal.VSIFTellL(f)
gdal.VSIFSeekL(f, 0, 0) # seek to beginning
data = gdal.VSIFReadL(1, size, f)
gdal.VSIFCloseL(f)
# Upload the raw data to s3
s3.put_object(Key=key, Bucket=bucket_name, Body=data, ContentLength=size)
gdal.Unlink(temp_name)
put_tif_from_gdal_mem_dataset('path_on_s3.tif', your_dataset, 'bucket_name')