2013/11/21

AWSに200円弱/月で、MT4予備環境を、用意する


今使っている予備のメタトレーダー4用PCがWindowsXPで、来年サポートが終わってしまうので、AWSへの移行を検討した、前回の記事の続きです。   ようやく、実際にAWS設定作業が終わったので、AWSの設定方法や見積もりについて書いてみようと思います。

AWSは時間課金なので、予備MT4マシン用途だと、月額契約のVPSよりも安価にできるのではないか、と思ったのが発端です。  後述の試算結果だと、173.5円/月で収まるハズです。

■■■ 記事の流れ ■■■

1.AWSサーバ(EC2インスタンス)へのログイン
2.安くするポイント
3.費用見積もり
4.運用イメージ
5.AWS設定手順
6.AWSサーバ起動・停止手順


さて、イメージしやすくするために、AWSのサーバにログインしている雰囲気から。

1.AWSサーバ(EC2インスタンス)へのログイン


AWS設定が終わって、実際にサーバにログインするには、Windows標準ソフトの、「リモート デスクトップ」を、メニュー「スタート」→「アクセサリ」から起動します。




コンピュータ名は、AWSでサーバ起動したら割り当てられる「PublicDNS」のサーバ名を入力すれば、OKです。 (AWS EC2管理画面で確認できます)

後は、サーバ側のWindowsのユーザ・パスワードを入力すると、↓ こんな感じで、普通にWindowsが使えます。 Administratorの初期パスワードは、AWS EC2管理画面のメニュー「Get Windows Password」から取得できます。




ちなみに、スマホ・タブレット等のAndroid端末から、アプリをインストールすればパソコンみたいにログインできます。 アプリは、「Microsoft Remote Desktop」を使っています。 ログインすると、こんな感じで、普通に使えます。



2.安くするポイント


AWSは、サーバ起動時間と、確保したディスク容量に応じて課金されます。(他にも、ディスクI/O数、上りインターネット通信量で課金されますが、今回の用途や無料利用枠を考えると、無視できるレベルと思います)

サーバ時間単価は、サーバスペック(インスタンス・タイプ)と、支払い方法で変わってきます。 支払い方法は3つあり高い順に、「オンデマンド」「リザーブド」「スポット」です。

こういった課金方式で安くするポイントは、以下の様な感じです。

  • 平常時は、EC2インスタンス(サーバ)を停止させておく
  • 安いスペックを選択:m1.small(1CPU、MEM1.7GB) ・・・ よっぽどたくさんのEAを動かさない限り、これで十分と思います。
  • ディスク容量も最低限にする(OS領域30GB、MT4領域4GB) ・・・ OS領域は30GBより小さくできないと思います。
  • 「スポットインスタンス」によるEC2起動で定期メンテナンス ・・・ 価格が時と共に変化するタイプです。 最大許容価格を指定して、サーバ起動します。  価格が指定した許容価格を上回ると、サーバは強制停止されます。  過去の価格動向も見れます。 実際はほぼ一定の価格で安定しているみたいです。
  • メイン用MT4環境障害時は、「オンデマンドインスタンス」で実行
  • AWS 無料利用枠」を有効活用する ・・・ 結構無料で使えます

※ 補足

普通にEC2インスタンスを起動すると、「オンデマンド」になります。 「リザーブド」は前払い式で、1年・3年などの期間と、利用頻度3種類があります。 「リザーブド」で前払いする際は、マシンスペックも指定して支払いします。 マシンスペックを変更したくなった場合、変更できる範囲が限られていて、同じスペックのグループ内に限定されます。  余った分を売却できるそうですが、どれぐらいの流動性かは解りません・・・orz



3.費用見積もり


2013/11/16時点での見積もりです。

