AWS構築手順メンテサーバ作成

本章では、SSH踏み台メンテナンスサーバーのEC2インスタンスを作成し、Ubuntuのセットアップを行います。

前章でも記載しましたとおり、EC-TRIPではセキュリティ確保の都合から、SSHでWebAppサーバーのメンテナンスを行う際、直接WebAppサーバーに接続せずに、踏み台用サーバーを介したSSH接続を行うこととします。
これによりAWS料金が生じますが、メンテナンスサーバーはt2.nanoのEC2インスタンスを利用し、更にメンテナンス終了時にインスタンスを停止する運営ルールにすることで、かかる金額は軽微となります。

EC2インスタンスの作成

まずはEC2インスタンスを作成します。

  1. EC2ダッシュボード→インスタンスを選択します。リージョンは東京を選択してください。 EC2-1 メンテサーバキャプチャ1
  2. インスタンスの作成をクリックすると、以下の画面が表示されます。
    まずはベースとなるイメージをOSから選択します。EC-TRIPではUbuntuを選択します。 EC2-1 メンテサーバキャプチャ2
  3. インスタンスタイプですが、メンテナンスサーバーなのでスペックは不要です。ここではt2.nanoを選択します。 t2.nanoは無料枠ではありませんが、この手順ではWebAppサーバーでt2.microを選択することから、メンテナンスサーバーはミニマムのt2.nanoとしています。 EC2-1 メンテサーバキャプチャ3 選択したら「次の手順:インスタンス詳細の設定」をクリックします。
  4. 以下の通りパラメータを指定します。ポイントは、サブネットにec-trip-pro-subnet-public-az-aを選択する点と、自動割り当てパブリックIPを有効にする点です。 EC2-1 メンテサーバキャプチャ4
    インスタンス数 1
    購入のオプション 無し
    ネットワーク ec-trip-pro-vpc
    サブネット ec-trip-pro-subnet-public-az-a
    自動割り当てパブリックIP 有効化
    IAMロール なし
    シャットダウン動作 保護する
    モニタリング 無し
    テナンシー 共有
    設定したら「次の手順:ストレージの追加」をクリックします。
  5. ストレージ(EBS)の設定をします。ここではデフォルトのまま次へ進みます。 EC2-1 メンテサーバキャプチャ5
  6. タグの追加をクリックして、キーに「Name」、値にec-trip-pro-ec2-mainteを設定します。 EC2-1 メンテサーバキャプチャ6 次の手順:セキュリティグループの設定をクリックします。
  7. 前章で作成したセキュリティグループを適用していきます。既存のセキュリティグループを選択するを選択し、一覧からec-trip-pro-secgrp-mainteを選択します。 EC2-1 メンテサーバキャプチャ7 確認と作成をクリックします。
  8. 内容に問題がなければ、起動をクリックします。 EC2-1 メンテサーバキャプチャ8
  9. キーペアについて問い合わせがあります。キーペアはEC2インスタンスにSSH接続する際の鍵になります。 未作成の場合は、リストから「新しいキーペアの作成」をクリックし、キーペア名を設定してダウンロードしてください。その後、インスタンスの作成をクリックします。 EC2-1 メンテサーバキャプチャ9 ここでダウンロードしたキーは、端末の~/.sshなどに保存しておいてください。
    以上でメンテナンスサーバー用のEC2インスタンスが作成できました。

メンテサーバのセットアップ

続けて、上記で作成したインスタンスにSSH接続してUbuntuのセットアップをしていきます。

SSH踏み台メンテンナスサーバーへのSSH接続

まず、SSHでメンテナンスサーバーに接続します。

  1. 接続先インスタンスのIPアドレスを把握します。EC2インスタンスの一覧上でec-trip-pro-ec2-mainteを選択し、一覧下記の詳細情報からパブリックIPを確認してください。 EC2-2 メンテサーバキャプチャ10
  2. 前章でダウンロードしたSSHキー(ここではaws-ec2.pem)を指定して、Macのターミナルなどから以下のコマンドでSSH接続を行います。 最初にキーのパーミッションを変更します(キーの場所は~/.sshとしています)
    $ chmod 400 ~/.ssh/aws-ec2.pem
    
    次に、接続先に上記で把握したメンテサーバのIPアドレスを指定し、以下コマンドでSSH接続をします。
    $ ssh -i ~/.ssh/aws-ec2.pem ubuntu@IPアドレス
    
    ubuntu@ip-10-0-1-71:~$などと表示されれば、SSH接続が完了です。

各種設定

