1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NGINX+WordPress+AWS Aurora Serverless(MySQL5.6)でなんとか立ち上げてみる

Last updated at Posted at 2021-03-07

個人用ですが、役に立つとこともあるかも。

関連記事

この記事が役立ちそうな対象者

  • ぼく
  • とりあえずAWS触ってみたい人で、学習中だけどなんかまとまった記事欲しい人
  • AWS上にWordPress載せて、Webサイトの構成を作ってみたい人

AWS側で実施したい構成

  • SSL証明書インストール
  • httpをhttpsにリダイレクト
  • 記事のテキストをS3に保存
  • 記事の画像をS3に保存
  • 記事の画像をCloud Frontでキャッシュして表示させる(CDN)
  • 記事の画像のURLをS3上にする
  • 記事の画像のURLを/images等にする
  • 料金が1,000円以上になったら通知をする
  • ELBでEC2×2に不可分散する
  • EC2を変更する(より強いスペックにする)
  • 踏み台用(bastion)EC2を構築し、その中にpemキーを保存する
    • →あんまよくなさそうなのでpemキーの保存方法は別途検討..

事前準備

全体の参考

  • AWS公式

  • AWSアカウントを取得したら速攻でやっておくべき初期設定まとめ

    • みんな大好き有名な記事。updateもしているみたい
  • CloudWatchで請求アラート作成しようとしたら下記表示が出てきた。

    • 謎にUS East(N. Virginia)リージョンで請求データとアラームをまとめているらしい...
      スクリーンショット 2021-01-25 5.53.42.png
  • CloudWatchの通知が単にメールアドレスではなくAWS SNS(Simple Notification Service)利用になってた。元から?

  • SNS用に新規トピック作成

  • メールアドレス追加。

  • メールアドレスを認証。

    • このメールアドレスは、AWS SNS側で"サブスクリプション"として、管理される。
    • ここでのサブスクリプションは宛先リストみたいなもの。
  • Cloud Trailの箇所は実施していない。

  • git-secretsのinstallだけ実施した。

  • 参考:クラウド破産しないように git-secrets を使う

本番環境と開発環境でのAWSアカウントの分け方

参考:AWSアカウントとVPC、分ける? 分けない?: 分割パターンのメリット・デメリット

  • 結論:システム×環境種類(本番/開発)で分けていくべき。

AWS リソースを使っていく

全体像

  • Regionは東京のみ。

  • VPC×1

    • Subnet
      • Public Subnet×1
        • ELB(Elastic Load Balancer)×1
          • Elastic Network Interface(default attached)
        • EC2(Amazon Linux2)×2
        • Elastic IP×1
      • Private Subnet×1
        • RDS(Relational Database Service)
    • S3(Simple Storage Service)
    • Route53×1
    • CloudFront(CDN)
  • Internet Gateway×1

  • ドメイン:お名前ドットコムで管理。

    • AWS上でも購入できるけど、個人的にドメイン自体は複数持ってるので。

VPC作成

  • VPC×1作成。

    • 10.0.0.0/16
  • Subnet×2 in 1aAZに作成

    • VPC内にPublic Subnetを作成
    • VPC内にPrivate Subnetを作成
  • Internet Gatewayを作成

    • VPCにattach
  • Routing設定

    • ルートテーブルには「送信先」と「ターゲット」が登録できる
    • 「送信先」は通信がきた時の目的地。「ターゲット」はRouterが案内した目的地。
    • localは自身のネットワーク内に転送する(返す)ことを表す
    • ルートテーブルに記載された0.0.0.0/0はデフォルトルートといい、ルートテーブルに登録されていないアドレスの場合に通る経路を示す
      • デフォルトルートをInternet Gatewayに設定する。
    • ルートテーブルのレコード(?)の適用優先順位は、よりIPアドレス範囲が狭いルートに該当するもの。
    • 例:10.0.0.0/16 > 10.0.20.0/24
      • この場合10.0.20.0/24のルートが優先
    • ルートテーブルはAWSの場合、VPCと各Subnetに対して設定可能
      • Subnetに対してルートテーブルは1つだけ。
      • AWSでは明示的にRouterを設置しない。
      • Subnetに対してルートテーブルを割り当てるとRouterがあるような動きになる
    • VPCとPublic Subnetに関連付け
    • デフォルトゲートウェイ設定を行う
      • ルート追加:送信先0.0.0.0/0
      • ターゲット:作成したInternet Gateway