■ 前提

  • メイン用MT4マシンで障害が発生した時だけ使う
  • 毎週1時間、Windows Update、ウィルススキャン、MT4起動確認などの定期メンテナンスを実施する
  • 1ヶ月5週間として見積もる
  • 東京リージョンを使う
  • 1US$≒100円
  • ディスクI/O、インターネット送信パケット数は、無料利用枠で収まるレベル
  • ディスクは日割り計算される (参考:「課金編:Amazon クラウド- AWS/EC2でSAP環境構築(9/10)」)


■ 見積もり

  以下を合算すると、173.5円/月で収まるハズ(笑)

  < 定期メンテナンス >

  • EC2 : 17.5円/月 ・・・ m1.smallスポットインスタンス$0.035/H × 5週間 × 100円
  • EBS : 60.0円/月 ・・・ OS用領域30GB × 1GB$0.12/月 × 5週間 ÷ 30日 × 100円

  < 月額固定費 >

  • EBS : 96.0円/月 ・・・ (OS用領域30GB+MT4用4GB+MT4用バックアップ4GB-無料利用枠30GB) × 1GB$0.12/月 × 100円


4.運用イメージ


全体的な運用イメージについてです。   普段MT4を動かしているPCで障害が発生した場合、AWS上のMT4を起動します。  AWSへの切替時は、MT4「グローバル変数」ファイルを、AWS側に引き継ぐ必要があります。  しかし障害が発生した後では、引き継ぐファイルを取得する事ができませんので、常時SkyDriveのクラウド上にアップロードしておきます。



■ メインPC障害発生時

1.普段MT4を動かしている、メインPCがある
2.メインPCが障害で使えなくなったら、AWSのサーバ(EC2インスタンス)を起動する
  Androidアプリ 「AWS for Android」から、起動できます。
  ディスクのマウントという作業も必要なのですが、このアプリで可能です。
3.AWSのサーバにログインして、MT4を起動する
  接続先のIPアドレスは起動する度に変わるので、接続先のPublicDNSを、
  Androidアプリ「AWS Console」の画面からコピペします。
  上記「2.」のアプリだと、コピーできません。


■ MT4データの引継ぎ

MT4を起動する前に、データの引継ぎ作業が必要です。 MT4の「グローバル変数」ファイル(profiles\gvariables.dat)を、AWSサーバ上のMT4の同じフォルダーにコピーしてから、MT4を起動します。

さて、この「グローバル変数」ファイルを、どうやってAWS側のサーバにもってくるのか、という話しです。  私の場合は、SkyDriveを、メインPCとAWS側の両方にインストールして、ファイルをやり取りします。

・ メインPC側
  フリー・ソフト「Buckup」を使って、MT4インストール・フォルダ内のファイルを、
  SkyDriveのフォルダに、5分おきにコピーしています。
・ AWS側
  切替時に、サーバ起動後、フリー・ソフト「BunBackup」を使って、SkyDrive
  のフォルダから、MT4インストール・フォルダ内に、ファイルをコピーしています。  


5.AWS設定手順


Amazonショッピングのアカウントを持っていても、AWS用のアカウントを用意する必要があります。 AWS用アカウントを用意した後の、導入の大まかな流れは、以下のとおりです。 AWS内のEC2ダッシュボードをブラウザで開き、作業します。

「Amazon Machine Image」(AMI)と呼ばれる、OS起動イメージを作成しなければ、サーバ停止時に、インストール・設定した内容は消えてしまいますので、注意が必要であると共に、AWS利用にあたっての、一番の注意ポイントです。

今後は作成したAMIからサーバを起動する事になりますので、設定変更などを行ったら、毎回AMIの再作成が必要になります。

MT4関連データについては、AMIとは別に、MT4用ディスクを用意し、そこに保存します。
そのディスクの内容は、サーバ停止時に消えません。


1.AWSのアカウントを用意する


AWSアカウントを用意したら、EC2ダッシュボードを開きます。  ここから作業します。 赤色で囲った部分がよく使う箇所です



2.世界のどこで動かすか(リージョン)を決める


右上のアカウント名の右側から、選びます。 Tokyoだけでなく、US East/West、EU、Irelandなども選べます。 私はTokyoにしました。

