おーみんブログ

C#, ASP.NET Core, Unityが大好きです。

【ASP.NET Core(C#)】 AmazonS3をDIしてS3へアクセスする!

はじめに

以下の記事でS3からオブジェクトを取得したり更新したりする方法について記載しましたが、こちらの記事ではAmazonS3を利用するための設定(DI)に関する内容を記載します。

oooomincrypto.hatenadiary.jp

AWSSDK.Extensions.NETCore.Setupのインストール

Nugetより"AWSSDK.Extensions.NETCore.Setup"をインストールします。 f:id:bookreadkun:20210918170033p:plain

サービスへ追加

IServiceCollectionへ追加していきます。

public void ConfigureServices(IServiceCollection services)
{
     services.AddDefaultAWSOptions(Configuration.GetAWSOptions());
     services.AddAWSService<IAmazonS3>();
}

利用したい場所でDIする

上記にてDIコンテナへ追加したので、あとは利用したい箇所でDIしてあげます。

public class ResolveS3Repository : IResolveS3Repository
{
    private readonly AWSConfig _awsConfig;
    private readonly LocalStorageConfig _localStorageConfig;
    private readonly IAmazonS3 _amazonS3Client;

    public ResolveS3Repository(
        IOptions<AWSConfig> awsConfig,
        IOptions<LocalStorageConfig> localStorageConfig,
        IAmazonS3 amazonS3Client)
    {
        _awsConfig = awsConfig.Value;
        _localStorageConfig = localStorageConfig.Value;
        _amazonS3Client = amazonS3Client;
    }

    public async ValueTask<GetObjectResponse> GetCsvFile()
        => await _amazonS3Client.GetObjectAsync(_awsConfig.S3.BacketName, _awsConfig.S3.Key);

    public async ValueTask UpdateCsvFile()
    {
        var putRequest = new PutObjectRequest
        {
            BucketName = _awsConfig.S3.BacketName,
            Key = _awsConfig.S3.Key,
            FilePath = _localStorageConfig.CsvPath
        };
        await _amazonS3Client.PutObjectAsync(putRequest);
    }
}