AWS SDK for .NETを使ってVB.NETでAmazon S3からダウンロード・アップロードする方法

Amazon S3

Visual Studioが個人利用無料になったので、かねてから興味のあったAWS SDK for .NETを使ってみました。

公式リファレンスやサンプルにはC#の記述しかありませんでしたが、VB.NET(Visual Basic.NET)でも普通に使えたので、SDKのインストールから実際のWindowsアプリケーションでファイルをアップロード・ダウンロードする方法をサンプルコード付きでメモします。

AWS SDK for .NETとは

AWS公式より提供されている、AWSの各サービスをVB.NETやC#から簡単に使えるようにするための開発者向けSDKです。

公式サイト:AWS SDK for .NET | アマゾン ウェブ サービス(AWS 日本語)

前提条件

本エントリの手順では事前に以下のものが必要です。

  • Microsoft Visual Studio 2010 以降のバージョン
    個人利用が無料のVisual Studio 2013 Communityのインストール方法をこちらのエントリで紹介しています。
  • AWSアカウント
  • Amazon S3にフルアクセス権のあるAWSアクセスキー・AWSシークレットアクセスキー
    AWSアクセスキー・AWSシークレットアクセスキーの取得方法はこちらのページが参考になります。

AWS SDK for .NETのダウンロード

AWS SDK for .NETは公式サイトの「AWS SDK for .NET」ボタンからダウンロード可能です。

AWS SDK for .NET

本エントリ執筆時点では「AWSToolsAndSDKForNet_sdk-2.3.8.1-ps-2.3.8.1-tk-1.7.1.1.msi」というファイル名のWindowsインストーラがダウンロードされます。
AWS SDK for .NET インストーラ

AWS SDK for .NETのインストール

ダウンロードしたインストーラをダブルクリックして実行します。インストールはデフォルトの設定で進めていけばOKです。

Nextをクリックします。
AWS SDK for .NET インストール

「I accept terms in the License Agreement」にチェックを入れてNextをクリックします。
AWS SDK for .NET インストール

デフォルトの状態では.NET Framework 3.5や4.5用、Windows Phone用のSDKなどがすべてインストールされます。そのままNextをクリックします。
AWS SDK for .NET インストール

Installをクリックします。(管理者権限が必要です)
AWS SDK for .NET インストール

インストールは数分で完了します。
AWS SDK for .NET インストール

インストール完了です。
AWS SDK for .NET インストール

プロジェクトの作成

Visual Studioを起動すると初回のみAWS Toolkitのようこそ画面が出ます。右上の「×」ボタンで閉じてOKです。
Visual Studio AWS Toolkit

下図の位置の「新しいプロジェクト」または「ファイル→新しいプロジェクト」を選択します。
Visual Studio 新規プロジェクトの作成

テンプレートより「Visual Basic」、画面中央より「Windows フォーム アプリケーション」を選択します。画面下部の「名前」は任意のプロジェクト名称に変更します。
Visual Studio Windows フォームアプリケーションの作成

プロジェクトが作成されるとまっさらなフォーム画面が表示されます。
Visual Studio 初期フォーム

Visual Studioでアカウントプロファイルの作成

AWSの各リソースにアクセスするためのアカウントプロファイルを作成する手順です。

メニューの「表示」から「AWS Explorer」を選択します。
Visual Studio AWS Explorer

画面左に「AWS Explorer」が表示されます。下図赤枠で囲った「+」ボタンをクリックすると、アカウントプロファイル入力画面が表示されます。
Visual Studio AWSアカウントプロファイル

今回はAmazon S3を使ったアプリを作成するので、以下の情報を入力します。

項目
Profile Name 任意の文字列(後ほど使用)
Access Key ID Amazon S3にフルアクセス権のあるアクセスキー
Secret Access Key Amazon S3にフルアクセス権のあるシークレットアクセスキー
Account Number 空欄
Account Type Standard AWS Account

AWSアカウントプロファイル

情報を入力したらOKボタンを押します。

AWSSDK.dllの参照の追加

そのままの状態ではAPIが使用できない(各種クラスを読み込めない)ので、参照の追加よりAWS SDK for .NETのDLLを追加します。

「プロジェクト」→「参照の追加」を選択します。参照マネージャーが開きます。
Visual Studio 参照の追加

画面左の「参照」を選択し、右下の「参照」ボタンを押します。
Visual Studio 参照の追加

ファイル選択画面になるため、以下のフォルダを開き、AWSSDK.dllAWS.SessionPrivider.dllAWS.TraceListner.dllを「追加」します。

C:\Program Files (x86)\AWS SDK for .NET\bin\Net45

AWSSDK.DLL参照の追加

参照マネージャーに戻ると追加したファイルが表示されているため、右下の「OK」ボタンを押します。
AWSSDK.DLL参照の追加

アプリの設定ファイル(App.config)の編集

アプリの設定ファイル(App.config)を編集し、アカウントプロファイル名とリージョンを記述します。設定ファイル(App.config)の変更前後では以下のようになります。

