サービスに関して

サービスってどのようなサービスを使っているの?とか色々と疑問に思われていることがあると思います。サービスの概要に関して説明したいと思います。

Amazon Web Services EC2

米国Amazon社が提供するインフラサービスの一つのサービス。Webサーバーや処理演算用として1時間単位で借りることが可能なサービス。クラウドサーバーでは代表的な存在。

MyDNS.jp

ダイナミックDNSサービス(DDNSサービス)。無料で利用することが可能なサービス。一週間に一度通知もしくはログインをすることでアカウントが動いているかを確認し、サービスの利用に関しては無料で利用ができる。また、ドメインなどもサブドメインで取得可能。

DNSとは?
DNSとは英字ベースのドメイン(例:focusmark.jp)と数字ベースのIPアドレス(例:8.8.8.8等)を解決するために設けられているサーバーのこと。

今回の条件

AWSというのは再起動等であればIPアドレスが変わらなかったりする(みたい)なのですが、シャットダウンして2日後に起動したら通知されるらしいので、

  • IPアドレスの固定は行わない
  • サーバーが起動したと同時にMyDNS.jpに通知し、それ以降は5分毎に通知
    ※ 公式で5分とあったため。5分未満であればアカウント停止の恐れがあるため。
  • サーバーは一般的なLAMP構成

このようなごく一般的なサーバーで構築し、平日夜間と土日しか動かさないサーバーを構築したいと思います。(仕事で使うのであれば平日のみでもいいかも)

サーバーを作成する

まずはサーバーを作成するところから始めたいと思います。

AWSのアカウントは予め取得しているという前提で構築したいと思います。

ログインして"EC2 Management Console"を開きます。すると、このような感じになっていると思います。

1

インスタンスを作る前に、EC2は自動生成による認証鍵を使ったSSHログインが一般的(らしい)ので認証鍵を生成したいと思います。

次に、左側にある"Key Pairs"をクリックすると"Key Pair Name"という空白があるので入力し、そして"Create"をクリックします。クリックするとAWSのシステムが生成した"鍵"が発行され、ダウンロードされます。LinuxやMacをつかているユーザーであればユーザーのドキュメントフォルダ以下にある.sshフォルダ内に入れて置くのが良いと思います。

3

次に、左側にある"Security Groups"をクリックし、"Create Security Settings"をクリックします。名前などを入力すると以下の様な画面になると思います。

4

"Custom TCP Rule"と記載されているところをクリックすると選択肢が現れるので、"SSH"と"HTTP"、"HTTPS"をクリックします。そして、最後に"Apply Rule Changes"をクリックしたら適応されます。

次に、"Instances"をクリックして、"Launch Instance"をクリックして構築したいと思います。

クリックするとウィザードが出るので、最初は「Next」をクリックしてください。次に、OS(オペレーションシステム)の種類が出てきますので、Amazon Linuxを今回は使いたいと思います。Amazon Linuxの右側に"SELECT"と記載されているのでクリックします。そこから先はある程度Nextをクリックしていけば大丈夫だと思います。

そして、上にあるプログレスバー(項目毎の位置がわかる部分)が"Key Pair"まで行くと、はじめて構築されたユーザーは先ほど構築したものが選択済みになっていると思います。また、"CONFIGURE FIREWALL"も同様に選択されていると思いますので、そのまま続けていきます。

サーバーが動き始めたら"instances"画面内に作成したものが出るので、項目をクリックしてログイン用のURLを取得しましょう。(これは一時的なものです)

IPアドレスはシステムが自動で発行してくれているのですが、このサービスは転送量とインスタンスを起動している時間に応じて従量課金制なので使わない時は落として置いて、自分が使う時だけコンソールで立ち上げるというのが最もいい選択肢でしょう。ただ、最初の1年間は無償で利用できる枠があるので、始めの1年はお金が余りかからずに運用できると思います。

また、IPアドレスはコンソールから確認することが可能です。

MyDNSの設定をする

MyDNS.jpの設定をします。MyDNS.jpのアカウントも取得した前提で記載します。(両サービスのアカウントの取得を1〜10まで書いていたら記事が1つで収まらず、3記事ぐらいに分かれるため)

取得後、MyDNSのシステムからメールが届くと思います。

メールに記載されている「マスターID」と「パスワード」を使ってログインします。

