まずは実行環境としての基本的な状態を知っておきたいので、リモートデスクトップで接続して気になる部分だけ確認しました。最初に書いておきますが、当然ながら英語 OS で UTC という設定です。
タイムゾーンに関しては ebextensions を使えば変更できるので、変えるのもありかも知れません。
リモートデスクトップ接続できるようにする
Elastic Beanstalk によって作成された EC2 インスタンスには、キーペアを設定しておくとリモートデスクトップで接続できるようになります。
まずは EC2 キーペアを作成しておきます。名前を入れると pem が落ちてくるので大事に保管します。
そして Elastic Beanstalk の作成画面や、設定からキーペアを指定する項目があるので、作成したキーペア名を選択して保存しておきます。これでインスタンスに設定が反映されます。
実際に EC2 インスタンスに接続するためには、Elastic Beanstalk のダッシュボードではなく EC2 のダッシュボードから行う形になります。
接続したい EC2 インスタンスを右クリックするとメニューが出てきます。
表示されるダイアログに全て書いてありますが、デフォルトのセキュリティグループでは RDP のポートが開いてないので、後でルールを追加する必要があります。
RDP のファイルをダウンロードして、パスワードを先ほどダウンロードした pem を使って入手するだけなので簡単ですね。忘れないように保存しておきましょう。
最後にセキュリティグループのインバウンドルールに RDP を追加して終わりになります。
これで保存すると EC2 インスタンスにリモートデスクトップ接続が出来るようになります。使い道は主に開発中とかだと思いますが、少し情報が少ないと感じたので書いておきました。
インストール済み機能
デフォルトでは ASP.NET と ASP.NET Core を動かすために必要な、最低限のコンポーネントのみインストールされています。URL Rewrite 2.0 は入っているので、一般的なアプリであれば問題はないでしょう。
別途、必要なコンポーネントがある場合は ebextensions を使ってインストールする必要があります。
Web PI のコマンド版を使えば簡単にインストール出来ますが、ebextensions の実行ユーザーが SYSTEM になるので少しインストールするには工夫しないといけないです。これはどっかに書きたいです。
インストールされている IIS の機能も、基本的にはデフォルトのままなので Application Initialization や WebSocket が必要な場合は dism を ebextensions から実行します。
デプロイ出来るパッケージ
Elastic Beanstalk 上の Windows Server にデプロイが可能なパッケージは MSDeploy 形式のパッケージと、AWS マニフェスト JSON が含まれているパッケージのみです。
これを忘れて適当な zip をデプロイしようとすると絶対に失敗するので注意したいですね。
デプロイ時のログは cfn ディレクトリの中に書き出されるようになっています。名前からわかるように AWS CloudFormation を使って色々と実現をしているようです。
ログ周りは他に比べて貧弱
Windows Server の場合はダッシュボードから見れるログは少なく、標準では IIS ログなどはダウンロード出来ないみたいでした。なので、別途ログを転送する処理が必要になるかと思ってます。
AWS 的には CloudWatch Logs を ebextensions で有効にして転送するのがいいのかもしれませんが。*1
ebextensions は Modern Startup Task
これまで何回も書いてきた ebextensions ですが、書いてみればみるほど Azure Cloud Services の Startup Task と殆ど同じだと思いました。
設定ファイル(.ebextensions)による高度な環境のカスタマイズ - AWS Elastic Beanstalk
Windows Server でのソフトウェアのカスタマイズ - AWS Elastic Beanstalk
YAML でかけたり、MSI インストール用機能があったり、本家より使いやすいですね。実行ユーザーが SYSTEM になっている点だけは本当に注意したい部分だと思いました。
やっぱり例によってデバッグは結構コツが必要になる感じです。
*1:出来るのかどうかは試していない