IT・ビッグデータ徒然ブログ

関西でインフラ、データ基盤系のエンジニアになるため、転職活動中。

ブログ移住計画その1~AWSでインストールの下準備~

前回の記事であげたように、この夏休み中にWordPressにブログを移行しようと考えています。
で、今日はその初回。
ただ単にWordPressをインストールするだけならどこかサーバを借りてデフォルトでインストールすれば問題ないのですが、
せっかくなので自称エンジニア(?)らしく技術的な部分も取り入れつつやってみます。

今回のWordPressインストールではAnsibleを使ってAWS(EC2)上に立てたいなと思います。

構成図はこんな感じ。

f:id:namusic701042:20180808104230j:plain

セキュリティにも考慮して、 踏み台経由でのSSHログインでWordPress用のDBにするMySQLサーバはPrivateのサブネット内に入れておきます。

AWS上でインストールの下準備

VPCの構築

まずは、VPCを作ります。

項目
名前 wordpress-vpc(仮名)
IPv4 CIDR 10.0.0.0/16

サブネットの構築

次にサブネットです。
今回は踏み台+wordpress用のサブネットとDB用のサブネットを作ります。

DMZサブネット

項目
名前 dmz(仮名)
VPC wordpress-vpc
アベイラビリティゾーン 自由に設定
IPv4 CIDR 10.0.1.0/24

設定後、自動割当IP設定の変更で

  • パブリックIPv4アドレスの自動割当を有効にする

にチェックをつけておく

Privateサブネット

項目
名前 private(仮名)
VPC wordpress-vpc
アベイラビリティゾーン 自由に設定
IPv4 CIDR 10.0.2.0/24

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

次にDMZ内のサーバ(インスタンスに)インターネットから直接アクセスさせるためのゲートウェイを作成

  1. インターネットゲートウェイの作成から名前をつけて作成
  2. 新規作成したゲートウェイを選択してアクション->VPCにアタッチ
  3. 最初に作ったVPCを設定

NATゲートウェイの作成

DMZ内のインスタンスとインターネットは接続できるのですが、
DB側インスタンスにはインターネットと接続できません。
セキュリティ的にはOKなんですけど、
これだとMySQLをインストールしたいときとかメンテナンス、アップデートするときにちょっとやっかい。
なので、

インターネット→プライベートサブネットは✕
プライベートサブネット→インターネットは○

みたいなことをうまいことしてくれるNATゲートウェイを作っておきます。
(これ結構金かかるんですよね・・・なので必要なときだけたてて、いらないときは削除予定)

NATゲートウェイの作成から、
1. サブネットでDMZサブネットのIDを指定 2. ElasticIPを設定

ルートテーブルを設定

NATゲートウェイ・インターネットゲートウェイとサブネットを紐付けるために、 ルートテーブルを作成

ルートテーブルの作成から、名前とVPCを指定して2つ作成

DMZサブネット

  1. サブネットの関連付けでDMZサブネットの関連付けにチェック
  2. ルートを編集し、以下を追加
送信先 ターゲット
0.0.0.0/0 インターネットゲートウェイID

Privateサブネット

  1. サブネットの関連付けでPrivateサブネットの関連付けにチェック
  2. ルートを編集し、以下を追加
送信先 ターゲット
0.0.0.0/0 NATゲートウェイのID

SSHの鍵を作成

サーバを立てる下準備の最後として公開鍵作ります。
というのも、基本的にAWS上のサーバにアクセスするときは公開鍵使うんですけど、AWSのサーバ立てるときに自動で落ちてくる鍵はパスフレーズなしなんですよね。。。
そんな鍵を使いたくないので、自作で作ってインポートさせます。

ssh-keygen -t rsa -b 4096 -f <鍵名>.pem

本当は、

ssh-keygen -t ed25519 -f <鍵名>.pem

ed25519暗号で生成した鍵を使いたかったけど、なぜかインポート時にエラーが出た

暗号はED25519は意識高すぎ、高杉くんらしい。
暗号鍵参考URL

AWSのEC2からキーペアに移動して、
キーペアインポートから作ったキーをインポート

インスタンス作成

これで心おきなくインスタンスを作成 ひとまず3台立てる

  • 共通項目
    • OSはCentOS7
    • SSH鍵はさっき作ったものを使用
  • 踏み台サーバ
    • t2.micro
    • SSD15GB
    • サブネットはDMZサブネット
    • セキュリティグループは22とSSH用の別ポートを一旦開けておく
  • Wordpressサーバ
    • t2.small
    • SSD20GB
    • サブネットはDMZサブネット
    • セキュリティグループは80,443を一旦開けておくsshは踏み台からのみアクセス可能に
  • MySQLサーバ
    • t2.small
    • SSD30GB
    • サブネットはPrivateサブネット
    • セキュリティグループはDMZサブネットに対して公開

これでサーバ建てられた

SSHログインの確認

3台のサーバにSSHでログインできるか確認します。 ただ、踏み台以外のサーバは直接SSHできないので、踏み台経由でログインするように設定します。

Macの場合:

# ~/.ssh/configファイルの中に記述
Host wp-bustion
    HostName <踏み台インスタンスのパブリックIP>
    User centos
    Port 22
    GatewayPorts yes
    IdentityFile ~/.ssh/<公開鍵のファイル>

Host wordpress
    HostName <WordPressインスタンスののプライベートIP>
    User centos
    Port 22
    GatewayPorts yes
    ProxyCommand ssh -CW %h:%p wp-bustion
    IdentityFile ~/.ssh/<公開鍵>

Host wp-mysql
    HostName <MySQLインスタンスのプライベートIP>
    User centos
    Port 22
    GatewayPorts yes
    ProxyCommand ssh -CW %h:%p wp-bustion
    IdentityFile ~/.ssh/<公開鍵ファイル>

ssh-addコマンドで毎回パスフレーズを入力しなくていいように設定

ssh-add ~/.ssh/<公開鍵ファイル>

実際にログインして確認

ssh wp-bustion
ssh wordpress
ssh wp-mysql

ログイン成功。

踏み台サーバのSSHポートを変更する

ここは賛否両論あるみたいなんですが、せっかくなのでポート変えておきます。

###踏み台インスタンスにログイン
### /etc/ssh/sshd_configを開いて以下を編集

###Port22
Port <新しいポート番号>

このあと

systemctl restart sshd

で再起動して、一旦ログアウト。

ローカルで~/.ssh/configのところで、

Host wp-bustion
    HostName <踏み台インスタンスのパブリックIP>
    User centos
    Port <新しいポート番号>
    GatewayPorts yes
    IdentityFile ~/.ssh/<公開鍵のファイル>

と編集。
再度SSHログイン。

うまくいった。

これで下準備完了