アニメイトラボ開発者ブログ

株式会社アニメイトラボの開発者ブログです


アニメイトラボ開発者ブログ

developer.animatelab.com


アニメイトタイムズのサーバー移管をしました

エンジニアのsugicyanです。
好きなAWSのサービスはCodeシリーズです。
アニメイトタイムズのサーバーをAWS環境に移管したので、挨拶をAWSっぽくしてみました。

www.animatetimes.com

サーバー移管自体は6/11(日)に実施したのですが、そこから安定稼働させるまでに1ヶ月くらいかかり、終わった後は燃え尽きたのかなかなか筆が進まずブログを書くのが遅くなってしまいました。

サーバー移管の際に個人的に意識したこと

旧環境ではインフラ面がブラックボックスで悩む事が多かったため、インフラ面の見える化を意識しました。
先に言ってしまうと技術面では、 Docker CloudFormation の採用によって多くの部分が可視化されました。
移管までの作業では気づきませんでしたが、終わったあと振り返ってみると技術検討時では考えていなかった部分でも良くなっている部分があり、やってよかったのと思いました。

新旧環境の違い

クラウド IDCF AWS
サーバー構成 シングル マルチ
OS CentOS 5 Debian 8 (jessie)
言語 php5.3 php5.6
メール postfix SendGrid
ファイルアップロード FTP 専用CMSの作成
画像配信 apache s3 + CloudFront

新環境で採用した主なAWSのサービス

  • ECS
  • CloudFormation
  • CodePipeline
  • CodeBuild
  • S3
  • CloudFront
  • ElastiCache(redis)
  • RDS(MySQL
  • ALB

移管理由

システム的な問題は、 CentOS 5 EOL php5.3 のサポート切れ です。
ですが、それ以上に シングルサーバー構成の限界 を感じていました。
障害が起きてもapacheの再起動などやれることがほとんどありません。
また、メンテナンスをしたくても全サービスを停止しなければならなくエンジニアだけでなく、ライターや編集者にも負担が大きかったです。

旧環境

f:id:sugicyan:20170810150254p:plain

1つの環境に以下5つのサーバーがそれぞれ prod dev 環境の2つを持っていて、計10サーバー動いていました。

  • pc
  • sp
  • mobile
  • licence
  • admin
  • admin(外部ライター用)

さらに

  • MySQL
  • 画像配信サーバー

も動いているような状態です。

新環境

f:id:sugicyan:20170810161448p:plain

今まで共存していたそれぞれのアプリケーションがスケールしやすい構成にしました。
管理画面も別サーバーに切り出したことでメンテナンス中も記事の作成/更新ができるようになっています。

移管中だからできること

システムの移管のための環境を構築しリリースするまでの間システムは止まってしまっても問題がないので、今まで手を付けられない下記項目を実施することができました。

  • 使われていないと思われていたデットコードを大幅に削除
  • 既存の放置されていたバグの改善

移管後に感じたこと

移管前はインフラ周りの設定などのドキュメントなどがなくブラックボックスでしたが、Docker・ CloudFormationの採用によりインフラ面が可視化された状態になりました。

  • Docker採用により dockerfile でインストールされているライブラリが明確になった
  • CloudFormationでインフラの可視化がされた
  • devやstgといった環境の複製が容易になった

ローカルで動作検証したいという理由でDockerを採用しました。
移管を終えてみると、ローカルで確認できるのも便利なのですが、それ以上にインストールされているライブラリが明確化されたのが大きいなと感じました。

逆にCloudFormationのテンプレートによるインフラの管理は良い点もあれば悪い点もあるなと感じるところもあります。
たとえば、セキュリティグループに許可するIPアドレスを1つ追加するにも5~10分程度掛かってしまいます。
ですが、そのデメリットを差し引いても、インフラのコード化をするということにはメリットが多いと感じ導入しています。
運用してみて感じることは、

  • 全てをCloudFormationで管理するよりは管理する範囲を適宜見直していくことが大切
  • 機能によっては DeletionPolicy: Retain の属性を付けて、CloudFormationで最初に構築して以降はCloudFormationの管理から外してあげることも必要
    • RedisやECSの管理周りは検証したりしていますが、まだベストな方法を見つけられていません

以上がレガシーな環境をAWS化する簡単な道のりでした。
アニメイトラボではこれからもアニメイトタイムズの改善を行い、よりよいメディアサイトを構築していくので、ご注目下さい。