Я пишу код для загрузки файлов в AWS S3 и получаю это исключение:
AmazonClientException: не настроено RegionEndpoint или ServiceURL
Мой код:
Console.WriteLine("ready to upload");
AWSCredentials credentials;
credentials = new BasicAWSCredentials(accessKeyID.Trim(), secretKey.Trim());
AmazonS3Client s3Client = new AmazonS3Client(accessKeyID.Trim(), secretKey.Trim(), Amazon.RegionEndpoint.USEast1);
Console.WriteLine("Successful verification");
Console.WriteLine("Check if the bucket exists");
if (!CheckBucketExists(s3Client, bucketName))
{
s3Client.PutBucket(bucketName);
Console.WriteLine("create bucket");
}
TransferUtility utility = new TransferUtility();
Console.WriteLine("Upload Directory......");
//exception here
utility.UploadDirectory(@"E:\telerikFile\13ginabdfglil.com", bucketName);
Исключение:
Amazon.Runtime.AmazonClientException: No RegionEndpoint or ServiceURL configured
Amazon.Runtime.ClientConfig.Validate()
Amazon.S3.AmazonS3Config.Validate()
Amazon.Runtime.AmazonServiceClient..ctor(AWSCredentials credentials, ClientConfig config)
Amazon.S3.AmazonS3Client..ctor()
Amazon.S3.Transfer.TransferUtility..ctor()
Telerik2Amazon.Program.UploadFile()
Что я должен делать?
Для таких сервисов, как S3 или EC2, необходимо указать конечную точку. Так что new AmazonS3Client(credentials, RegionEndpoint.USEast1)
должно работать. — person xiehongguang schedule 21.07.2020
Можно использовать мой идентификатор ключа доступа и секретный ключ.
Поэтому я отказываюсь от использования класса TransferUtility и выбираю другой класс с именем PutObjectRequest для загрузки моих файлов
attontion: свойство PutObjectRequest Key , имя каталога и имя файла должны совпадать с именем каталога и имени файла локальных файлов.
здесь коды:
Краткий ответ на ошибку …
… в моем случае было указать регион при построении клиентского объекта (для меня это было
AmazonSimpleEmailServiceClient
).Предполагая, что вы используете
BasicAWSCredentials
, попробуйте следующее:Если вы используете
TransferUtility()
, попробуйте следующее:В Asp.Net эту ошибку можно исправить, добавив эту строку в Web.config:
У меня работал для AWSSDK.SimpleEmail v3.3
Вместо этого используйте
/.aws/credentials
файл. Его легко создать с помощьюVisual Studio AWS Toolkit
. Это имеет смысл, потому что при развертывании экземпляр EC2 / Lambda использует метаданные ролей и получает всю необходимую информацию. Извините -1, потому что люди затем копируют и вставляют это, не понимая, как работают учетные данные AWS (например, я) — person xiehongguang; 05.02.2021Прежде всего, вам не следует жестко кодировать учетные данные aws.
У меня была аналогичная ошибка. Оказалось, это из-за изменений в .Net Core:
Для быстрого и грязного подхода вы можете создать файл достоверного профиля на своем компьютере, см. https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
например
C:\Users\<USERNAME>\.aws\credentials
в Windowsтогда в своем коде вы можете просто сделать что-то вроде:
Более сложный способ: https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-netcore.html#net-core-configuration-builder
appsettings.Development.json
По-прежнему следует избегать жесткого кодирования региона … потому что, если вы переместите его в Европу или Азию … вы будете подключаться не к тому устройству. В AWS он просто использует доступ к ролям и регионам исполняемого кода. Профили действительно существуют, чтобы переопределить это, если необходимо … но это редко бывает — используйте более сложный способ, который действительно является более предпочтительным способом … и не такой сложный — person xiehongguang; 05.02.2021
Проблема, которую я обнаружил, заключается в том, что мне нужно было использовать метод DryRun () из AmazonEC2Client, который недоступен в IAmazonEC2. Если я попытаюсь использовать CreateServiceClient ‹T› () с AmazonEC2Client, он не сможет создать клиента, выбрасывая объект, для которого не установлена эталонная ошибка
— person xiehongguang; 22.04.2021
Я получил эту ошибку при запуске тестов для лямбды, использующей клиент S3. Я разрешил ошибку, просто предоставив профиль по умолчанию с регионом, определенным в
~/.aws/config
:Изменения кода лямбда не требуется. Конечно, YMMV в зависимости от ваших обстоятельств.