ANNAI magazine
KAIZEN TOP Image
この記事の目次

Drupalをベースにしたサイトではコンテンツの更新・公開という観点でのサイトの保守は圧倒的に工数が削減できます。また各種のキャッシュのクリアや検索用インデックスの更新などのいわゆるハウスキーピング作業も標準の機能で定期的に実行されます。

さらに様々なモジュールを組み合わせれば、コンテンツの公開・非公開のスケジュールや定期的なデータベースバックアップなども自動化できます。 このように、全てを手作りで構築したサイトに比べればはるかにサイトの運用管理の負荷が軽減されるDrupalですが、PHPアプリケーションがデータベースに格納されたデータをアクセスしWebページを動的に生成するというシステム構成を持つ以上、避けられない多種多様な運用管理のための作業が発生します。

以下ではそれらの運用管理の作業内容を掘り下げて、どのような分野のスキルや知識が必要になるかをご理解いただきたいと思います。

より高度なcron処理の実行

Drupalサイト上で様々な処理を自動化するための要となるものがcronです。一般にcronと言えば、特定の間隔でコマンドを実行するシステム上の仕組みのことですが、Drupalにおけるcronとは、サイトを常に適切な状態に保つために定期実行される保守処理を指します。

Drupalの 環境設定メニュー >> システム >> cronを選択するとcronの設定画面が表示され、ここでDrupalのcron処理が実行される時間間隔を設定できます。Drupalはリクエストを処理する度に前回のcron実行からの時間をチェックし、ここに設定した時間が経過していれば次の保守処理が実行される仕組みになっています。

こうしたDrupal標準の仕組みは簡単に使えて便利ですが、リクエストと同時にcronが実行されるという欠点があります。リクエストに応答するための処理とcronの保守処理とが同じタイミングで実行されるので、両者がCPUやメモリを取り合う形となり、応答が遅くなったり、複雑なサイトではメモリ不足になる可能性もあります。
これらの問題を回避するにはDrupal標準のcronの設定画面にあるような時間間隔の指定ではなく、毎日深夜1時などの時刻指定によるスケジュール実行が有効です。

OSのcrontabコマンドを利用すれば任意の時刻や時間間隔で保守作業を実行できますが、設定にはcrontabコマンドの実行権限が必要となり、担当者としてLinux等のシステム管理経験者が要求されます。また、cronで起動された処理が正常に完了したかどうかを監視する仕組みや体制の検討も重要です。

Drupalのアップデート

大きくDrupalのコアシステムとコア以外の追加モジュールのアップデートに分けられます。さらにその規模はメジャーアップデートからマイナーアップデートまで様々であり、正確な必要工数の見積には豊富な経験が必要です。また各アップデートの対象サイトへの必要性・緊急性を判断し、実施時期や前提条件を決定しなければなりません。

アップデートの有無については上記のcron処理の中でチェックされ環境設定の画面などに告知されますが、アップデート処理はサイト管理者が手動で実行しなければなりません。またアップデートに伴ってsettings.phpや.htaccessファイルなどが修正・上書きされる場合もあるため、それらのファイルがカスタマイズされている場合にはその内容をアップデート後手動で反映させる作業が発生します。これらの設定ファイルのみならず、既存モジュールのソースのパッチやカスタムモジュールを作成している場合などはそれらのファイルのバージョン管理が必須になります。

モジュール間には依存関係があるためアップデート対象のモジュールを使用している他のモジュールについても動作確認が必要です。コアシステムのメジャーアップデートの場合は追加でインストールした全てのモジュールについてメジャーアップデートへの対応の有無と動作確認が必要となります。機能拡張のため多数のモジュールを使用しているサイトの場合この作業は多大な工数を要します。データベーススキーマの変更を伴うアップデートの場合は事前のバックアップ取得とアップデートを中止した場合のデータベース復元作業工数も追加されます。

Drupal実行環境の保守

Drupalの実行環境を構成する以下のソフトウェアについてもアップデートや保守作業が必要です。

  • データベース
    • DBMSのアップデート
    • データベースのバックアップや再編成あるいはスペースの拡大・縮小
    • パフォーマンスあるいはセキュリティ向上などに必要な設定ファイルの修正
  • PHP
    • PHP本体のアップデート
    • 拡張モジュールのアップデート
    • パフォーマンスあるいはセキュリティ向上などに必要な設定ファイルの修正
  • Webサーバー
    • Webサーバー本体のアップデート
    • Apacheモジュールなどのアップデート
    • パフォーマンスあるいはセキュリティ向上などに必要な設定ファイルの修正
  • OS
    • OS本体のアップデート
    • ネットワーク構成の変更
    • パフォーマンスあるいはセキュリティ向上などのためのサービスの設定変更(プライオリティーやリソース割当の変更を含む)や不要なサービスの停止
    • ホストやネットワークのモニタリングとチューニング

