Amazon S3 でファイルの保存と取り出し - AWS Mobile SDK

AWSの Mobile SDK for Xamarin が、AWS SDK for .NETに含まれるようになりました。このガイドでは、Mobile SDK for Xamarin のアーカイブバージョンについて説明します。

Amazon S3 でファイルの保存と取り出し

「Amazon Simple Storage Service (Amazon S3)」を使用すると、モバイル開発者は、耐久性および耐障害性が高く、セキュアなオブジェクトストレージを使用できるようになります。Amazon S3 の使用方法は簡単です。シンプルなウェブサービスインターフェイスを使用して、ウェブ上のどこからでも容量に関係なくデータを保存、取得できます。

以下のチュートリアルでは、S3 をお客様のアプリで使用するための高度なユーティリティである S3 TransferUtility を統合する方法について説明します。Xamarin アプリケーションから S3 を使用する方法の詳細については、「Amazon Simple Storage Service (S3)」を参照してください。

プロジェクトのセットアップ

前提条件

このチュートリアルを開始する前に、必ず「AWS Mobile SDK for .NET and Xamarin をセットアップする」の手順をすべて完了する必要があります。

このチュートリアルでは、S3 バケットをすでに作成していることを前提としています。S3 バケットを作成するには、S3 AWS コンソールに移動しします。

S3 のアクセス許可を設定

デフォルトの IAM ロールのポリシーでは、Amazon Mobile Analytics および Amazon Cognito Sync へのアクセス権がアプリケーションに付与されています。Cognito ID プールから Amazon S3 にアクセスできるようにするには、ID プールのロールを変更する必要があります。

  1. Identity and Access Management コンソールに移動し、左側のペインの [ロール] をクリックします。

  2. 検索ボックスに ID プールの名前を入力します。2 つのロール (未認証ユーザーと認証済みユーザー) が表示されます。

  3. 未認証ユーザーのロールをクリックします (unauth を ID プール名に追加)。

  4. [ロールポリシーの作成] をクリックして [Policy Generator] を選択し、[選択] をクリックします。

  5. [アクセス許可の編集] ページで、以下のイメージに示す設定を入力し、Amazon リソースネーム (ARN) を実際の名前に置き換えます。S3 バケットの ARN は、arn:aws:s3:::examplebucket/* のように表示され、バケットを配置するリージョンとバケットの名前で構成されます。以下に示す設定では、ID プールから指定したバケットのすべてのアクションにフルアクセスを付与しています。

    Edit Permissions interface for AWS policy creation, showing options for Amazon S3 access control.
  1. [ステートメントを追加] ボタンをクリックし、[次のステップ] をクリックします。

  2. ウィザードに、生成した設定が表示されます。[ポリシーの適用] をクリックします。

S3 に対するアクセス権の付与の詳細については、「Amazon S3 バケットへアクセス権を付与する」を参照してください。

S3 の NuGet パッケージをプロジェクトに追加する

AWS Mobile SDK for .NET and Xamarin のセットアップ」のステップ 4 に従って、S3 NuGet パッケージをプロジェクトに追加します。

(オプション) S3 リクエストの署名バージョンを設定する

Amazon S3 とのすべてのやり取りは認証されるか匿名で行われます。AWS では、署名バージョン 4 または署名バージョン 2 のアルゴリズムを使用して、サービスへの呼び出しを認証します。

2014 年 1 月以降に作成されたすべての新しい AWS リージョンでは、署名バージョン 4 のみをサポートしています。ただし、以前のリージョンの多くは、現在も署名バージョン 4 および署名バージョン 2 のリクエストに対応しています。

バケットが、こちらのページの署名バージョン 2 のリクエストをサポートしていないリージョンのいずれかにある場合は、次のように、AWSConfigsS3.UseSignatureVersion4 プロパティを「true」に設定する必要があります。

AWSConfigsS3.UseSignatureVersion4 = true;

AWS 署名バージョンの詳細については、「リクエストの認証 (AWS 署名バージョン 4)」を参照してください。

S3 TransferUtility クライアントを初期化します。

S3 クライアントを作成して、次のように AWS 認証情報を渡し、続いて S3 クライアントを転送ユーティリティに渡します。

var s3Client = new AmazonS3Client(credentials,region); var transferUtility = new TransferUtility(s3Client);

Amazon S3 にファイルをアップロード

S3 にファイルをアップロードするには、Transfer Utility オブジェクトの Upload を呼び出し、次のパラメータを渡します。

  • file - アップロードするファイルの文字列名。

  • bucketName - ファイルを保存する S3 バケットの文字列名。

transferUtility.Upload( Path.Combine(Environment.SpecialFolder.ApplicationData,"file"), "bucketName" );

上記のコードは、ファイルがディレクトリ (Environment.SpecialFolder.ApplicationData) にあることを前提としています。大容量ファイルをアップロードする場合は、自動的に S3 のマルチパートアップロード機能が使用されるため、スループットが向上します。

Amazon S3 からのファイルのダウンロード

S3 からファイルをダウンロードするには、Transfer Utility オブジェクトの Download を呼び出し、次のパラメータを渡します。

  • file - ダウンロードするファイルの文字列名。

  • bucketName - ファイルのダウンロード元の S3 バケットの文字列名。

  • key - ダウンロードする S3 オブジェクト (この場合はファイル) の名前を表す文字列。

transferUtility.Download( Path.Combine(Environment.SpecialFolder.ApplicationData,"file"), "bucketName", "key" );

Xamarin アプリケーションから Amazon S3 へのアクセスの詳細については、「Amazon Simple Storage Service (S3)」を参照してください。