EC2

  • t2.microで作成..
  • セキュリティグループ設定
  • keyは一旦Google Driveにも保存...

セキュリティグループ

  • ※EC2立ち上げたばかりだと、標準でSSH(port:22)のみinbound許可されている。
  • 接続を許可したいEC2インスタンスに紐づいたセキュリティグループのインバウンドルールを編集
    • ルールを追加。まずはhttp(port:80)を任意の場所(どこでも)から許可。

スクリーンショット 2021-03-07 22.09.18.png

  • これでnginxのデフォルトページが表示される。

スクリーンショット 2021-03-07 22.11.33.png

Elastic IP

  • Elastic IPアドレスの割り当てをクリック
  • 割り当てたいインスタンスを選択。

プライマリプライベート IP アドレスを指定しないでインスタンスを起動すると、サブネットの IPv4 範囲内で使用可能な IP アドレスが自動的に選択されます。

Route53

  • ホストゾーンを作成する
    • ドメイン名を入力
    • タイプはパブリックホストゾーンでOK
  • NSレコードとSOAレコードが作成される
    • NSレコード:NameServer情報
    • SOAレコード:ゾーン情報
  • このままではRoute53、ドメインとEC2が紐づいていないのでドメインでサーバにアクセスできない。
  • Route53でレコードを作成
    • レコードタイプはA
    • 値にGlobal IPを入力
    • TTLはデフォで一旦OK
    • レコード名は標準何も入力しなくてよい
      • 空欄であれば、取得したドメインでアクセス可能
      • 何か文字を加えたければサブドメイン的に利用可能(多分)
        • 例:sub.hoge.com
      • ルーティングポリシー:一旦シンプルで。

RDS

  • データベース>設定 からマルチAZ有無を確認できる。

  • データベースを選択し、編集からマルチAZ有無を変更可能。

  • まず、RDSを設置するprivate Subnetを作成

  • RDSに対するセキュリティグループを作成

    • EC2のDashboardから。
    • ※グループ名は設定後変更できない。 :cry:
    • インバウンドルールを作成
      • タイプ:MySQL/Aurora
      • ソース(アクセス元):カスタムでpublic SubnetのEC2が入っているセキュリティグループを検索して選択
    • 以上。作成する。
  • :book: DBサブネットグループ

    • 複数のAZにあるSubnetに、RDSを作成する際に利用するグループ
      • 1つだけSubnetを選択してもエラーとなるため、複数のSubnetを選択する必要がある。
    • RDS作成する範囲を決めれる便利なやつ?
    • EC2管理コンソールで作成したSubnetの中にRDS用のSubnetを作成するイメージ?

↓↓↓こんな感じでRDS作成時に選択する 
create_RDS_select_subnet.png

  • :book: パラメータグループ

    • 作成はした。
  • :book: オプショングループ

    • 作成はした。
  • RDSを作成。

    • 今回はセキュリティグループと合わせてMySQL
    • Standby Instanceを作成してMulti AZにRDSを設置するか否か選択可能
      • スタンバイインスタンス作成しない場合は、RDSを作成するAZを選択可能。
      • なので、DBサブネットグループで複数AZの複数サブネットを選択していても融通はきく(RDS1つだけ設置可能)
    • データベース認証方式を選択
      • パスワード認証:DBインスタンスに対して設定する(RDS作成画面で設定が必要) IDとパスワードだけ
      • パスワードとIAMデータベース認証
      • RDSリソースアクセス権限がある、IAMユーザの認証情報とDBインスタンスに対するID/pass情報を使用して認証。

RDS_auth_method.png

  • ↓RDS MySQL MultiAZの料金...個人では高すぎぃ〜〜〜

RDS_MySQL_MultiAZ_pricing.png

料金抑える参考

どのDBを選択するか参考(Aurora Serverless,PostgreSQL,MySQL,MariaDB)

CloudWatch

  • AWS SNSでトピックを作成して、指定のメールアドレスへアラートを飛ばすことはできる
    • 一度メール認証をする必要がある
    • SNSのサブスクリプションでメールを管理している。

コマンド解説

ec2インスタンスへのログイン

chmod 600 ~/NNN.pem
  • 管理者権限以外は読み書きできないように設定している。
  • 初めだけ設定しよう。

↓↓↓SSHログイン

