今更ですが、AWSを使ってみた。


## とりあえず無料枠
ここから入ります。 → http://aws.amazon.com/jp/
Azure でもそうでしたが、無料枠でもクレジットカードの登録が必要です。

※ちなみに入り口は日本語でしたが、管理画面とか作成画面はすべて英語です。。。

※なんかブラウザの下の方に言語設定がありました。。。

##AWSについて簡単に
既にご存知だと思いますが、簡単におさらいです。
Amazon Web Service(AWS) です。ネット通販？大手のアマゾンが提供しているクラウドサービスです。
いろんなことができます。

- EC2 仮想マシン（クラウド上に仮想マシンを構築）
- RDS データベース（クラウド上にデータベースを構築）
- S3 ストレージ（クラウド上にファイルサーバを構築）
- 分析（所謂ビックデータの解析サービスとか）

その他、メッセージキューやメール送信などがあります。

## EC2 + RDS で Webサービス
今回は仮想マシンとデータベースを構築して、Webサービスの基盤を作ってみます。
会社の古いシステムをクラウドへ移行するための下調べ、といったところです (^_^)

古いシステムは以下の構成です。これをクラウドに移行したいと考えています。

Webサーバ
　OS: Windows2003
　WebServer: IIS6

データベースサーバ
　OS: Windows2003
　Database: MSSQL2005

Webサーバ上に自作のDLLを置いてそれ経由でデータベースにアクセスしています。
ちなみに DLL は Visual Basic 2010 Express で作成。

## EC2の作成
Azure でもそうでしたが、簡単です。
画面中頃の *Launch Instance* ボタンを押して、指示に従うだけです。
Free tier eligible と書いてあるものが無料枠のようです。

今回は **Microsoft Windows Server 2012 R2 Base** を選択しました。
with SQL Server というのもありますが、今回は RDS を使用するためにノーマルのものを選択します。

いろいろときいてきたりしますが、答えましょう。
Windowsにログオンする設定とかもします。忘れずに記録しておきましょう。
※この辺りについてはネットで検索するとたくさん出てきますので参照してください。

インスタンスの生成には多少時間がかかります。
出来上がったら管理画面で情報を確認します。

インスタンスが Windows の場合、標準で リモートデスクトップ のポートが空いているので、そこにめがけて接続します。
Public DNS 或は Public IP に向けて接続しますが、これらの値は動的に変化します。
固定のIP が欲しい場合ば別途設定が必要になります。
※インスタンスが走っている最中は変化しないのかもしれませんが、一応注意しましょう。

## IIS のインストール
何が大変だったかって、これが一番大変でしたw
RDT（リモートデスクトップ） で EC2 の Windows Server2012R2 にログインして、インストールします。IIS のバージョンは 8.5 のようです。

ここが大変参考になりました。ありがとうございました。
http://symfoware.blog68.fc2.com/blog-entry-1235.html

IIS は入ったけど、aspx が CGI として動かなくて、とても困ってました。
どうやら、役割と機能の追加ウィザードって左のリストも選択できるから、なんか抜けがあったみたいです。面倒でもウィンドウ下部の「次へ」で進みましょうw

動作確認は一旦 EC2 の管理画面から、セキュリティーグループで 80ポートを許可してから行います。
ここの設定が AWS はわかりやすくてよいです。Azure は全然わからなくて、困ってましたから。。
まあしかし簡単に設定できるということはそれなりにリスクもあるという事ですので、注意しましょう。

## RDSの作成
これも簡単に作成できました。
画面中頃の *Launch DB Instance* で作成します。
**SQL Server Express** が無料枠のようです。

いくつか注意点がありまして、基本英語圏で作成されます。データに日本語を使う場合は UTF-8 でなければなりません。
そして、テーブル作成時に nchar、nvarchar で型指定しないと化けて使えません。

SQL Server的には設定できるっぽいですが、RDS的には変更できないので注意します。
そこで、EC2 の作成時に with SQL というものがあった訳ですが、その場合もいくつか違いがあります。

| RDS | with SQL|
|:--  |:--      |
|インスタンスの停止が無い|EC2上での稼働なのでインスタンスの停止が可能|
|可用性に関してはAWSにお任せ|可用性に関してもある程度こちら側で用意する必要がある|

小さいシステムの場合は with SQL でも良いかもしれません。しかし成長性のあるシステムなら RDS の方が後々便利な印象です。OSと切り分けることですっきりします。

そして、すっきり分かれているために、RDS へのアクセスには専用のものが必要になります。
MySql などであればコンソールから接続できますが、SQLServer の場合は別途ツールを使って行います。// その方が楽w

今回は Microsoft SQL Server 2014 Express から SQL Server Management Studio をインストールします。

接続のための情報は EC2 と同じく管理画面で確認します。またセキュリティーグループで 1433ポートをあけておきます。

##ローカルの Windows7 マシンからネット経由で RDS にアクセス
いつもの感じ（ODBC設定）でできましたw
MSAccess 経由でのテーブルリンクもできました。
普通に使える感じですね。すごいです。

データベースの作成やテーブルの作成は前述の SQL Server Management Studio で行います。但しサーバの管理者ではないので、できないこともいくつかあります。
例えば、フィールドのデータ型の変更などは、できません。注意しましょう。

##自作DLL でデータアクセス
過去の資産が使えるかどうかということで、現在しようしている自作DLL経由でデータベースにアクセスできるか確認しました。

ちなみに自作DLLは、データベースへのアクセスをライブラリ化したものです。
使い方はこんな感じ。// KITHE が自作DLLの名前ねw

```vb.net:
Imports KITHE

dim db as new MSSQL(server, port)

dim rc as Integer
dim strsql as String
dim rst as DBResult
dim rh as DBRecordHash

rc = db.open(dbname, uid, pwd)
strsql = db.makesql("select * from users where age > %s", 17)
rst = db.query(strsql)
For each rh in rst
  console.writeline(rh("name") & ": " & rh("age"))
Next

db.close()
```

で、これを IIS の ASP.NET の形にしてWebからアクセスしてテストしました。
なんか使えました！わーい。

というわけで、これでとりあえず移行はできそうです。

##課題
とりあえず EC2 + RDS でデータアクセスのあるサービスはできそうですが、課題とか。
EC2 → RDS 間のやり取りはインターネット経由っぽいです。ここのセキュリティとか、どうしましょうか？
VPN的な設定とかできるとは思いますが、皆さんはどうやってるんでしょうかね？
// SSHのトンネルとか使うのかな？

以上な感じ。