Использование AWS SDK в.net с локальным стеком (TransferUtility/S3 - настройка конечной точки)
У меня запущен localstack ( https://github.com/localstack/localstack), и я могу использовать aws s3 cli для загрузки файлов в него.
Я хочу использовать.NET AWS ADK с localstack. Я хотел бы следующий код для загрузки файла в localstack:
using (var tfu = new TransferUtility())
{
await tfu.UploadAsync(new TransferUtilityUploadRequest
{
Key = key,
BucketName = bucketName,
ContentType = document.ContentType,
Headers = { ["Content-Disposition"] = "attachment; filename=\"test.txt\"" },
InputStream = stream
});
}
Моя проблема в том, что я не знаю, как установить конечные точки, чтобы локальный стек использовался SDK, а не aws. Видимо, вы можете установить AWSEndpointDefinition
в appSettings.config, как указано в документации AWS SDK, например:
<add key="AWSEndpointDefinition" value="C:\Dev\localstack\endpoints.json"/>
Однако я понятия не имею, как должна выглядеть эта конфигурация endpoints.json. Я пытался использовать этот файл:
https://raw.githubusercontent.com/aws/aws-sdk-net/master/sdk/src/Core/endpoints.json
Когда я делаю это, как только я TransferUtility
класс, я получаю исключение нулевой ссылки - это прежде, чем я укажу что-либо на мою настройку localstack.
Версия AWS ASK - 3.3.0.
Следует также отметить, что в некоторых местах в документации подразумевается, что конфиг должен быть XML-файлом, а не JSON, однако, когда я пытаюсь использовать XML-файл, я получаю другое исключение при обновлении TransferUtility
: 'Недопустимый символ'<'во входной строке'
2 ответа
Вы можете легко переопределить его, создав клиент S3 и передав его конструктору TransferUtility.
var config = new AmazonS3Config { ServiceURL = "http://localhost:4572" };
var s3client = new AmazonS3Client(config);
Не забудьте заменить URL, если ваш локальный стек использует другой порт для S3.
Надеюсь это поможет.
Я знаю, что это более старый пост, но для тех, кто все еще ищет решение или попал в эту ветку, я хотел бы представить инструмент, который может помочь.
Я поддерживаю проект LocalStack.NET, который представляет собой тонкую оболочку AWS SDK.NET. Он предназначен для автоматической настройки целевых конечных точек для использования LocalStack, что упрощает интеграцию приложений .NET с LocalStack.
Благодаря LocalStack.NET вам не нужно вручную задавать конфигурации конечных точек. Библиотека позаботится об этом за вас. Вот простой пример того, как вы можете его использовать:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddLocalStack(Configuration)
services.AddDefaultAWSOptions(Configuration.GetAWSOptions());
services.AddAwsService<IAmazonS3>();
}
Это автоматически устанавливает конечную точку по умолчанию LocalStack для S3. Библиотека также поддерживает другие сервисы AWS, предоставляемые LocalStack.
Более подробное руководство о том, как начать работу с LocalStack.NET, вы можете посмотреть в документации по началу работы .
Кроме того, недавно я подготовил демонстрационное приложение , демонстрирующее бессерверную архитектуру с использованием .NET, AWS и LocalStack. Это может дать дополнительную информацию об интеграции .NET с LocalStack.
Я надеюсь, что это поможет будущим читателям и всем, кто хочет интегрировать .NET с LocalStack.