TECH MEDIA

テックメディア


ノウハウ
Amazon S3

【C#】Amazon S3とのオブジェクト連携方法 Part.1

目次
  1. 01|はじめに
  2. 02|Amazon S3とは
  3. 03|Amazon S3とアプリケーションの接続
  4. 04|Amazon S3内のオブジェクトの取得方法
  5. 05|Amazon S3にオブジェクトを転送する方法
  6. 06|さいごに

1. はじめに

こんにちは。三度の飯より酒が好き。エンジニアの岩澤です。
今回はAWSの中でも主要サービスの「Amazon S3」と
アプリケーションのオブジェクト連携方法等について紹介したいと思います。
Part.1、Part.2と2回に分けて解説しますので是非ご一読ください!

2. Amazon S3とは

そもそも「Amazon S3って何ぞや!」という方のために簡単に説明すると、
Amazon S3とはAWSが提供するデータを格納・管理できるオブジェクトストレージサービスです。
使用用途としては、大量の画像データの保存やログデータの保存等、様々なデータの保存に利用されます。
Amazon S3を利用するメリットは以下のとおりです。
1. 優れた耐久性・可用性
2. 低コストで利用できる
3. サーバー不要で、静的コンテンツのWebサイト公開が可能
4. データの保持期間をコントロールできる
5. 柔軟な権限管理
6. 保管する“場所”を自由に指定可能
上記であげたようなメリットがあるため、
使いやすく、信頼性が高く、コスト効率の良いデータストレージ
として広く利用されています。

3. Amazon S3とアプリケーションの接続

まずは前提条件の確認です。
●前提条件:NuGetより「AWSSDK.Core」および「AWSSDK.S3」のパッケージをインストール済み。
クライアントを生成します。クライアントは下記のように生成することができます。
var client = new AmazonS3Client(

 

    “xxxxx”, // アクセスキー

 

    “yyyyy”, // シークレットアクセスキー

 

    RegionEndpoint.APNortheast1); // エンドポイント(RegionEndpointの定数から指定可能)

 

4. Amazon S3内のオブジェクトの取得方法

Amazon S3のオブジェクトを取得するには「ListObjectsV2Request」クラスでリクエスト情報を生成し、
「ListObjectsV2Responseクラス型」で受け取ります。
S3の各オブジェクトは「S3Objectクラス型」として格納され、レスポンス情報の「ListObjectsV2Response」クラスから
S3オブジェクトを取得できます。
例)Amazon S3から各オブジェクトを取得し、リストに格納する
// クライアント生成

 

var client = new AmazonS3Client(

 

    “xxxxx”, // アクセスキー

 

    “yyyyy”, // シークレットアクセスキー

 

    RegionEndpoint.APNortheast1); // エンドポイント(RegionEndpointの定数から指定可能)

 

// S3バケット内のオブジェクトを取得

 

var requests = new ListObjectsV2Request

 

{

 

    BucketName = “testBucket” // バケット名

 

};

 

// S3オブジェクトを格納するコレクション

 

var s3Objects = new List<S3Object>();

 

ListObjectsV2Response listResponse;

 

do

 

{

 

    listResponse = client.ListObjectsV2(requests);

 

    s3Objects.AddRange(listResponse.S3Objects);

 

    requests.ContinuationToken = listResponse.NextContinuationToken;

 

}

 

while (listResponse.IsTruncated);

 

S3のオブジェクトは1回のリクエストでは「最大1000個」までしか取得できません。
そのため、do-while分にてループを行う必要があります。
IsTruncatedは1週目で1000個オブジェクトを取得後に1001個目にオブジェクトがあるかをbool値で返してくれるため
これらを利用することでS3内のオブジェクトをすべて取得することができます。

5. Amazon S3にオブジェクトを転送する方法

Amazon S3にオブジェクトを転送するには「TransferUtility」クラスを利用します。
「ListObjectsV2Request」クラスでリクエスト情報を生成し、「TransferUtility」クラスに渡すことで転送できます。
例)Amazon S3にローカルの画像ファイルを転送する方法

// クライアント生成
var client = new AmazonS3Client(
    "xxxxx", // アクセスキー
    "yyyyy", // シークレットアクセスキー
    RegionEndpoint.APNortheast1); // エンドポイント(RegionEndpointの定数から指定可能)
// 転送用クラス
var transferUtility = new TransferUtility(client);
// 転送対象ファイルのリクエスト情報生成
var uploadRequest = new TransferUtilityUploadRequest
{
    BucketName = "testBucket", // バケット名
    Key = "/test/A.jpg", // 転送した後のS3配置ディレクトリ(S3キー)
    FilePath = file // 転送対象のローカルのファイルパス
};
// アップロード
transferUtility.Upload(uploadRequest);
 

6. さいごに

ご愛読いただきありがとうございました。
今回は、簡潔にAmazon S3とのオブジェクト連携方法について紹介しました。
次回は、アップロードの応用編や、実際にアップロードのS3の画像などを
エンドユーザー側に表示される方法などについて紹介したいと思います!
RECRUIT 採用情報

「eビジネスに関わる全ての人を幸せにする」
私達とともに新たな時代をつくりませんか?