遵循本教程:https://www.usgs.gov/media/files/landsat-cloud-direct-access-requester-pays-tutorial
import boto3
import rasterio as rio
from matplotlib.pyplot import imshow
from rasterio.session import AWSSession
s3 = boto3.client('s3', aws_access_key_id=AWS_KEY_ID,
aws_secret_access_key=AWS_SECRET)
resources = boto3.resource('s3', aws_access_key_id=AWS_KEY_ID,
aws_secret_access_key=AWS_SECRET)
aws_session = AWSSession(boto3.Session())
cog = 's3://usgs-landsat/collection02/level-2/standard/oli-tirs/2020/026/027/LC08_L2SP_026027_20200827_20200906_02_T1/LC08_L2SP_026027_20200827_20200906_02_T1_SR_B2.TIF'
with rio.Env(aws_session):
with rio.open(cog) as src:
profile = src.profile
arr = src.read(1)
imshow(arr)
我得到以下错误:
rasterio.errors.RasterioIOError: '/vsis3/usgs-landsat/collection02/level-2/standard/oli-tirs/2020/026/027/LC08_L2SP_026027_20200827_20200906_02_T1/LC08_L2SP_026027_20200827_20200906_02_T1_SR_B2.TIF' does not exist in the file system, and is not recognized as a supported dataset name.
我得到:
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
我在EC2实例中运行了cloudshell命令,出现了相同的错误
我需要在文档中指定我是请求者,我有权这样做:
aws s3 ls s3://usgs-landsat/collection02/level-2/standard/oli-tirs/2020/026/027/LC08_L2SP_026027_20200827_20200906_02_T1/ --request-payer requ
ester
使用boto3仍然不起作用
我对与我一起运行boto3的用户具有管理员权限。在CloudShell中获得与boto用户和root用户相同的错误。我以前使用过访问密钥和密钥,它可以从“陆地卫星pds”存储桶(只有L8个图像)和“sentinel-s2-l1c”存储桶下载。似乎只有“美国地质勘探局陆地卫星”桶(https://registry.opendata.aws/usgs-landsat/)有问题
还尝试使用s3.list_对象访问usgs陆地卫星存储桶:
landsat = resources.Bucket("usgs-landsat")
all_objects = s3.list_objects(Bucket = 'usgs-landsat')
得到一个类似的错误:
botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied
在查看其他解决方案后,一些用户发现:
os.environ["AWS_REQUEST_PAYER"] = "requester"
os.environ["CURL_CA_BUNDLE"] = "/etc/ssl/certs/ca-certificates.crt"
为了解决他们的问题,这对我不起作用
正如您正确指出的,
usgs-landsat
S3 bucket是请求者付费的,因此您需要正确配置rasterio
以处理该问题如您所见here,
rasterio.session.AWSSession
有一个requester_pays
参数,您可以将其设置为True
以便执行此操作我还可以指出:
在您的代码段中不需要使用
s3
和resources
变量,因为以后不会重用这些变量事实上,如果您的凭证正确地位于} python包(请参见documentation)提供的命令行实用程序
~/.aws/
文件夹中——这可以通过运行^{aws configure
来完成——您根本不需要导入boto3
,rasterio
为您完成因此,您的代码段可以修改为:
在我的机器上运行正常
这对我有用
相关问题 更多 >
编程相关推荐