簡體   English   中英

AWS .NET SDK 使用 ASP.NET Core 依賴注入配置 S3 客戶端

[英]AWS .NET SDK configure S3 Client with ASP.NET Core Dependency Injection

工具

  • Visual Studio 2017 專業版
  • .NET Core SDK v2.2.102
  • AWSSDK.S3 v3.3.102.14

我想做什么

為使用 localstack 端點作為 S3 的 ServiceURL 的開發環境配置 Amazon S3 客戶端

我正在嘗試使用 ASP.NET Core 的本機依賴注入在我的Startup.cs文件中全局配置 S3 客戶端

public void ConfigureServices(IServiceCollection services)
{
    ...

    services.AddAWSService<IAmazonS3>();
}

問題

我不知道如何為 S3 客戶端設置 ServiceURL。 我在AWS 文檔中看到您可以在appsettings.json文件中配置此屬性。 但是,這並不能解決我的問題,因為我需要集成多個 AWS 服務。

我在谷歌上搜索的所有內容都表明你只需要做這樣的事情:

var s3Client = new AmazonS3Client(new AmazonS3Config
{
    ServiceURL = "http://localhost:5002"
});

但是我必須在使用 S3 客戶端的每個類中都這樣做,這似乎不正確。

任何幫助表示贊賞。 謝謝

好吧,我想我想通了這一點。

而不是使用內置的 ASP.NET Core DI:

services.AddAWSService<IAmazonS3>();

我正在像這樣使用 Autofac( 文檔):

var s3Config = new AmazonS3Config
{
    ServiceURL = _configuration.GetSection("AWS:ServiceURL").Value,
    ForcePathStyle = true
};

builder.RegisterType<AmazonS3Client>()
    .As<IAmazonS3>()
    .WithParameter(new TypedParameter(typeof(AmazonS3Config), s3Config))
    .InstancePerLifetimeScope();

您可以添加對AWSSDK.Extensions.NETCore.Setup的包引用。 這使您可以訪問一些擴展方法,以幫助您在 .NET Core DI 中設置 AWS 服務。

services.AddDefaultAWSOptions(config.GetAWSOptions());
services.AddAWSService<IAmazonS3>();
services.AddAWSService<IAmazonSQS>();

然后,您可以在啟用edge服務的情況下啟動 LocalStack 並設置PORT_EDGE_HTTP

PORT_EDGE_HTTP=50234 SERVICES=edge,s3,sqs localstack start

這允許您對 LocalStack 提供的所有服務使用相同的ServiceURL ,而不是在它們自己的端口上運行的各種特定於服務的 URL。 這可以通過appsettings.json設置。

{
    "AWS": {
        "ServiceURL": "http://localhost:50234"
    }
}

注意:有一件事我還在試圖找出是如何設置ForcePathStyle通過appsettings.json AWS 不需要這個集合,但顯然 LocalStack 需要(至少現在是這樣)。

對於多個AmazonS3Client ,您可以像配置多個IAmazonS3

  1. IAmazonS3

     public interface IAmazonS3A: IAmazonS3 { } public interface IAmazonS3B : IAmazonS3 { }
  2. Startup.cs

     services.AddAWSService<IAmazonS3A>(Configuration.GetAWSOptions("AWSA")); services.AddAWSService<IAmazonS3B>(Configuration.GetAWSOptions("AWSB"));
  3. appsettings.json

     { "AWSA": { "Profile": "local-test-profile", "Region": "us-west-2" }, "AWSB": { "Profile": "local-test-profile", "Region": "us-west-2" }, }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM