Возникли проблемы с доступом к корзине, не использующей регион США, с помощью .Net SDK - PullRequest
6 голосов
/ 22 декабря 2011

Я недавно пытался написать код для добавления и удаления контента из корзины 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, я больше не получаю эту ошибку, но я появляюсьвообще не иметь доступа к этому ведру или к любому другому, к которому у меня обычно был бы доступ.Любой отправленный мной запрос возвращает ноль.

Я проверил свой код с другими сегментами, которые настроены на стандартный регион США, и все это работает хорошо.Единственное отличие заключается в методе CreateAmazonS3Client, где я устанавливаю конфигурацию с конечной точкой ЕС.

Может ли кто-нибудь дать мне несколько советов о том, как мне настроить мой клиент для работы с корзиной в регионе ЕС (Ирландия),Я искал несколько часов, и каждый учебник или документ, которому я следовал, до сих пор не работал.

Ответы [ 2 ]

15 голосов
/ 23 декабря 2011

Просто используйте стандартную конечную точку - 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);
4 голосов
/ 18 мая 2014

К кому это может еще относиться ..

С помощью старых AWS SDK (версия 1) вы можете просто создать клиента S3 без региона или AmazonS3Config. Не нужно указывать URL-адрес службы, он использует для вас значение по умолчанию, упомянутое выше. Единственный раз, когда вам действительно нужен регион для работы с S3, это когда вы создаете сегмент, который, вероятно, редко требуется для приложения. Это работает для меня, и все мое общение с S3 происходит через https.

С новым AWS SDK для .Net (версия 2 и выше) кажется, что параметр region является обязательным, и на самом деле AmazonS3Client выдает исключение, если оно не задано. Я попытался обойти это ограничение, указав общий https://s3.amazonaws.com URL, и потерпел неудачу, поскольку новый SDK не соответствует перенаправлению 301 с конечной точки по умолчанию (думаю, US-EAST-1).

Таким образом, в общем, лучше указать регион, даже на старом API, чтобы избежать взлома в будущем. Если ваше приложение выполняет межрегиональные вызовы и работает медленнее (возможно) и дороже, вероятно, лучше всего, чтобы ваш код подтвердил это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...