こんにちは、ジーピーオンライン(@gpol_tw)のツバサです!
AWSとはアマゾン ウェブ サービスのことで、Amazon Web Servicesの頭文字をとってAWS(エーダブリューエス)と呼ばれています。Webサイト構築の場面でAWSと言えばクラウドサーバーのAWSサーバーを指すことが多く、弊社でも利用する機会が増えています。
この記事では、Web担当者さまやWebディレクター向けに、AWSでWebサイトを構築する時の注意点を3つのカテゴリに分けてまとめました。
サーバー選定から相談可能
もくじ
AWSとは
AWS(アマゾン ウェブ サービス)とは、Amazonが提供する世界最大級のクラウドサービスのプラットフォームです。サーバー、ストレージ、ネットワーク、データベースなど、ITインフラに必要な製品やサービスを幅広く提供しており、企業はもちろん、個人事業主やスタートアップでも利用されています。
AWSは必要なサービスを必要なだけ利用できる従量課金制を採用しているため、初期費用を抑え、コストを最適化できる柔軟な点は利点のひとつです。一次的なアクセス増が多いような大規模オウンドメディアや、大規模キャンペーンサイトの構築などで強みを発揮します。
もうひとつの利点はセキュリティ面です。AWSの場合、クラウドサーバーの不安要因であるセキュリティに強みがあるため、クラウドサーバーへ移行する際はまず検討にあがるのではないでしょうか。下記AWS公式サイトでは、優れたセキュリティについて詳しく記載されています。
AWS のクラウドコンピューティング環境は、現時点で最高レベルとなる柔軟性とセキュリティを発揮するよう設計されています。AWS のコアインフラストラクチャは、軍隊、国際展開している銀行、およびその他高い機密性が求められる組織のセキュリティ要件を満たすように構築されています。これは、300 を超えるセキュリティ、コンプライアンス、ガバナンスのサービスと機能を備え、143 のセキュリティ標準とコンプライアンス認証をサポートする、充実したクラウドセキュリティツールによって裏付けられています。
【関連記事】Webサイト運用サーバーの選び方、特徴をふまえて解説!
AWSのセキュリティ対策
AWSを使用する場合、共用レンタルサーバーや専用サーバーのように、標準でWAFなどセキュリティ対策ツールを使えるわけではありません。AWSのセキュリティグループやアクセス制御リスト(ACL)などを、適切に設定・導入していく必要があります。
その他、ミドルウェアのバージョンやサポート期間を意識して導入するバージョンを決めていく必要があります。
PHPのバージョンについて
まず、導入するPHPのバージョンがセキュリティサポート期限を迎えていないか確認しましょう。PHPは2年間のアクティブサポート(不具合やセキュリティの定期リリースのサポート)期間の後、2年間のセキュリティサポート(重大なセキュリティ問題が生じた時に解決する不定期リリースのサポート)があります。
Each release branch of PHP is fully supported for two years from its initial stable release. During this period, bugs and security issues that have been reported are fixed and are released in regular point releases.
After this two year period of active support, each branch is then supported for two additional years for critical security issues only. Releases during this period are made on an as-needed basis: there may be multiple point releases, or none, depending on the number of reports.
PHP 公式サポート期限
2024年5月現在、PHP8.1以上がサポート対象となっています。(PHP8.1のアクティブサポートは終了しています)
バージョン | 初回リリース日 | 最新リリースバージョン | 最新リリース日 | アクティブサポート | セキュリティサポート |
---|---|---|---|---|---|
8.3 | 2023/11/23 | 8.3.9 | 2024/07/04 | 2025/12/31 | 2027/12/31 |
8.2 | 2022/12/08 | 8.2.21 | 2024/07/04 | 2024/12/31 | 2026/12/31 |
8.1 | 2021/11/25 | 8.1.29 | 2024/06/06 | 2023/11/25 | 2025/12/31 |
参考:PHP: PHP 8 ChangeLog、PHP: Supported Versions
公式サポートが終了した PHP
公式のサポート(アクティブサポート、セキュリティサポート両方)が終了したPHPの一覧です。
2024年5月現在、PHP8.0以下がサポート対象外となっています。
バージョン | 初回リリース日 | 最新リリースバージョン | 最新リリース日 | セキュリティサポート |
---|---|---|---|---|
8.0 | 2020/11/26 | 8.0.30 | 2023/08/03 | 2023/11/26 |
7.4 | 2019/11/28 | 7.4.33 | 2022/11/03 | 2022/11/28 |
7.3 | 2018/12/06 | 7.3.33 | 2021/11/18 | 2021/12/06 |
7.2 | 2017/11/30 | 7.2.34 | 2020/10/01 | 2020/11/30 |
7.1 | 2016/12/01 | 7.1.33 | 2019/10/24 | 2019/12/01 |
7.0 | 2015/12/03 | 7.0.33 | 2018/12/06 | 2018/12/03 |
5.6 | 2014/08/28 | 5.6.40 | 2019/01/10 | 2018/12/31 |
5.5 | 2013/06/20 | 5.5.38 | 2016/07/21 | 2016/07/21 |
5.4 | 2012/03/01 | 5.4.45 | 2015/09/03 | 2015/09/03 |
5.3 | 2009/06/30 | 5.3.29 | 2014/08/14 | 2014/08/14 |
5.2 | 2006/11/02 | 5.2.17 | 2011/01/06 | 2011/01/06 |
5.1 | 2005/11/24 | 5.1.6 | 2006/08/24 | 2006/08/24 |
5.0 | 2004/07/13 | 5.0.5 | 2005/09/05 | 2005/09/05 |
参考:PHP: PHP 7 ChangeLog、PHP: PHP 5 ChangeLog、PHP: Unsupported Branches
導入するPHPのバージョンは、開発するシステムの機能要件だけでなく、運用期間(ホームページのコンテンツとして長く運用されていくか)などもふまえて、特に慎重に選定しましょう。
PHPの設定について
次はApache(httpd.conf、 php.php)の設定に問題がないか確認しましょう。AWS導入時はデフォルトの設定になっているため、セキュリティ対策として設定の更新が必要です。htaccessの利用は、mod_rewriteを有効化(ドキュメントルート以下を AllowOverride All)してください。
httpd.conf の設定例
mod_rewriteの有効化します。※Ubuntuの場合、mod_headers も有効化
セキュリティ対策に次の6点を設定します。
- ServerTokens Prod:apacheのバージョン情報の隠蔽
- X-Content-Type-Options "nosniff":ファイルの内容をContent-Type属性から判断する設定
- X-Frame-Options "SAMEORIGIN":iframeやembedの埋め込みをオリジンのみ許可
- X-XSS-Protection "1; mode=block":XSSを防ぐための設定
- Strict-Transport-Security "max〜":常時httpsを強要
- TraceEnable Off:XST対策、TRACEメソッド無効化
cgi-binのエイリアスを無効化します。
php.iniの設定例
本番環境では、PHPの情報やエラーに関する情報が表示されることはセキュリティ上好ましくありません。最低限設定すべき項目を見ていきましょう。
その他設定例
Apacheのウェルカムページを無効化します。
PHP拡張モジュールは足りているか
事前に必要なモジュールを確認し、足りていないものはインストールが必要です。
▼必要な拡張モジュール一例
- php-fpm
- php-mysqli
- php-json
- php-mbstring
- php-gd
- php-xml
- php-curl
- php-zip
- phpredis(php-pecl-redis)
apacheの再起動後も設定が反映されない場合、php-fpm 側の設定を疑ってみてください。
(/etc/php-fpm.d/www.conf)
AWSのコスト管理
AWSは使用した分の料金のみを支払う従量課金制です。適切に管理しないと想像以上にコストを膨らませてしまう可能性があります。
AWSの各サービスについての無料利用枠とその制限は以下の公式ページにまとめられていまので、どのようなものがあるのか確認しておきましょう。
実際に利用していてうっかり課金されてしまう4つのポイントをまとめました。それぞれ解説します。
- 未使用のEIPを解放しないまま放置してしまう
- 未使用のリソースが残ったままになっている
- スナップショットがバックアップとして残っている
- 停止したRDSがいつの間にか再起動されている
1. 未使用のEIPを解放しないまま放置してしまう
EIP(AWS Elastic IP アドレス)とはEC2の動的に変わってしまうグローバルIPアドレス(パブリックIPアドレス)を静的なパブリックIPアドレスに固定するためのものです。
次の条件にすべて当てはまる場合、EIPに対する課金はありませんが、EC2にアタッチされていない状態で確保したままだと課金の対象になります。
- Elastic IP アドレスが EC2 インスタンスに関連付けられている。
- Elastic IP アドレスに関連付けられたインスタンスが実行中である。
- インスタンスには、1 つの Elastic IP アドレスしかアタッチされていない。
- Elastic IP アドレスが接続されたネットワークインターフェイスに関連付けられている。詳細については、「ネットワークインターフェースの基本」を参照してください
新しいEIPの発行はすぐにできるので、EIPが必要ない場合には解放するようにしましょう。
2. 未使用のリソースが残ったままになっている
AWSのリソースやサービスを使い終わったにも関わらず、それらを停止・削除することを忘れてしまった場合など、不必要な課金が続いてしまいます。
設定を変更する場合にも注意が必要で、誤って大規模なインスタンスを起動したりストレージを大量に消費することで料金がかさんだりすることがあります。
また、東京リージョンで作業していたつもりが、別のリージョンにリソースを作成してしまった場合も注意が必要です。マネジメントコンソールの表示はリージョンごとに異なるので、常にどこのリージョンで作業しているか確認するようにしましょう。
参考:リージョンを選択する - AWS Management Console
3. スナップショットがバックアップとして残っている
EC2サーバー構築では、EBSと連携して利用されるケースが多く、EBSにはスナップショット機能でバックアップを作成できます。しかし、EC2を削除後もEBSのスナップショットが意図せず残っていると、不要な課金が発生してしまう可能性があります。
EC2とEBSボリュームを削除した後、関連するEBSスナップショットが不要であれば削除しましょう。
また、RDS(リレーショナルデータベースサービス)に関しても同様のことが言えるので、DBインスタンスの削除に関しても不要なスナップショットが残っていると、ストレージ容量分の課金が発生します。
4. 停止したRDSがいつの間にか再起動されている
Amazon RDSの仕様として、「Running」(起動中)でも「Stopped」(停止済み)でもストレージコストは発生します。「Running」時は別途料金がかかります。(インスタンス時間に基づいて請求されます)
※Amazon RDS(Amazon Relational Database Service)とは、Amazon Web Services (AWS) で提供されるマネージド型のリレーショナルデータベースサービスです。
ただし「Stopped」の状態は最大で7日間しか保たれず、7日経過すると自動で「Running」になる仕様があります。気付かぬうちに起動していて費用がかかることもあります。
運用フェーズの管理
レンタルサーバーを使っている場合、インフラのメンテナンスはサービス側でおこなっているため、例えばミドルウェアのセキュリティサポート対応なども定期的に実施されます。
それに引き換え、AWSではさまざまなサーバー運用対応を契約者側で対応していく必要があり、専任のインフラ運用チームで運用するか、外部に委託して運用していく必要があります。
運用設計フェーズにおいて、特に注意が必要となる3つのポイントについて紹介します。
- ディスク容量の圧迫
- 定期的なサービスのセキュリティアップデートによる対応
- PHPのバージョンアップ対応
1. ディスク容量の圧迫
Webサーバーの容量が逼迫し、100%に達することで500系エラーが発生します。
要因としては次の3つが考えられます。
- ログファイルが肥大化
- 画像アップロード機能があり、想定の数以上に応募が来た
- EC2のディスク容量の設計ミスで、容量を5Gにしていた
ログファイルに関しては、アクセス量によって左右されるので、アクセス量を加味しながら、ログローテーションの期間を調整して対応してください。
画像アップロード機能がある場合、ユーザーから送信される画像を最適化(リサイズ)し適切なサイズで保持するように設計してください。場合によってはストレージサービス(S3)に保持する設計も検討しましょう。
ディスク容量に関しては、最初にWebシステムの要件を精査し設計に落とし組んでください。
長く運用していくサーバーの場合、CloudWatchを使った異常検知の仕組みを導入することも、最初の導入段階で検討していく必要があります。
2. 定期的なサービスのセキュリティアップデートによる対応
定期的なセキュリティアップデートによる対応が必要になります。具体的には下記のようなシチュエーションです。
TLS1.0, 1.1 の廃止により、アプリケーションの対応が必要になる
例えば、TLS1.2に対応するためには、curlのバージョンが7.34.0以上、OpenSSLのバージョンが1.0.1以上必要(実質PHP5.6以上が必要となる)
Amazon Auroraのアップデート
Amazon Auroraは定期的にアップデートされ、新機能の追加やパフォーマンスの向上、セキュリティの強化が行われます。これらのアップデートは通常、バックエンドで処理され、ユーザーが手動で変更を加える必要はありませんが、アプリケーション側で影響があるかの確認は必要になってきます。
Amazon Linuxのアップデート
サポート終了日 (EOL、End of Life) は、次のバージョンへの移行に十分な時間を提供するために、2023年6 月30日から2025年6月30日に2年間延長されました。
OSのアップデートにはアプリケーションの設定に大きく影響を及ぼす可能性があり、十分な期間をとって対応していく必要があります。更新内容や変更点に関するドキュメントやガイドを提供しており、それを参考にしながらアップデートをおこなうことが重要です。
WS Personal Health Dashboardの確認
AWSアカウントで管理している AWSリソースに影響する可能性のある今後の変更や予定された変更について知ることができます。こちらも定期的に目を通すようにしましょう。
参考:AWS Personal Health Dashboard
3. PHPのバージョンアップ対応
セキュリティアップデートにより定期的なAmazon Linuxのアップデートが必要になり、それに伴いPHPの対応バージョンにも影響を及ぼします。
例えばAmazon Linux 2023 ではPHP8.1からサポートするため、アプリケーションは8.1との互換性を確認する必要が出てきます。
AWSでWebサイト構築する時の注意点まとめ
AWSを使ってWebサイトを構築する際には、以下3つの注意点に留意する必要があります。
- セキュリティ対策
- コスト管理
- 運用フェーズの管理
従量課金制のメリットを最大限に活かすためにも、AWSリソースの使用料金が予算を超えないように、また想定外のコストが掛からないように注意する必要があります。
セキュリティ対策では、AWSのセキュリティ設定を適切に構築し、データやアプリケーションの安全性を確保しましょう。AWSのサービスの監視と管理をおこない、運用上の問題や障害を迅速に解決するための体制づくりもあわせてご注意ください。
これまでレンタルサーバーを利用していた場合は、ミドルウェアのバージョンやOSのサポートなどはサービス側でメンテナンスされ、推奨されるバージョンが上がるタイミングでWebサイト側を改修していました。
AWSではアマゾン側ではやってもらえないため、それらをすべて自分たちで認識し、対応をとっていく必要があります。社内にサーバー管理を請け負う体制がない場合は、外部パートナーに委託することも事前に検討しておかなければいけません。
これらのポイントに留意しながら、AWSでのWebサイト構築に取り組むことが重要です。
サーバー選定から相談可能
サービス資料をダウンロードいただけます
Web制作会社をお探しの方へ向けて、当社のサービス内容を簡単にダウンロードできる資料請求フォームをご用意いたしました。
▼資料内容(一部)
-ジーピーオンラインについて
-ジーピーオンライン3つの力
-サイト作りのポリシー
-品質管理
-サービス紹介・実績
WRITERツバサ システムエンジニア
組み込み系のエンジニアを経験したのち、2008年にジーピーオンラインに入社。当初はActionScriptを使ったFlashコンテンツとバックエンドの制作を担当していましたが、Flashの衰退とともにバックエンドをメインに担当するようになりました。最近はAIサービスを使った業務効率化に取り組んでいます。