続けて、SSH接続した状態で各種設定を進めていきます。

  1. Apt Update
    $ sudo apt-get update -y
    
  2. Locale設定
    $ sudo apt-get install -y language-pack-ja
    $ sudo update-locale LANG=ja_JP.UTF-8
    $ sudo cat /etc/default/locale  # 確認
    
  3. TimeZone設定
    $ sudo dpkg-reconfigure tzdata
    起動したUI上で Asia > Tokyo をカーソルで選択してエンター
    
  4. メンテナンスUser作成
    $ sudo adduser mainte  # mainteのユーザー名は任意の値にしてください
    # passwordなどを設定します(Room Numberなど不要であれば空欄のままエンター)
    
    # sudoグループ追加
    $ sudo gpasswd -a mainte sudo
    
  5. SSHの設定
    $ sudo vi /etc/ssh/sshd_config
    
    AuthorizedKeysFile %h/.ssh/authorized_keys  # コメント外す(authorized_keysで接続可能)
    
    Port 22
    Port 22012  # SSHのポートを追記してください。ここでは22012とします。なお、この時点で22は残しておきます。
    
    PermitRootLogin no  #prohibit-passwordからnoへ変更(rootログインを禁止)
    
    UsePAM no  #yesからnoへ変更(PAM認証無効化)
    
    # SSH再起動
    $ sudo /etc/init.d/ssh restart
    
    # mainteユーザのSSH設定
    $ sudo mkdir /home/mainte/.ssh
    $ sudo cp ~/.ssh/authorized_keys /home/mainte/.ssh/
    $ sudo chown -R mainte:mainte /home/mainte/.ssh/
    $ sudo chmod 700 /home/mainte/.ssh
    $ sudo chmod 600 /home/mainte/.ssh/authorized_keys
    
    # 一旦SSHを抜ける
    $ exit
    
  6. SSH接続確認
    Port: 22012, User: mainteでSSH接続が可能なことを確認します。 まず最初に、現在はセキュリティグループでSSHポート22のみが許可されているので、それを22012に変更します。 AWSコンソールから、EC2ダッシュボード→セキュリティグループを選択し、ec-trip-pro-secgrp-mainteを選択して、インバウンドタブ→編集をクリックします。 EC2-2 メンテサーバキャプチャ11 タイプで「SSH」となっている2行について、タイプを「カスタムTCP」に変更し、ポートに22012を記入します。 更に、ソースのIPアドレスをメンテサーバのプライベートIPアドレスに変更します(パブリックIPではなくプライベートIPを指定してください。また、末尾の/32を忘れずに。) EC2-2 メンテサーバキャプチャ12 セキュリティグループを変更したら、下記コマンドで改めてSSH接続します。
    $ ssh -i ~/.ssh/aws-ec2.pem -p 22012 mainte@54.250.252.156
    # SSH接続ができることを確認
    
  7. ubuntuユーザー削除
    ubuntuユーザーは不要となるため削除します。
    $ sudo userdel -r ubuntu
    
  8. SSHのPortから22を削除
    Port 22でのSSH接続を不可とします。
    $ sudo vi /etc/ssh/sshd_config
    
    # Port 22  # Port 22をコメントアウトまたは削除
    
    # SSH再起動
    $ sudo /etc/init.d/ssh restart
    
    # SSH接続解除
    exit
    
  9. SSH接続鍵のアップロード
    ローカル端末にある鍵をメンテサーバへアップロードしておきます。
    # ローカル端末で実行
    $ scp -i ~/.ssh/aws-ec2.pem -P 22012 ~/.ssh/aws-ec2.pem mainte@54.250.252.156:/home/mainte/.ssh
    

メンテサーバセットアップ

後述しますが、メンテサーバーはデプロイ用のサーバーとしても利用します。そこで、Ruby等をインストールしておきます。
メンテサーバにSSH接続した状態で以下を実行していきます。

ミドルウェアインストール

$ sudo apt-get install -y build-essential wget git-core libxml2 libxml2-dev libxslt1-dev libpq-dev mysql-client libmysqlclient-dev

Ruby関連のインストール

Rbenvのインストール

$ cd ~
$ git clone git://github.com/sstephenson/rbenv.git .rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
$ rbenv --version  # 確認

Rubyのインストール

$ mkdir -p ~/.rbenv/plugins
$ cd ~/.rbenv/plugins/
$ git clone git://github.com/sstephenson/ruby-build.git

$ cd ~
$ sudo apt-get install -y libreadline-dev
$ rbenv install 2.4.1  # 時間がかかります
$ rbenv rehash
$ rbenv versions  # 確認
$ rbenv global 2.4.1
$ ruby -v  # 確認

Bundleインストール

$ echo 'gem: --no-ri --no-rdoc' >> ~/.gemrc
$ gem install bundler

Githubへの接続設定

次に、メンテサーバーからGithubへの接続設定を行います。

  1. メンテサーバからGithubにSSH接続できるように以下の設定を行います。
    $ cd ~/.ssh
    $ ssh-keygen -t rsa
        Enter file in which to save the key (/home/mainte/.ssh/id_rsa): id_rsa
        Enter passphrase (empty for no passphrase):  # そのままEnter
        Enter same passphrase again: # そのままEnter
    
    $ vi config
    
    Host github github.com
      HostName github.com
      IdentityFile ~/.ssh/id_rsa
      User git
    
    $ cat id_rsa.pub
    # 表示される値をコピーする
    
  2. Githubの対象サービスのリポジトリを開き、Settings > Deploy keys > Add Deploy Keysをクリックします。 EC2-2 メンテサーバキャプチャ13
  3. Titleを記載後、Keyにコピーしたrsa.pubの値を貼り付け、Add keyをクリックして保存します。 EC2-2 メンテサーバキャプチャ14
  4. Githubでの設定完了後、WebAppサーバから以下コマンドでGithubにSSH接続できることを確認します。
    $ ssh -T github
    
    Hi xxxx/xxxx! You've successfully authenticated, but GitHub does not provide shell accessと表示されれば完了です。

SSH confingの設定

最後に、ローカル端末からのSSH接続が容易になるようSSH configを設定します。

  1. ローカル端末上のSSH configを編集します。
    vi ~/.ssh/config
    
    Host ec-trip-pro-mainte
      User mainte
      Port 22012
      IdentityFile ~/.ssh/aws-ec2.pem
      HostName 54.250.252.156
    
  2. 設定できたら、以下のコマンドだけでSSH接続可能なことを確認します。
    $ ssh ec-trip-pro-mainte
    

以上でメンテサーバの設定は完了です。次章では、本章で作成したEC2インスタンスのAMIを取得し、それをもとにWebAppサーバのインスタンス作成とセットアップを行います。