※当ブログではアフィリエイト広告を利用しています。
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」ボタンからダウンロード可能です。
本エントリ執筆時点では「AWSToolsAndSDKForNet_sdk-2.3.8.1-ps-2.3.8.1-tk-1.7.1.1.msi」というファイル名のWindowsインストーラがダウンロードされます。
AWS SDK for .NETのインストール
ダウンロードしたインストーラをダブルクリックして実行します。インストールはデフォルトの設定で進めていけばOKです。
Nextをクリックします。
「I accept terms in the License Agreement」にチェックを入れてNextをクリックします。
デフォルトの状態では.NET Framework 3.5や4.5用、Windows Phone用のSDKなどがすべてインストールされます。そのままNextをクリックします。
Installをクリックします。(管理者権限が必要です)
インストールは数分で完了します。
インストール完了です。
プロジェクトの作成
Visual Studioを起動すると初回のみAWS Toolkitのようこそ画面が出ます。右上の「×」ボタンで閉じてOKです。
下図の位置の「新しいプロジェクト」または「ファイル→新しいプロジェクト」を選択します。
テンプレートより「Visual Basic」、画面中央より「Windows フォーム アプリケーション」を選択します。画面下部の「名前」は任意のプロジェクト名称に変更します。
プロジェクトが作成されるとまっさらなフォーム画面が表示されます。
Visual Studioでアカウントプロファイルの作成
AWSの各リソースにアクセスするためのアカウントプロファイルを作成する手順です。
メニューの「表示」から「AWS Explorer」を選択します。
画面左に「AWS Explorer」が表示されます。下図赤枠で囲った「+」ボタンをクリックすると、アカウントプロファイル入力画面が表示されます。
今回はAmazon S3を使ったアプリを作成するので、以下の情報を入力します。
| 項目 | 値 |
|---|---|
| Profile Name | 任意の文字列(後ほど使用) |
| Access Key ID | Amazon S3にフルアクセス権のあるアクセスキー |
| Secret Access Key | Amazon S3にフルアクセス権のあるシークレットアクセスキー |
| Account Number | 空欄 |
| Account Type | Standard AWS Account |
情報を入力したらOKボタンを押します。
AWSSDK.dllの参照の追加
そのままの状態ではAPIが使用できない(各種クラスを読み込めない)ので、参照の追加よりAWS SDK for .NETのDLLを追加します。
「プロジェクト」→「参照の追加」を選択します。参照マネージャーが開きます。
画面左の「参照」を選択し、右下の「参照」ボタンを押します。
ファイル選択画面になるため、以下のフォルダを開き、AWSSDK.dll、AWS.SessionPrivider.dll、AWS.TraceListner.dllを「追加」します。
C:\Program Files (x86)\AWS SDK for .NET\bin\Net45
参照マネージャーに戻ると追加したファイルが表示されているため、右下の「OK」ボタンを押します。
アプリの設定ファイル(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つドラッグ&ドロップで設置します。
左のボタン、右のボタンのTextプロパティをそれぞれGetObject、PutObjectに変えておきます。
フォーム(コード)の準備とと名前空間のインポート
今回はサンプルなのでForm1.vbにベタ書きする形で作成します。
「Form1.vb(デザイン)」の2つのボタンをそれぞれダブルクリックすると、以下のような形で「Form1.vb(コード)」にボタンをクリックした時に発生するイベントButton1_ClickとButton2_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
ここまででコードは以下のようになっています。
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ボタンを押すと、指定したバケット・キーのファイルがローカルの指定したパスにダウンロードされます。
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はVB.NETでもC#でも使えるためWindowsアプリからもWebアプリからもできることの幅が広がりそうです。
しかし今回のエントリを書くにあたりC#の情報はちらほら見つかりましたが、VB.NETのリファレンスやサンプルが全く見つかりませんでした。やはり時代はC#なのでしょうか・・・。
































