AWS SDK for .NET

[Home]

投稿 2016/03/21

 (注意) この記事は Visual Studio 2015 を使用した場合について書かれています。他のバージョンでは操作方法が違ったり、動作しない場合もあります。

準備

 まず、下記のページを開いて AWS SDK for .NET をダウンロードします。ダウンロードが完了したら、それを実行して Visual Studio にインストールします。

AWS SDK for .NET

 インストールが完了したら、Visual Studio を起動します。表示メニューに「AWS Explorer」 が追加されているはずです。このメニューを実行すると、AWS Explorer が右側ペインに表示されます。

ユーザ登録を行います。AWS Explorer の上の方に人のアイコンが3つありますが、左の New Account Profile アイコンをクリックします。次のようなダイアログが開くので必要な項目を入力します。このとき、接続情報を登録する必要があるので、もし取得してない場合は事前に取得します。これは他の SDK や AWS CLI を使う場合のものといっしょです。

 AWS Explorer のどれか自分の所有しているオブジェクトをダブルクリックして情報を取得できるか試してみます。


新しいプロジェクトの作成

 「新しいプロジェクト」ダイアログを開いて、Visual C# / AWS Sample Projects を選択します。表示されたプロジェクトの種類を選んで OK ボタンをクリックします。ここでは、AWS Console Project を選択します。.NET のバージョンは公式には 3.5, 4.0, 4.5 (2015/3の段階で) しかサポートされていないので、これらのどれかに変更します(後から変更もできます)。

 次のようなダイアログが開くので通常はそのまま OK ボタンをクリックします。

次のようなコードが挿入されます。この中では EC2, SimpleDB, S3 の情報を取得していますが、もし、所有していないオブジェクトがあるとエラーになるので、もし、そうなら一部をコメントアウトします。


using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Text;

using Amazon;
using Amazon.EC2;
using Amazon.EC2.Model;
using Amazon.SimpleDB;
using Amazon.SimpleDB.Model;
using Amazon.S3;
using Amazon.S3.Model;

namespace AwsConsoleApp1
{
    class Program
    {
        public static void Main(string[] args)
        {
            Console.Write(GetServiceOutput());
            Console.Read();
        }

