AWS Elastic BeanstalkのWindows環境にASP.NETアプリケーションをデプロイする

 

待ちに待ったElastic BeanstalkのWindows対応が、とうとう現実になった!

AWS Elastic Beanstalk の機能性
http://aws.amazon.com/jp/elasticbeanstalk/#functionality
 

以下を参考に、さっそく試してみました。

【AWS発表】 Amazon RDS for SQL ServerとAWS Elastic Beanstalkによる.NETサポートの発表
http://aws.typepad.com/aws_japan/2012/05/amazon-rds-for-sql-server-and-net-support-for-aws-elastic-beanstalk.html

Creating and Deploying AWS Elastic Beanstalk Applications in .NET Using AWS Toolkit for Visual Studio
http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/create_deploy_NET.html

なお、アプリの開発環境は、Visual Studio 2010 Ultimate、.NET Framework 4.0.30319、OSはWindows XP SP3を使い、インターネットに接続できる環境でテストした。

 

1、Elastic Beanstalkの有効化

初めてElastic Beanstalkを利用する場合、AWS Management Consoleの「Elastic Beanstalk」タブにて、サービスを有効化しておくこと。
 

2、AWS Toolkit for Microsoft Visual Studioをインストール

以下のサイトからToolkitをダウンロードし、Visual Studioを利用しているWindows環境にインストールする。
基本、次へ次へと進めていけばインストールは完了する。

AWS Toolkit for Microsoft Visual Studio
http://aws.amazon.com/jp/visualstudio/
 

3、Visual StudioでASP.NETのアプリを作成する

アプリを作成する際、AWSを意識する必要はない。
普通に ファイル→新規作成→Webサイト でサイトを作り、Webフォームを追加する。

今回、Webサイトは”AWSSampleApp”、Webフォームは”HelloAWS.aspx”とした。
 

4、AWSにアプリをデプロイ

Webサイトを右クリックし、「Publish to AWS」を実行する。

アカウント情報を入力する。
AWSにサインアップする際に取得した、アクセスキー、シークレットアクセスキー、AWS アカウント IDを入力する。(参考)
Display Nameも入力し、Next。

Accountにデプロイする環境の任意の名称を入力し、RegionはUS Eastを選択。
AWS Elastic Beanstalkを選択し、Next。

Application Detailに名称を入力。
Incremental Deploymentは、後述するがうまく動かなかったため、チェックをはずした。Next。

Environmentの名称を入力。URLは、check availabilityボタンをクリックすると、そのURLが利用可能かどうか判定できる。Next。

Options画面。

Amazon EC2の情報は、自動で入力される。
key pairは事前にAWS Management Consoleで作成しておかないと、自動で選択されない。未作成の場合、AWS Management ConsoleにてEC2タブを選択し、画面左側のNavigationの”Key Pairs”リンクをクリックし、作成しておくこと。

Application Pool Optionは、私の場合32bit環境でアプリを作成したため、”Enable 32-bit applications”をチェックした。

Miscellaneousでは、ヘルスチェックURLを入力する。Next。

確認画面が表示されるので、Deploy。

インターネット経由でアプリのパッケージがS3にアップロードされる。
そして、EC2のインスタンスが自動的にLaunchされる。

Statusが”Environment is healthy”になればデプロイ成功。

AWS Management ConsoleのElastic Beanstalkタブを見ると、インスタンスが無事起動(緑色のサイン)していることが確認できる。


 

5、アプリにアクセス

デプロイ時にEnvironment画面で入力したURLにアプリへのパスを付記し、ブラウザでアクセス。

アプリを公開できた。
 

ハマッたところ

デプロイするまでに何点かエラーに遭遇したので、メモしておく。

・ファイルまたはアセンブリ ‘ICSharpCode.SharpZipLib~(中略)~指定されたファイルが見つかりません。

デプロイ時にパッケージをZipするためのライブラリが見つからないというエラーが発生した。
DLL(ICSharpCode.SharpZipLib.dll)自体は、C:\Program Files\AWS Tools\Deployment Tool にあるので、Visual StudioでWebサイトを右クリックし、参照の追加を実行。参照タブでICSharpCode.SharpZipLib.dllを追加することで解決した。

(2012/05/19追記)
1.3.0.4リリースで改修されたっぽい。

1.3.0.4 was released on 2012年5月15日.
Fix issue with version mismatch in 3rd party libraries leading to problems loading ICSharpCode.SharpZipLib.dll on some systems (public release).

 

・Creating directory C:\Documents and Setting\~(中略)~\.git\refs\ failed

ディレクトリの作成に失敗、とあるが、当該ディレクトリはちゃんと作成されていた。
Visual Studioの環境上にGitのレポジトリを作ろうとしているようなのだが、うまく動かなかったので、デプロイ時のApplication画面にて、Incremental Deploymentのチェックをはずすことで暫定回避。
 

・The unspecified location constraint is incompatible for the region specific endopoint this request was sent to.

残念ながら、私の環境ではデプロイ時に以下のエラーが発生し、どうしても東京リージョンのElastic Beanstalkにアプリをデプロイできなかった。

US-Eastではうまくいくのだが・・回避策はわからなかった。
ec2-api-toolsを使う時に、US-East以外の地域の場合、環境変数としてEC2_URLを明示的に指定しないと動かなかったりしたが・・それと同じような話なのだろうか。今後も継続して色々試してみたい。
 

ハマるポイントはいくつかあったが、既存のASP.NETのアプリを、全く手を入れずに、簡単にAWSの環境に移行することができた。やっぱりAWSすごい!

参考:
Amazon RDS for SQL Serverにオンプレミス環境のデータをインポート
https://www.cyberarchitect.net/blog/archives/825