はじめに
今回はEC2をWordpressサーバーとして構築します。条件は以下の通り。
- 構築はterraformを使用
- コストは最小限に抑える
- 最低限のセキュリティは担保する
練習用で実践するので、実際にwordpressを使用してホームページを運用したい場合には今回ご紹介するアーキテクチャはセキュリティや可用性等の観点から足りていない部分が多いですが、コストがもう少しかかっても大丈夫な方向けの構成も紹介していこうと思います。
前提条件
- AWS CLIをインストール済みでprofile等の設定が完了している
- terraformをインストール済みで基本的な使い方が分かる
あまり深いことはしないのですが、ご自分でterraformを使用してリソースを作成した方なら問題ないかと思います。
今回のアーキテクチャ
構成図を書くのも悲しいくらい何もないのですが、今回はコストを抑えつつEC2をwordpressサーバーとして構築したいのでこの構成にしています。
本来はCloudFront,ALBをEC2の全面に起き、EC2はプライベートサブネットに配置すべきです。
今回はEC2のSecurityGroupに自宅PCのIPからのみ接続を許可するようにして最低限のセキュリティを担保していきます。
SSM接続できるようにインスタンスプロファイルを設定することで毎回sshでログインする手間が省けるのでおすすめです。
実践的なアーキテクチャ
もう少しコストをかけてもいい場合は以下のような構成にしたいです。
変更点
- Route53,CloudFrontを使用して独自ドメインを取得することで、任意のドメインでWordpressを公開することができる
- ALBをパブリック、EC2をプライベートサブネットに配置することでEC2へ直接アクセスさせない
- DBとサーバー(EC2)を分けることで可用性の向上
- サーバーからインターネットにアクセスする際はNatGatewayを使用することでサーバーのIPを秘匿できる
ただ上記の場合は、ALB、NatGateway、RDSで料金がそこそこかかりますのでご注意ください。
terraform
以下でterraformのソースコードを公開しているので参考にしてみてください。
READMEに使い方を記載しています。
https://github.com/takaakihoya/aws-ec2-wordpress
作成されるリソースの一覧としては以下です。
リソースタイプ | 数 |
---|---|
aws_instance |
1 |
aws_iam_role |
1 |
aws_iam_instance_profile |
1 |
aws_vpc |
1 |
aws_subnet |
4 |
aws_internet_gateway |
1 |
aws_route_table |
2 |
aws_security_group |
1 |
ハマったポイント
EC2作成時にユーザーデータを設定してWordpressに必要なものをいくつか設定したのですが、ここが結構ハマりましたので共有します。
1.ユーザーデータはルートユーザー権限で実行されるので、sudo
が不要
2.インストールしたパッケージの不適合
特に2.でかなりつまずきました。
いろいろなブログを参考にしましたが、結局公式のリファレンス通りに実行するのが一番早かったです。。
https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/hosting-wordpress-aml-2023.html
今回他にも色々とハマったポイントはありましたが、terraformで作成しているので作り直すのがとても楽で、こういった検証時にスクラップ&ビルドを繰り返す際はIaCの恩恵をとても感じました。
おわりに
とりあえずこれでEC2でwordpressを実行することはできます。
コストをかけてもいい場合はより実践的なアーキテクチャで構築することをおすすめします。