→ 基本的に、決めたリージョン内で作業をする事になります

3.MT4をインストールするディスク(EBS)を確保する


左側メニュー内「ELASTIC BLOCK STORE」(EBS)内「Volume」を選び、「Create Volume」をクリックして、必要事項を入力します。

私は4GB確保しました。 VolumeTypeは「Standard」、Availavility Zoneは、何も考えずに適当に選んでしまいました(笑) 



「Availability Zone」は、データセンタ単位「リージョン」内を、さらに論理分割した単位で、機能的にはどれを選んでも同じはずです。

4.キーペアを用意する


EC2ダッシュボード画面の左下にある「Key Pairs」を選んで、適当な名前を決めて、入力してください。

→ サーバ(EC2インスタンス)起動に必要なだけでなく、
   Administratorの初期パスワード取得にも必要です。





5.公開AMI(Amazon Machine Image)から、サーバ(EC2インスタンス)を起動


AMIは、「サーバ起動用のOSイメージディスク」というイメージです。 一般公開されているAMIが幾つもあって、必要な種類のOSを選んで、起動します。  「Windows Japanese」で検索すると幾つかでてくるので、その中から、以下のAMIを選びます。

  ・ Windows_Server-2008-R2_SP1-Japanese-64Bit-Base-2013.09.11
   (AMI ID:ami-e3dd41e2)
  ・ インスタンス・タイプ:m1.small(1CPU、MEM1.7GB)
   → スペックに相当しますが、起動毎に好きなスペックを選べます

間違えてSQL-Server付きのAMIを選んでしまうと、単価が高いだけでなく、利用ディスク容量もふえてしまい、料金がとても高くなってしまいますので、注意してください。


6.サーバ(EC2インスタンス)に、MT4ディスク(EBS)をマウントする


EC2ダッシュボード画面左側メニュー内「ELASTIC BLOCK STORE」から「Volume」を選択し、上記「3.」で作成したディスクを選び、起動したEC2インスタンスに割り当てます。 この作業は、EC2インスタンス起動のたびに必要です。



上部「Actions」から「Attach Volume」を選び、出てきた画面で、上記「5.」で起動したEC2インスタンスの「Instance ID」を選びます。 

このディスクに、MT4をインストールする事になります。

7.Windowsの設定・MT4インストール・EA設定


ブログ記事冒頭に書いた、サーバログイン方法でログインし、使用するアカウントの用意や、Windows Updateや、セキュリティソフトのインストール、MT4のインストールや、その他必要なソフトのインストール作業などを行います。   作業を中断する場合は、必ず後述「8.」をしてから、Windowsを終わらせましょう。

MT4は、上記「6.」で用意したドライブにインストールします。 このドライブの内容変更は、後述「8.」をしなくても、消えません。  しかし、アプリインストール時は、Cドライブ側も変更されると思うので、後述「8.」が必要です。




8.自分用AMIの作成


自分AMIを作成することで、自分だけのWindows起動ドライブを作成します。  EC2インスタンス起動時は、このAMIの内容を、実際Windowsが使用するディスクにコピーしてから、Windowsが起動されます。  したがって、使用するディスク容量が、EC2インスタンス起動により、増える事になります。

AMIの作成は、数十分かかります。 気長に待ちましょう。




作成の仕方は、こんな感じです

  1. 左側の「Instance」を選択し、EC2インスタンス一覧画面にいきます
  2. 作成元のEC2インスタンスの一番左側をクリックして選択します
  3. 上部「Action」ボタンから、「Create Image」メニューを選びます
  4. 「Create Image」画面で、「Image name」を、解りやすい様な、任意の名前を入力します
  5. MT4がインストールされているディスクが表示されていますが、不要なので、4GBのディスクの行の一番右の「×」マークをクリックして、AMI作成対象から外します 
  6. 画面右下の「Create Image」ボタンを押下します

9.スナップショット(バックアップ)の作成


AMIの作成では、Windows起動ドライブがバックアップされますが、MT4をインストールしたドライブはまだ、バックアップが作成されていません。

