ゴミ捨て場

命を大事にしな

AWS無料枠使ってRedmine立てて公開した 前編(AWS環境構築編)

目的

  • とりあえずAWS使うとなった時にやるべきことを確認する
  • 無料枠で何かやった気分になる
  • VPC、EC2、RDSを使ったWebサーバ構築、公開の手順を一通り覚える
  • あやふやなまんまなネットワーク知識を最低限整理する
  • 何が無料でできるのかを把握する
  • Redmineで(可能ならスクラムの手法を利用して)普通に作業を管理できるようにする

手順

AWSアカウントの作成

  1. 必要情報(アカウント名、メールアドレス、氏名、住所、電話番号など)を登録しアカウント仮登録
  2. 支払情報を登録
    • 支払いはクレカのみらしい
  3. 電話による自動音声で本人確認
  4. サポートプラン(ベーシックプランは無料)を選択
  5. AWSマネジメントコンソールにAWSアカウントでログイン
  6. AWSアカウント(ルートアカウント)にMFA(多段階認証)の設定をする

IAMユーザの作成

  1. IAMユーザの追加
    • ルートアカウントで作業すべきではないため変わりのAWS管理者用アカウントを追加する。
  2. IAMグループの作成
    • グループごと(例えば管理者グループ、開発者グループ、運用者グループ、のような形)にアクセス権限を設定できる。
    • 今回は管理者グループを作成
  3. IAMポリシーの作成
    • AWS管理権限の設定のこと。
    • IAMユーザ単位、IAMグループ単位、IAMロール単位に付与可能。
    • 今回は管理者グループ用にすべてのサービスとリソースへのアクセス権限を与えるポリシーを作成、付与する。
    • ただしデフォルトでは請求情報がIAMユーザだと閲覧できなくなっているため、ルートアカウントで請求ダッシュボードから許可を出す必要がある。
  4. アクセスキーの取得
    • IAMユーザを作成するとアクセスキー(CSV)をダウンロードできる。
    • 当たり前だがアクセスキーは公開してはならない。
    • 基本的にアクセスキーを使わずに制御できるようにすべきである(IAMロールを利用する)。
  5. IAMユーザでのログイン確認
    • 以降の作業はすべてIAMユーザで実施する。

VPCの構築

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

参考書読みながら以下の手順で進める。全部無料。

  1. VPCの作成
    • VPC:指定したリージョン(物理的な地域、日本だと東京がある、当然東京を指定した方がレスポンス速い)上の論理的に分離されたネットワークを作成できるサービス。
    • CIDR表記:IPアドレスのうちネットワーク部のビット長を/ビット長で示す表記。例えばVPCなら「10.0.0.0/16」というようにアドレス空間を表記する。10.0までがネットワークアドレスで、17ビット目以降から好きにサブネットやサーバにIPを割り振れる。
  2. サブネットの作成(公開サブネット、非公開サブネット)
    • サブネット:LAN内でネットワークを分けたい時に定義する論理的に分離されたネットワーク。アベイラビリティゾーン(物理的なゾーン単位、これが一致しているノード間の通信は速い)を指定する。今回の場合はインターネットからアクセスできる公開サブネット、アクセスさせない非公開サブネットを作成する。VPCと同じようにアドレス空間をCIDR表記で決めてやる必要がある。
  3. インターネットゲートウェイの作成
    • インターネットゲートウェイVPC内からインターネットに接続するためのもの。これを作成してVPNにインターネット回線を引き込む。
  4. ルートテーブルの作成
    • ルートテーブル:一般にはルーティングテーブルなどと呼ばれる。パケットの宛先IPアドレスがどの空間に属しているとき、どのネットワークにパケットを渡せばいいかが設定されたテーブル。例えばVPCのアドレス10.0.0.0/16宛てのパケットをlocal(自分のいるネットワーク)へ、という設定や0.0.0.0/0宛てのパケットをインターネットゲートウェイ(=デフォルトゲートウェイ)へ、などの設定をする。
  5. セキュリティグループの作成
    • セキュリティグループ:インスタンス単位で追加できるグループ。グループごとに通信(外からのローカルへの通信、ローカルから外への通信)のプロトコルごと、の許可設定をする。今回の例だと、公開するサブネットに置くインスタンス用のグループと、非公開サブネットに置くインスタンス用のグループを作ってやる。
    • 公開用セキュリティグループには、自宅IPからのSSH、自宅IPからのHTTPを許可。
    • 非公開用セキュリティグループには、公開用セキュリティグループからのpostgresql接続を許可。

RDSの作成

  1. DBサブネットグループの作成
    • VPC上にRDSインスタンスを置く場合DBサブネットグループを作成しRDSインスタンスを置く非公開サブネットを所属させる必要がある。
    • 可用性のためRDS用サブネットは複数用意し、所属させる必要がある(マルチ-AZ対応のため)。
  2. RDSインスタンスの作成
    • Redmine公式CentOS向けインストール手順に従ってPostgresql10を選択。
    • 先ほど作成したDBサブネットグループを選択。
    • 非公開用セキュリティグループを選択。
    • 作成には若干時間がかかる。

EC2の作成

  1. EC2の作成
    • せっかくなのでAmazon Linux 2を選択。
    • 公開用サブネット、公開用セキュリティグループを選択。
  2. ElasticIPの取得、EC2への割当
    • ElasticIPは固定IPを無料で確保できるサービス。ただし起動中のインスタンスに割当中のみ無料で、停止していたり、割当しているインスタンス無いままだと課金されていく。
  3. キーペアの作成
    • 公開鍵(キーペア)を作成して、自宅からEC2へ安全にSSHログインできるようにする。
    • 当たり前だが他の人に公開してはならない、サーバ作業者にだけ渡す。
  4. SSHログイン確認
    • EC2は一定時間通信がないと切断する仕様があるので、それが嫌ならKeep Aliveの設定をクライアント側で行っておく(15秒に1回にした)。