- 開発技術
- クラウド技術
C# で S3 を操作する
- C#
- #AWS
この記事を書いたチーム:frontier

はじめに
【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc. 詳細はこちらから>
現在、参画しているプロジェクトの開発言語がC#であり、AWS S3にあるファイルを操作する処理を実装する必要がありました。そこで、調査した結果を記載します。
S3 の基本概念
バケットとオブジェクト
- バケット:S3上の「フォルダ」のようなもの。保存するファイル(オブジェクト)は必ずバケット内に配置される。
- オブジェクト:保存する実体(ファイル)。オブジェクトにはデータ本体とメタデータ(属性情報)が含まれる。
特徴
- 無制限に近い容量を持つスケーラブルなストレージ
- 高耐久性(99.999999999% = 11ナイン)
- 高可用性(リージョン内で自動的に複数コピー)
C# で S3 を操作するサンプルコード
前提
- .NET 6 以上推奨
- NuGet パッケージに AWSSDK.S3 を追加
dotnet add package AWSSDK.S3
1.ファイルをアップロードする
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
using Amazon.S3; using Amazon.S3.Transfer; class S3UploadSample { private const string bucketName = "my-sample-bucket"; private const string keyName = "uploads/sample.txt"; private const string filePath = @"C:\temp\sample.txt"; private static readonly RegionEndpoint bucketRegion = RegionEndpoint.APNortheast1; // 東京リージョン private static IAmazonS3 s3Client; static async Task Main() { s3Client = new AmazonS3Client(bucketRegion); try { var fileTransferUtility = new TransferUtility(s3Client); // 単純なアップロード await fileTransferUtility.UploadAsync(filePath, bucketName, keyName); Console.WriteLine("Upload completed!"); } catch (AmazonS3Exception e) { Console.WriteLine($"Error encountered: {e.Message}"); } } } |
2.ファイルをダウンロードする
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
using Amazon.S3; using Amazon.S3.Model; class S3DownloadSample { private const string bucketName = "my-sample-bucket"; private const string keyName = "uploads/sample.txt"; private const string filePath = @"C:\temp\downloaded.txt"; private static readonly RegionEndpoint bucketRegion = RegionEndpoint.APNortheast1; private static IAmazonS3 s3Client; static async Task Main() { s3Client = new AmazonS3Client(bucketRegion); try { GetObjectRequest request = new GetObjectRequest { BucketName = bucketName, Key = keyName }; using (GetObjectResponse response = await s3Client.GetObjectAsync(request)) using (var responseStream = response.ResponseStream) using (var fileStream = File.Create(filePath)) { await responseStream.CopyToAsync(fileStream); } Console.WriteLine("Download completed!"); } catch (AmazonS3Exception e) { Console.WriteLine($"Error encountered: {e.Message}"); } } } |
3.ファイルを削除する
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using Amazon.S3; using Amazon.S3.Model; class S3DeleteSample { private const string bucketName = "my-sample-bucket"; private const string keyName = "uploads/sample.txt"; private static readonly RegionEndpoint bucketRegion = RegionEndpoint.APNortheast1; private static IAmazonS3 s3Client; static async Task Main() { s3Client = new AmazonS3Client(bucketRegion); try { DeleteObjectRequest deleteRequest = new DeleteObjectRequest { BucketName = bucketName, Key = keyName }; await s3Client.DeleteObjectAsync(deleteRequest); Console.WriteLine("Delete completed!"); } catch (AmazonS3Exception e) { Console.WriteLine($"Error encountered: {e.Message}"); } } } |
まとめ
AWS S3は単なるファイル置き場ではなく、「アプリのストレージ基盤」「データレイク」「静的Webホスティング」 として幅広く活用できるサービスです。
開発者にとっては、S3を正しく理解して活用することで アプリの拡張性・コスト効率・安全性 を大きく高められます。
また、実装におけるポイントは下記の通り。
・TransferUtility を使うと大きなファイルでも分割アップロード可能
・リージョン指定 は必須 (RegionEndpoint.APNortheast1 は東京)
・認証情報は ~/.aws/credentials または 環境変数 から取得される
(Secrets ManagerやIAMロールを使うのがベストプラクティス)
これからAWSを使う方も、既に使っている方も、自分のシステムにおけるS3の使いどころをぜひ見直してみてください。
【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>