App.config変更前(初期状態)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

App.config変更後

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <appSettings>
    <add key="AWSProfileName" value="アカウントプロファイル名称"/>
    <add key="AWSRegion" value="ap-northeast-1"/>
    <add key="AWSLogging" value="log4net"/>
  </appSettings>
</configuration>

AWSProfileNameの値には前述の「Visual Studioでアカウントプロファイルの作成」の手順で作成したプロファイル名称(Profile Name)を指定します。また今回はリージョンに東京ap-northeast-1を指定しました。

App.configにこれらの情報を記述することで、コーディングの際にAWS認証情報やリージョン指定を記述しなくて済むようになります。

フォーム(デザイン)の準備

画面左のツールボックスより、「Button」をフォームに2つドラッグ&ドロップで設置します。
Visual Studio Buttonの追加

左のボタン、右のボタンのTextプロパティをそれぞれGetObjectPutObjectに変えておきます。
Visual Studio ボタンのテキストプロパティ編集

フォーム(コード)の準備とと名前空間のインポート

今回はサンプルなのでForm1.vbにベタ書きする形で作成します。

「Form1.vb(デザイン)」の2つのボタンをそれぞれダブルクリックすると、以下のような形で「Form1.vb(コード)」にボタンをクリックした時に発生するイベントButton1_ClickButton2_Clickが自動生成されます。

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    End Sub


    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    End Sub

End Class

また、名前空間を毎回指定するのは面倒なのでForm1.vbの冒頭で名前空間をインポートしておきます。

Imports Amazon
Imports Amazon.S3
Imports Amazon.S3.Model

ここまででコードは以下のようになっています。
Visual Studio ボタンクリック処理

Amazon S3からのファイルダウンロード(サンプルコードあり)

Amazon S3からのファイルダウンロードはAmazonS3ClientクラスのGetObjectメソッドを使います。流れとしては以下のような感じです。

  • AmazonS3へのリクエスト(バケット・キー等の情報)を作成
  • GetObjectメソッドでファイルをダウンロード
  • ダウンロードしたファイルをローカルに保存

以下はサンプルコードです。バケット・キー・ローカルファイルパスの部分はご自分の環境のものに変更してください。(エラー処理はしていません)

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim objS3Client As New AmazonS3Client
        Dim objS3GetRequest As New GetObjectRequest
        Dim objS3GetResponse As New GetObjectResponse

        'バケットを指定
        objS3GetRequest.BucketName = "s3sample-20141119"
        'キーを指定
        objS3GetRequest.Key = "ios7colors-gradient01-lancork.jpg"

        'リクエストをパラメータに指定してGetObjectメソッドを実行
        objS3GetResponse = objS3Client.GetObject(objS3GetRequest)

        'レスポンスのストリームをローカルファイルに書き込む
        objS3GetResponse.WriteResponseStreamToFile("C:\AWSSDKSample\sample.jpg")

    End Sub

F5キーを押してデバッグ実行し、GetObjectボタンを押すと、指定したバケット・キーのファイルがローカルの指定したパスにダウンロードされます。

AWS SDK for .NET サンプルアプリ GetObject

VB.NETアプリからAmazon S3からのファイルダウンロード

Amazon S3へのファイルアップロード(サンプルコードあり)

Amazon S3からのファイルダウンロードはAmazonS3ClientクラスのPutObjectメソッドを使います。流れとしては以下のような感じです。

  • AmazonS3へのリクエスト(バケット・キー等の情報)を作成
  • PutObjectメソッドでファイルをアップロード

以下はサンプルコードです。バケット・キー・ローカルファイルパスの部分はご自分の環境のものに変更してください。(エラー処理はしていません)

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        Dim objS3Client As New AmazonS3Client
        Dim objS3PutRequest As New PutObjectRequest
        Dim objS3PutResponse As New PutObjectResponse

        'バケットを指定
        objS3PutRequest.BucketName = "s3sample-20141119"
        'キーを指定
        objS3PutRequest.Key = "uploaded.jpg"
        'アップロードするローカルファイルのパスを指定
        objS3PutRequest.FilePath = "C:\AWSSDKSample\sample2.jpg"

        'リクエストをパラメータに指定してPutObjectメソッドを実行
        objS3PutResponse = objS3Client.PutObject(objS3PutRequest)


    End Sub

F5キーを押してデバッグ実行し、PutObjectボタンを押すと、指定したローカルファイルが指定したバケット・キーにアップロードされます。

AWS SDK for .NET サンプルアプリ PutObject

VB.NETアプリからAmazon S3へのファイルアップロード

おわりに

基本中の基本の内容でしたが、AWS SDK for .NETはVB.NETでもC#でも使えるためWindowsアプリからもWebアプリからもできることの幅が広がりそうです。

しかし今回のエントリを書くにあたりC#の情報はちらほら見つかりましたが、VB.NETのリファレンスやサンプルが全く見つかりませんでした。やはり時代はC#なのでしょうか・・・。