おーみんブログ

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

【ASP.NET Core(C#)】AWS S3からオブジェクトを取得したり更新したりする方法。

はじめに

ASP.NET CoreプロジェクトでAWS S3からオブジェクトを取得したり更新したりする方法を記載します。

NugetからAWSSDK.S3を取得する

Visual Studioにてプロジェクトを右クリック→「Nugetパッケージの管理」よりAWSSDK.S3をインストールします。

f:id:bookreadkun:20210913204051p:plain

S3からオブジェクトを取得する

S3からオブジェクトを取得する際はGetObjectAsyncメソッドを用います。

AmazonS3Client.GetObjectAsync Method (string, string, CancellationToken) | AWS SDK for .NET V3

return await _amazonS3Client.GetObjectAsync("バケット名", "キー名");

S3へオブジェクトを作成/更新する

S3へオブジェクトを作成/更新する際はPutObjectAsyncメソッドを用います。

AmazonS3Client.PutObjectAsync Method (PutObjectRequest, CancellationToken) | AWS SDK for .NET V3

var putRequest = new PutObjectRequest
    {
        BucketName = "バケット名",
        Key = "キー名",
        FilePath = アップロードするファイル
    };
await _amazonS3Client.PutObjectAsync(putRequest);

キー名が同じものがある場合は更新され、それ以外の場合は新規作成されます。

サンプルコード

今回書いたサンプルコード(一部分)も載せておきます。

public interface IResolveS3Repository
{
    /// <summary>
    /// S3からCSVファイルを取得します。
    /// </summary>
    /// <returns></returns>
    ValueTask<GetObjectResponse> GetCsvFile();

    /// <summary>
    /// S3のCSVファイルを更新します。
    /// </summary>
    /// <returns></returns>
    ValueTask UpdateCsvFile();
}

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);
    }
}

おわりに

このあたりはAWS SDKの公式ドキュメントをもっと読んでしっかり理解を深めていきたいと思います。