        public static string GetServiceOutput()
        {
            StringBuilder sb = new StringBuilder(1024);
            using (StringWriter sr = new StringWriter(sb))
            {
                sr.WriteLine("===========================================");
                sr.WriteLine("Welcome to the AWS .NET SDK!");
                sr.WriteLine("===========================================");

                // Print the number of Amazon EC2 instances.
                IAmazonEC2 ec2 = new AmazonEC2Client();
                DescribeInstancesRequest ec2Request = new DescribeInstancesRequest();

                try
                {
                    DescribeInstancesResponse ec2Response = ec2.DescribeInstances(ec2Request);
                    int numInstances = 0;
                    numInstances = ec2Response.Reservations.Count;
                    sr.WriteLine(string.Format("You have {0} Amazon EC2 instance(s) running in the {1} region.",
                                               numInstances, ConfigurationManager.AppSettings["AWSRegion"]));
                }
                catch (AmazonEC2Exception ex)
                {
                    if (ex.ErrorCode != null && ex.ErrorCode.Equals("AuthFailure"))
                    {
                        sr.WriteLine("The account you are using is not signed up for Amazon EC2.");
                        sr.WriteLine("You can sign up for Amazon EC2 at http://aws.amazon.com/ec2");
                    }
                    else
                    {
                        sr.WriteLine("Caught Exception: " + ex.Message);
                        sr.WriteLine("Response Status Code: " + ex.StatusCode);
                        sr.WriteLine("Error Code: " + ex.ErrorCode);
                        sr.WriteLine("Error Type: " + ex.ErrorType);
                        sr.WriteLine("Request ID: " + ex.RequestId);
                    }
                }
                sr.WriteLine();

                // Print the number of Amazon SimpleDB domains.
                IAmazonSimpleDB sdb = new AmazonSimpleDBClient();
                ListDomainsRequest sdbRequest = new ListDomainsRequest();

                try
                {
                    ListDomainsResponse sdbResponse = sdb.ListDomains(sdbRequest);

                    int numDomains = 0;
                    numDomains = sdbResponse.DomainNames.Count;
                    sr.WriteLine(string.Format("You have {0} Amazon SimpleDB domain(s) in the {1} region.",
                                               numDomains, ConfigurationManager.AppSettings["AWSRegion"]));
                }
                catch (AmazonSimpleDBException ex)
                {
                    if (ex.ErrorCode != null && ex.ErrorCode.Equals("AuthFailure"))
                    {
                        sr.WriteLine("The account you are using is not signed up for Amazon SimpleDB.");
                        sr.WriteLine("You can sign up for Amazon SimpleDB at http://aws.amazon.com/simpledb");
                    }
                    else
                    {
                        sr.WriteLine("Caught Exception: " + ex.Message);
                        sr.WriteLine("Response Status Code: " + ex.StatusCode);
                        sr.WriteLine("Error Code: " + ex.ErrorCode);
                        sr.WriteLine("Error Type: " + ex.ErrorType);
                        sr.WriteLine("Request ID: " + ex.RequestId);
                    }
                }
                sr.WriteLine();

                // Print the number of Amazon S3 Buckets.
                IAmazonS3 s3Client = new AmazonS3Client();

                try
                {
                    ListBucketsResponse response = s3Client.ListBuckets();
                    int numBuckets = 0;
                    if (response.Buckets != null &&
                        response.Buckets.Count > 0)
                    {
                        numBuckets = response.Buckets.Count;
                    }
                    sr.WriteLine("You have " + numBuckets + " Amazon S3 bucket(s).");
                }
                catch (AmazonS3Exception ex)
                {
                    if (ex.ErrorCode != null && (ex.ErrorCode.Equals("InvalidAccessKeyId") ||
                        ex.ErrorCode.Equals("InvalidSecurity")))
                    {
                        sr.WriteLine("Please check the provided AWS Credentials.");
                        sr.WriteLine("If you haven't signed up for Amazon S3, please visit http://aws.amazon.com/s3");
                    }
                    else
                    {
                        sr.WriteLine("Caught Exception: " + ex.Message);
                        sr.WriteLine("Response Status Code: " + ex.StatusCode);
                        sr.WriteLine("Error Code: " + ex.ErrorCode);
                        sr.WriteLine("Request ID: " + ex.RequestId);
                    }
                }
                sr.WriteLine("Press any key to continue...");
            }
            return sb.ToString();
        }
    }
}

 次の画像は、SimpleDB の部分をコメントアウトして実行した場合の例です。


Visual Basic を使う場合

 「新しいプロジェクト」ダイアログで「AWS Sample Project」メニューがあるのは、Visual C# だけで Visual Basic にはありません。また、Windows Forms アプリケーションのテンプレートもありません。

 これは単にメニューにないだけであって、VB で AWS アプリケーションが作れないわけではありません。ここでは、VB で AWS Windows Forms アプリケーションを作る方法を述べます。

  1. まず、いつも通りに VB の Windows フォームアプリケーションプロジェクトを作成します。ここで .NET のバージョンは 4.5 とします。
  2. AWS SDK for .NET のアセンブリ参照を追加します。ここでは S3 関連のアプリケーションを作るものとして、次のアセンブリを参照を追加します。デフォルトでは、これらの場所は C:\Program Files (x86)\AWS SDK for .NET\bin\Net45 です。
  3. App.config ファイルにキー AWSProfileName と AWSRegion を追加します。下の例で Your ID と Your Domain は事前に登録してあるものに変更します。
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <startup>
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
        </startup>
      <appSettings>
        <add key="AWSProfileName" value="Your ID"/>
        <add key="AWSRegion" value="Your Domain"/>
      </appSettings>
    </configuration>
       

次のサンプルは、S3 のバケット一覧を表示するものです。


Imports Amazon
Imports Amazon.S3

Public Class Form1
    ' S3 クライアント
    Private s3 As AmazonS3Client

    ''' <summary>
    ''' フォームがロードしたとき
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Try
            ' S3 クライアントをインスタンス化
            s3 = New AmazonS3Client()
            ' バケット一覧を取得する。
            Dim response = s3.ListBuckets()
            ' バケットの名前と作成日をリストビューに表示する。
            For Each b In response.Buckets
                Dim item = ListView1.Items.Add(b.BucketName)
                item.SubItems.Add(b.CreationDate.ToShortDateString())
            Next
        Catch ex As Exception
            MessageBox.Show("例外を検出。" & ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Hand)
        End Try
    End Sub
End Class

 

実行例を下に示します。

 

S3Class

S3Class は AWS S3 を簡単に利用するためのクラスです。