MT4ドライブは、バックアップを作成せずにEC2インスタンスを終了しても、消える事はありません。しかし障害対策として、ディスクのバックアップは必要です。 これは「スナップショット」と呼ばれています。 



  1. 左メニュー「Volume」選択します。
  2. スナップショットを作成するディスク一番左側をクリックします
  3. 上部「Actions」をクリックし、「Create Snapshot」を選択します
  4. 任意の解りやすい名前を入力し、「Yes, Create」をクリックします

10.課金状況のチェック&メール受信


節約した使用方法をしていたとしても、複雑な従量課金、ちょっと怖いですよね。  前述のAndroidアプリで見たり、閾値を超過したらメールさせるには、設定が必要です。

上部右端の、アカウント名右側↓をクリックして、「Billing & Cost Management」を選択します。



左側メニュー「設定」を選択。  右側の「電子メールでPDF版請求書を受け取る」と、「請求アラートを受け取る」にチェックし、「設定の保存」をクリックします。

最初のチェックは、毎月の課金情報を受け取るため、二つ目は、Androidアプリでの料金チェックと、料金監視アラートを受信できる様にするためです。




次は、課金が幾らになったらアラートメールを受け取る様にするか、「Cloud Watch」に設定します。




何の制限かわからないのですが、リージョンを「US East (N. Virginia)」に変更しないと、課金アラートを設定できないので、リージョンを変更します。  「US East (N. Virginia)」で設定しても、Tokyoリージョンの課金を監視できる様です。

左「Billing」メニューを選択し、「Create Alarm」をクリックして、アラームを作成します。




私は、アラームを2つ作成しました。 1ヶ月50US$超過時と、1日10US$を超過した場合です。 私の場合は、評価用としてたまに利用するので、この様な設定になっていますが、純粋に予備用MT4用途であれば、もっと少ない金額の設定でいい様な気がします。

以下の設定画面は、1ヶ月50US$超過時アラームの設定です。


以下の設定画面は、1日10US$超過時アラームの設定です。 数字だけでなく、右下「Statistic」も変わっているので注意してください。


6.AWSサーバ起動・停止手順


これらはPCからできますが、Androidスマホからもアプリを使用してできます。 (下記「3.」以外)

1.自分用AMIからEC2インスタンス起動


前述「4.AWS設定手順」で作成した、自分用AMIからWindowsサーバ(EC2インスタンス)を起動します。 マシンスペックは、起動時に選ぶ事ができます。  MT4用ディスクは起動時にはマウントする指定が出来ませんので、起動作業後、別途下記「2.MT4ディスクのマウント」を行ってください。




左側「AMIs」を選択し、上部「Owened by me」となっている事を確認してください。 一覧に前述で作ったAMIがあるはずですので、左端をクリックし、選択してください。 上部「Launch」をクリックすることで、EC2インスタンス起動方法を選ぶ画面が表示されます。

以下で、マシンスペックを選んだあとは、そのままどんどん進んでいけば、EC2インスタンスが起動されます。  今回マシンスペックは、「m1.small」を選びました。



メインPC障害によりAWSに切り替える場合は、途中で停止しては困るので「オンデマンドインスタンス」で起動する必要があります。  しかし、ウィルススキャンやWindowsUpdate等の定期メンテナンスの場合は、もっと安い「スポットインスタンス」で十分だと思います。 

「オンデマンドインスタンス」の場合1時間あたり$0.115ですが、「スポットインスタンス」であれば$0.035という、三分の一以下の金額で済んでしまいます(2013/11/16時点)。 是非、活用しましょう。  価格変動状況のヒストリカルデータも見れるのですが、今の所価格ほとんど動いていない様なので、実際はほぼ、落とされる事は無いと思います。



スポットインスタンスとして起動する場合は、上記ページで、「Request Spot Instance」にチェックをし、許容最大額を入力します。 高い金額を入力しても実際に徴収されるのは市場価格なので、安心してください。  私はオンデマンドインスタンスの価格を入れてます。