ドメインも提供されているので取得したいと思います。(サブドメイン形式)

2013年10月7日現在では、以下の様なドメインが提供されているみたいです。

  • ???.mydns.jp
  • ???.mydns.bz
  • ???.mydns.vc
  • ???.mydns.tw
  • ???.0am.jp
  • ???.0g0.jp
  • ???.0j0.jp
  • ???.0t0.jp
  • ???.pgw.jp
  • ???.wjg.jp
  • ???.server-on.net
  • ???.live-on.net
  • ???.keyword-on.net
  • ???.dix.asia
  • ???.daemon.asia

※ ???部分に自分で決めた任意の文字列(英字)が入ります。

決めたら左側にある"Welcome Administrator"から"DOMAIN INFO"をクリックして入力します。下の方に入力欄があるので先ほどの任意の文字列(英字)とドメインを入力します。今回、nasa114.live-on.netというドメインを使いたいと思います。

以下のように入力し、"Check"をクリックし、エラーが出なければそのまま運用が可能です。

11

サーバー側から起動時・5分毎にIPアドレスを通知する

これだけだと、EC2とMyDNSの間では通知がされていないので、SSHログイン可能なアプリケーション(Linux・Macはターミナル(端末)上から可能。)を使います。

Linux・Macユーザーはec2-user@(AWS上に記載されているURL) -i (先ほど発行した鍵ファイル)でログインすることができます。

ログイン後にsudo -iでroot権限になります。

以下のようなスクリプトを使います。

場所は/etc/mydns/scriptでいいと思います。

root権限でvi /etc/mydns/scriptでキーボードの"i"をクリックしてそのままコピーして下さい。

#!/bin/sh
#
# nasa114.live-on.net
/usr/bin/wget -O - 'http://(masterID):(Passwd)@www.mydns.jp/login.html'

貼り付けたら右上の"esc"キーを押して":wq"と入力して終了して下さい。そして、sudo crontab -eを入力し、以下をそのままコピーして下さい。

0 * * * * /etc/mydns/script
5 * * * * /etc/mydns/script
10 * * * * /etc/mydns/script
15 * * * * /etc/mydns/script
20 * * * * /etc/mydns/script
25 * * * * /etc/mydns/script
30 * * * * /etc/mydns/script
35 * * * * /etc/mydns/script
40 * * * * /etc/mydns/script
45 * * * * /etc/mydns/script
50 * * * * /etc/mydns/script
55 * * * * /etc/mydns/script

これで5分毎に通知されます。

しかし、起動時に通知されないと困るので...すが、それよりも前に忘れてましたね。実行権限与えないと実行されないですね。

chmod 755 /etc/mydns/script

上記のコマンドを実行すれば実行権限が付与されるのでcronは回るようになります。

まぁ、これでも別に問題ないのですが、「俺は起動した時に知りたいんだよ!」という超せっかちかもしれないユーザーに対して起動した瞬間にIPアドレスを通知するようにしたいと思います。

以下のように設定します。

vi /etc/init.d/mydns

"i"キーをクリック後、

#!/bin/sh # chkconfig: 2345 98 20
# description: DNS system
# processname: mydns-jp
#
# nasa114.live-on.net
/usr/bin/wget -O - 'http://(masterID):(Passwd)@www.mydns.jp/login.html'

を入力して保存して下さい。(escキー→":wq")

その後、chkconfig mydns onを入力し、サーバーが起動したと同時に実行させます。

これでSSHログイン環境とかは整備できたのでサーバーをセットアップして使うのみですね。

これして意味あったの?

本音を言うと、あまりないです。ただ、サーバーを数台持ってる人とかで~/.ssh/configファイルを使う人であれば毎度毎度変更しなくてもいいですし、らくだと思います。また、公開用でもIPアドレスであったり、ec2-(略).amazonaws.comというアドレスだったら面倒なのでこうしました。VPSでもRedHat系(CentOSとか)であれば拡張して使えますし、無料サーバーでも使おうと思えば使えると思います。VPS払うだけで精一杯すぎて...という人は是非使ってみて下さい。

EC2を使ったのは実験的に使うときにシャットダウン→起動時にIPアドレスが変わりわかりやすかったのと手軽だったのとJAWS-UGのネタにでもしようかと思っていたからです。また、OSC 2013 Hiroshimaに参加したということも少しあると思います。お疲れ様でした。