ssh -i ~/Desktop/NNN.pem ec2-user@12.345.123.14
  • sshだけ入力するとusageとして引数一覧を見ることができる。
  • ~/Desktop/NNN.pemはec2のpemファイルの場所。
  • @以降はec2のpublic IP
    • デフォルトだと自動で割り当てられる
    • 再起動等するとGIPは変更となる
    • Elastic IPで一定にしよう。

:head_bandage: :exclamation: UNPROTECTED PRIVATE KEY FILE!と表示されてしまった場合

↓↓↓プロセスとポート番号一覧取得

sudo lsof -i -n -P
  • どのポートが何に使われているかわかる
  • 接続しているクライアントがどのポートを利用しているかわかる
  • サーバ側がどのポートを開放(listen状態)しているかわかる
  • 参考:lsofコマンド入門

↓↓↓yumでinstallしたもの一覧

yum list installed

↓↓↓EC2(Amazon Linux2)へnginxをインストールする

sudo amazon-linux-extras install nginx1
  • sudo yum install nginxだと下記表示してくれる。

"nginx is available in Amazon Linux Extra topic "nginx1"
To use, run # sudo amazon-linux-extras install nginx1"

↓↓↓nginx起動

sudo systemctl start nginx
  • ステータス確認はsudo systemctl status nginx
  • サーバ(EC2)と共に起動するにはsudo systemctl enable nginx
    • sudo systemctl is-enabled nginxでenableか確認可能

※EC2立ち上げたばかりだと、標準でSSH(port:22)のみinbound許可されている。
→したがって、http通信(port:80)は許可されていないので、GIP打ってもnginxの表示はでないよ。
→セキュリティグループでport80を許可してみる

監視系コマンド

↓↓↓CPU使用率確認

top
  • これだけでOK

↓↓↓プロセス確認

ps aux

DNS系

↓↓↓NameServer知りたい時

dig hogehoge.com NS +short
  • +shortをつけることでシンプルにNSだけ出てくる

RDS系

  • ↓↓↓EC2にログインして、mysqlをインストール
sudo yum -y install mysql

参考

mysql -h ##エンドポイント(コピぺ) -u ##マスターユーザー名 -p

RDS_endpoint-2.png

  • -h:endpointを指定してRDSを特定
  • -u:ユーザー名入力
  • -p:パスワードを求められる

↓↓↓Password入力後のTerminal(Ctr+C orexit;でDB抜けられる)

Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.6.10 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> ;
  • ↓↓↓DBを作成する
    • 小文字でもOK.
    • :expressionless: 文末に;をお忘れなく!
CREATE DATABASE ##データベース名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
  • ↓↓↓DB名を表示する
SHOW DATABASES;
  • ↓↓↓DBのユーザーを作成する

参考:MySQLで新しいユーザーを作成して権限を付与する方法

CREATE USER '##ユーザー名'@'%' IDENTIFIED BY '##パスワード';

%はどこからでもログイン可能という意味。
RDSへのセキュリティはセキュリティグループで担保する。

▽参考:

GRANT ALL ON ##ユーザー名. * TO '##ユーザー名'@'%';
  • ↓↓↓権限付与した設定を反映させる(権限のリロード)
FLUSH PRIVILEGES;
## ↓↓ユーザが持つ権限を表示
GRANTS FOR ##ユーザー名
SELECT  host, user FROM mysql.user;
  • 権限削除はREVOKE ##内容 ON ##DB名.Table名 FROM ##ユーザ名'@'%';
  • ユーザー削除はDROP USER '##ユーザーネーム'@'%'

WordPress

  • ↓↓↓phpをインストール

参考:(Amazon公式Docs)Amazon Linux 2 を実行している EC2 インスタンスに Extras Library からソフトウェアパッケージをインストールする方法を教えてください。

sudo amazon-linux-extras install -y php7.4
  • ↓↓↓WordPressを動かすのに必要なPHP系ライブラリインストール

参考:
php環境構築時に入れ忘れてコケるやーつ…。
PHPでmbstringを設定して日本語環境に対応する方法を現役エンジニアが解説【初心者向け】
 →mbstringは日本語化してくれるやつ

sudo yum install -y php-mbstring
  • ↓↓↓ライブラリインストール後は、有効化のためにNGINXを再起動
sudo systemctl restart nginx
  • ↓↓↓WordPressの最新版DL(保存したい場所にdirectory移動しておくこと)

・URL参照:https://ja.wordpress.org/download/