スポットインスタンスで気をつけなければならないのは、「Subnet」を明示的に、MT4用ディスクと同じ領域(アベイラビリティ・ゾーン)を指定しないといけない点です。  異なるSubnetだと、せっかくEC2インスタンスを起動しても、MT4用ディスクをマウントできません(つまり使えません)。

2.MT4ディスクのマウント


前述「6.サーバ(EC2インスタンス)に、MT4ディスク(EBS)をマウントする」と同じです。
AMIからEC2インスタンスを起動しても、ディスクを勝手にはマウントはしてくれません。

3.死活監視の設定


実際にメイン用PCで障害が発生して、AWSに切り替えた場合を考えると、EC2インスタンス自体が障害で落ちてしまっていないか気になるところです。

何も対策しなければ、EC2インスタンスが障害で停止しても、何の通知もきませんし、Amazon側が担保してる訳でもありません。  自分で対策が必要です。

しかし、「Cloud Watch Alarm」という、無料の仕組みを使えば、障害発生時にメール通知される様に設定できます。  設定は、起動したEC2インスタンスに対して行うものなので、EC2インスタンス起動後でないと、設定できません。

私が知っているアプリでは、この設定をする機能は無いので、Android端末の場合は、ブラウザからする必要があります。




左側「Instances」でEC2の一覧画面を開きます。  「Alarm Status」カラムの右のアイコンをクリックすると、設定画面が出てきます。

「Whenever」の行の「of」の後の項目で、「Status Check Failed(Any)」を選んでください。 これは、EC2インスタンスのCPU使用率等の情報を定期的な採取で失敗した時、通知する、という意味になります。  これを利用して、EC2インスタンスの死活監視を行うわけです。

監視間隔を「5分」にしていますが、これ以上短いと「有料」になってしまうので、気をつけましょう。

今回の設定では、5分が2連続失敗した場合はメール通知する、という内容です。

4.AWSサーバの停止


たとえリモートデスクトップ接続を終わらせても、EC2インスタンス(AWSサーバ)を起動したままだと、どんどん課金されていきます。  EC2インスタンスの止め方は2通りありますので、用途に応じて使い分けましょう。

  • 「Terminate」 ・・・ 完全にEC2インスタンスが停止します。 OSドライブの内容は消えますので、停止する前に、AMI作成が必要です。
  • 「Stop」 ・・・ EC2インスタンスは停止しますが、ディスク利用は継続します。 「Terminate」と比較して、AMIのサイズ分余計に、ディスク使用量の課金が継続します。 再開する場合は「Start」する事で再開しますが、接続先IPアドレスが変更されていますので、ご注意ください。 また、「スポットインスタンス」の場合は「Stop」できません。
  • 「Reboot」 ・・・ EC2インスタンスを再起動しますが、OSドライブの内容は消えません。




5.バックアップ・不要過去バックアップ削除


EC2インスタンス停止後は、適宜、MT4用ディスクのスナップショット作成(バックアップ)する様にしましょう。

ただし、AMI作成・MT4用ディスクのスナップショット作成で、課金対象となるディスク容量が増加します。 AWSホームページ(「Amazon EBS スナップショット」)を読むと、毎回フルサイズディスクを確保するのではなく、差分だけ追加確保する、という事ではあります。 

しかし、実際にどれぐらいの差分課金が発生しているのか解らない事もあり、コマめに不要な古いスナップショットは削除する様にしましょう。

ちなみに、AMIに紐づいたスナップショットは、そのAMIを削除しないと、スナップショットを削除できません。



自分用メモの意味も含めて、駆け足で書きましたが、いかがでしょうか?  これから運用していく中で、間違いに気づいたり、いろいろ見直す事が出てくるかもしれませんが(^^ゞ

ではでは~





2 件のコメント:

  1. とても参考になりました。ありがとうございます。

    返信削除
  2. 初めて知りました。感謝申し上げます。

    返信削除