れとろのメモ置場

とあるSEのメモ置場

AWS上でRedmineサーバーを作ってみた(1日目:ネットワーク構築)

せっかくAWS SAAの試験勉強でAWSアカウント作ったし、色々サービスの勉強もしたのでなにかサーバーを立てみたくなり、タスク管理用にRedmineサーバーを作ってみた。 (やったことをメモ程度に書くだけで意外と疲れたので記事を2,3個に分割しておく。長過ぎると読むの疲れるし。)

やったこと

詰まったこと

  • VPCの設定(通信許可の設定周り)
  • RDSで作ったインスタンスに追加のユーザー作成、追加ユーザーでログイン
  • Apacheとpassengerの連携設定

構築までの手順

  1. VPCやサブネットの作成、セキュリティグループ・ネットワークACLの設定
  2. RDSでPostgresインスタンスの構築、Redmine用のDB作成
  3. EC2でRedmineのインストール、動作確認
  4. apacheとpassengerを連携させてWebサイトとしてRedmineの公開

※今回の記事では1だけを記載。2はこっち

VPCの構築

ウィザードを使えば一発でVPCの作成からサブネットの構築までできるけど、1回くらい手動で作ってみたいなと思って手動でVPC、パブリックサブネット、プライベートサブネットを作成してみた。

1.VPCの作成

VPC名とIPv4CIDRブロックを指定してVPCを作成する。

2.インターネットゲートウェイの作成

名前を指定してインターネットゲートウェイを作成する。

その後、作成したインターネットゲートウェイVPCにアタッチする。これでVPCからインターネットに通信する口ができる。

3.サブネットの作成

どのVPCの中に作成するか指定して、サブネットの名前、配置するアベイラビリティーゾーン、IPv4CIDRブロックを指定してサブネットを作成する。今回はインターネットからアクセスできる用のパブリックサブネットとインターネットからはアクセスできないプライベートサブネットの2つ用意したいので、サブネットを2つ作成する。 ※RDSでインスタント作成時にサブネットグループを作成する関係で結局パブリック:1個、プライベート:3個のサブネットを作成した。

1度作成したサブネットのサイズは変更できないので必要なIPの数より大き目に設定する。今回は深く考えずに/24で作成。(後々このサブネットに色々サーバー立ててみようとするだろうから)

4.セキュリティグループの作成

作成したVPC用にセキュリティグループを作成する。デフォルトで作成されているものもあるけど、そのままだとインターネットからVPCへの通信は全部拒否されているのでSSHだけ許可するセキュリティグループを作成。

5.ネットワークACLの作成

サブネット用にネットワークACLを作成する。こっちにもSSHを許可するように設定をしてからサブネットに関連付けを行う。 アウトバウンドルールにはすべての通信を許可するように設定しておく。(理由は後述)

セキュリティグループとネットワークACLの両方で通信を許可されていないとサブネット内のインスタンスと通信できないので設定内容に気をつける。 最小限のポートしか開けたくないと思ってアウトバウンドもSSHだけ許可設定してたらちょっとはまった。

6.ルートテーブルの作成

サブネット用にルートテーブルを作成する。初期設定でVPC内の通信用のルートは設定されていた。パブリックサブネット用ならここにターゲットがインターネットゲートウェイのルートを追加する。 今回はインターネットゲートウェイへのルートを設定したパブリックサブネット用のルートテーブルとインターネットゲートウェイへのルートは設定してないプライベートサブネット用の2つを作成。 その後、作成したルートテーブルをサブネットに関連付ける。

ここまで設定するとサブネット内とインターネット間で通信ができるはず。EC2インスタンスを用意して通信できるかどうか確認して、ダメそうなら設定内容を確認する。 1回目はここでEC2インスタンスSSH接続できなくて、設定見直してもどこが悪いのかわからなかったので1回全部削除してやり直すことに・・・

この記事書きながら何やったか思い出すついでに、できたばかりの大阪リージョンでやってみたらまたEC2につながらない・・・VPCはウィザード使って構築するのが無難だなあ。

その後、ネットワークACLのアウトバウンドルールにすべてのトラフィックを許可するとつながるようになった。許可設定は最小限にしたいからアウトバウンドルールもSSHだけ許可してたけどそれが原因だったみたい。 そういえばSSHサーバはポート番号22だけど、SSHクライアントはボート番号22じゃなくてランダムになるんだっけ。アウトバウンドルールでポート番号22だけ許可にしてたからSSHサーバ(EC2インスタンス)からこっちのPCへの通信ができなかったのか。原因がわかってスッキリ。

アウトバウンドとは言えすべてのポートでの通信を許可するのはセキュリティ的にどうなのかなあとは思うけど、ステートレスなファイアウォールだから仕方ないのかなあ。

続きはまた別の記事で。 あとはDBサーバの構築RedmineのインストールとapacheRuby on Railsのアプリを動かす設定をしたらおしまい。