アップデートの公開情報や関連ニュース・ブログなどで情報収集した後で、さらにこれらの各要素の依存関係も考慮したアップデートと動作確認の手順書の作成、さらにそれらのレビューと事前テストが通常は必要です。加えてアップデートに失敗した場合の復旧手順・工数も検討しておかなければなりません。

脆弱性への対応

種々のアップデートの中でも最優先すべきは脆弱性への対応を含むアップデートです。脆弱性への対応が遅れた場合、最悪は情報流出やサイトの改ざんが発生してしまうので脆弱性情報は頻繁にもれなくチェックできる仕組みが必要です。

脆弱性が発生するソフトウェアの範囲はOS、データベース、PHPさらにDrupal本体やモジュールなど上記のDrupalとその実行環境全てが含まれます。またその内容はインテルCPUアーキテクチャに起因するSpectreやMeltdownのようにバグの本質が非常に難解でかつ影響範囲の極めて大きいものもありますし、Drupalに限定してもDrupalgeddon2のような深刻な脆弱性から特定のモジュールの例外的挙動に関するものまで極めて多岐にわたります。それ故に脆弱性情報の情報源やそのチェック方法・タイミングも多種多様になり重要情報を見落とさないためには細心の注意が必要です。

これら多岐にわたる脆弱性への対応と動作確認に必要なスキルを持ったエンジニアがいなければ長期にわたってサイトが危険にさらされたり、攻撃を回避するためにサイトを一時的にクローズしなければならないという緊急事態も起こりえます。例えば上記のDrupalgeddon2の場合は2018年3月28日に公表されてから半月程度で攻撃が確認されており、同年6月時点でも115000箇所以上のサイトが危険にさらされているとの報告がありました。これほどの深刻な脆弱性に対しても想像以上の数のサイトが迅速に対応できなかった事実はDrupalサイトの運用管理には高度な知識や専門性が必要なことを示唆しています。

サイト情報の更新

環境のアップデートとは少し異なるものですがサイト公開に必要な情報の更新も忘れてはなりません。

  • SSL/TLSサーバー証明書の更新
    • Let’s Encryptを導入したりAWS Certificate Manager (ACM) が利用できれば自動更新も可能ですが、失敗することもあるので定期的な証明書の期限チェックは不可欠です。
  • ドメイン名の更新
    • レジストラーからの更新期限の通知はありますが、見落とすこともあり得ますのでカレンダーやリマインダーなどで二重三重の期限確認が必要です。

サイト構成の変更による運用負荷の低減

ANNAIマガジンの記事「Decoupled Drupalとは何か?なぜ重要なのか?」で解説されているようにDrupalをバックエンドのみで実行させ、フロントエンドではHTML/CSS/JavaScriptなどの静的ファイルのみを公開するサイト構成が可能です。

Decoupledにすれば公開サーバーで稼働するのはWebサーバーのみとなり、AkamaiやFastlyなどのCDNサービスを利用することもできます。CDNを利用すればWebサーバーの保守や証明書の更新はサービスベンダーに任せられますし、相応の料金でロードバランシングや冗長化が実現できるのでWebサーバーに関するサイト管理者の負荷は軽減できます。

しかしながらDecoupledシステムのバックエンドのDrupalに関連した運用管理は依然として存在します。フロントエンドをDrupalが不要な完全な静的サイトとして公開できれば、バックエンドのDrupalを比較的安全なローカル環境で稼働できるので、重大な脆弱性が発見されても対応の緊急度を下げることが可能です。反面、完全な静的サイトの開発には検索機能や問い合わせフォームなどの実装に高度な技術が必要となります。

Drupalシステム保守管理サービスのご紹介

今まで述べてきた運用管理の必要性をサイト管理者が理解していても実際は「アップデート方法がわからない」「業者に開発を依頼したが保守契約を結んでいない」「アップデートをすると不具合が出るのが不安なのででそのまま放置している」「アップデートができる技術者がアサインできない」などの様々な理由で、十分な運用管理ができていないDrupalサイトが少なくないのが実情です。

ANNAIはKAIZENサービス として多彩なサービスを提供しています。その中で提供されている保守管理サービスはDrupalサイトの運用・保守管理のための様々な作業に必要な多大なコストやリソースを削減するためにお客様と共に考え、最適なプランを提供するものです。

この記事をご覧になって運用管理の重要性を再認識された場合はご遠慮なく弊社にご相談下さい。もちろんサイト構成のDecouple化などの高度な案件もDrupalシステム開発のKAIZENサービスとしてご提供できます。