在使用.net SDK访问不使用美国区域的桶时遇到问题

本文关键字:问题 区域 遇到 net SDK 访问 美国 | 更新日期: 2023-09-27 18:18:33

我最近一直在尝试编写代码来添加和删除Amazon S3桶中的内容。我对Amazon S3和AmazonWS . net SDK完全是新手。

桶区域端点是http://sqs.eu-west-1.amazonaws.com,所以我这样构造我的客户端:

_s3Client = AWSClientFactory.CreateAmazonS3Client(accessKey, awsSecretKey, new AmazonS3Config().WithServiceURL("http://sqs.eu-west-1.amazonaws.com"));

如果我省略AmazonS3Config位,我会得到这个错误:

返回的重定向没有新位置。这可能是由以下原因引起的试图访问名称中有句号的桶区域,然后配置客户端。

当我放入AmazonS3Config位时,我不再得到该错误,但我似乎根本无法访问此桶或我通常可以访问的任何其他桶。我发送的任何请求都返回null。

我已经用配置为标准美国地区的其他桶测试了我的代码,它都运行良好。唯一的区别是在CreateAmazonS3Client方法中,我使用EU端点设置了配置。

谁能给我一些指导,我应该如何设置我的客户与欧盟(爱尔兰)地区的桶工作。我已经搜索了几个小时,到目前为止,我所遵循的每个教程或文档都不起作用。

在使用.net SDK访问不使用美国区域的桶时遇到问题

使用标准端点- s3.amazonaws.com

AmazonS3Config S3Config = new AmazonS3Config {
    ServiceURL = "s3.amazonaws.com",
    CommunicationProtocol = Amazon.S3.Model.Protocol.HTTP
};
AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(AWS_Key, AWS_SecretKey, S3Config);
PutObjectRequest UploadToS3Request = new PutObjectRequest();
UploadToS3Request.WithFilePath(localPath)
                 .WithBucketName(bucket)
                 .WithKey(key);
client.PutObject(UploadToS3Request);

给那些可能仍然关心的人…

使用旧的AWS sdk(版本1),您可以简单地创建没有区域或AmazonS3Config的S3客户端。不需要指定服务URL,它为您使用前面提到的默认URL。真正需要使用S3使用该区域的唯一情况是在创建bucket时,这可能很少是应用程序的需求。这对我和我执行的所有通信S3是通过https。

对于。net的新AWS SDK(版本2及以上),似乎区域参数是必需的,事实上,如果没有给出一个,AmazonS3Client将抛出异常。我已经尝试通过指定一个通用的https://s3.amazonaws.com URL来解决这个限制,但是失败了,因为新的SDK不遵循从默认(我认为是US-EAST-1)端点的301重定向。

所以总的来说,最好指定区域,即使在旧的API上,以避免在未来打破。如果您的应用程序进行跨区域调用,并且速度较慢(可能)且成本较高,那么最好让您的代码证明这一点。