wget https://ja.wordpress.org/latest-ja.tar.gz
## tarでファイルを解凍
tar xzvf latest-ja.tar.gz
sudo cp -r * /usr/share/nginx/html/
#または
sudo cp -r * /var/www/html/wp/
  • ↓↓↓NGINXに権限を渡す
sudo chown -R nginx:nginx /usr/share/nginx/html/
  • NGINXのデフォルト公開ディレクトリはusr/share/nginx/html
    • vimで開くと確認できる
    • sudo vi /etc/nginx/nginx.conf
    • 参考:[Qiita]vimの抜け方(メモ)
      • :wで保存
      • :wqで保存して終了
      • escキーで編集モードから抜ける

:cry: 自分の失敗?書いておく

  • apacheと同じように/var/www/htmlを作成してそこにWordPressのdirectoryを置いてみた。
  • NGINXのデフォルト公開ディレクトリではないので、変更が必要だった。
  • 変更したけどサイトみにいっても変更なし(NGINXのページが表示される)。
  • configファイル見ると、HTTPとHTTPSの時の公開ディレクトリだけではなく他にもuser/share/nginx~~のディレクトリが使われていた。
  • そもそも無理にapacheと同じにする必要はないので、NGINXデフォルトの公開ディレクトリであるusr/share/nginx/htmlにWordPressのdirectoryをコピー
  • /var/www/htmlに置いていたものはなんとか削除..
  • サイトみに行くとWordPressの表示が!よかった :metal:

:question: :expressionless: さらにつまづいたので書いておく(未解決)

  • 上記のようにして、サイトが表示されたが、~~/wp-admin/set-up.config.phpの設定画面から、下記エラーが出現。
    WordPress wp-config.phpファイルに書き込みできません。
  • php-pfmとnginx.confの設定を何度も調べて確認したりしましたが、どうにも突破できませんでした。。
  • ゴリ押しですが、結局WordPressのアナウンスの通り、wp-config.phpを作成することに。
    • wp-config-sample.phpと同じdirectoryにtouch wp-config.phpで作成
    • エラー画面でWPが作ってくれたtxtをコピーしてsudo viから編集して貼り付け。
    • nginxとphp-fpmをrestartすると「config.phpあるっぽいですけど、WPインストールしますか?」と聞いてくれる。
      • restartしないと、NGINXの404エラーが返ってきた。
  • こうしてWPのサイト名、ユーザ等作成して、超なんとかWordPressのダッシュボードまで辿り着きました。。

wp_dashboard.png

  • どこかで今回の設定のツケがきそうです。
    • プラグインとか子テーマ作成、テーマupdateとか..

用語メモ

  • :book: CIDR(サイダー;Classless InterDomain Routing)表記:例:192.168.10.0/24
    • IPアドレスの表記方法
    • IPアドレスは大抵前半24bit(8×3)/32bitでネットワーク部を表す
      • どのネットワークかという住所(区)のこと
    • 後半8bit(8×1)/32bitでホスト部を表す
      • どの端末か(家)のこと
    • CIDR表記の192.168.10.0/24について
      • /24は、「ネットワーク部がIPアドレスの前半何bitまでなのかを明らかにする」もの
    • ※SubnetのIPアドレスはVPCのIPアドレスの範囲内にする必要がある。
    • したがって、っ
  • :book:サブネットマスク表記:例:192.168.10.0/255.255.255.0
    • ネットワーク部で利用するbitを記載している。
    • IPアドレスの、前から255bit×3をネットワーク部で利用すると明記している。
  • 参考:Qiita:IPアドレスの基礎知識
  • 参考:【図解】IPアドレスの仕組み(クラス分類からサブネットまで)
    • 気にしなくていいんだろうけどクラスの考え方的にはClass Bがバランス取れてる
    • →だからSubnet概念が生まれた。

AWS試験メモ

:pencil: 参考:

AWSでさらに実装したいこと

AWSアカウント削除メモ

アカウントの解約
私は、閉鎖後期間が過ぎると、閉鎖したアカウントを再開できなくなることを認識しています。
私は、閉鎖後期間が過ぎると、請求コンソールにアクセスして過去の請求書や課税書類をダウンロードできなくなることを認識しています。
[#/請求の明細書はすべて、こちらからダウンロード]。月を選択し、概要セクションを展開し、支払い請求書や課税書類をダウンロードします。
私は、閉鎖後期間が過ぎると、このアカウントと現在関連付けられている E メールアドレスを使用して AWS アカウントを新規作成できなくなることを認識しています。

参考メディア

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?