UZABASE Tech Blog

株式会社ユーザベースの技術チームブログです。 主に週次の持ち回りLTやセミナー・イベント情報について書きます。

NewsPicks を支えるインフラのこれから― Autoscaling を導入してみよう―

NewsPicksインフラ・運用を担当しているカツです。

NewsPicksのインフラについて、今まで他の人も紹介していましたが(『AWS CloudWatch Logs を NewsPicks で試してみた話』)、 今回は、現在のNewsPicksのインフラを紹介するのではなく、今後、NewsPicksのインフラに関してやろうと思っていることをいくつか紹介しようと思います。

Autoscaling の導入

NewsPicksはインフラを AWS 上で運用していますが、現在はまだ完全にクラウドの強みを発揮できていません。一定数のインスタンスを運用して、時間帯によって起動するインスタンスを手動で決定しているためです。これではスマートではありません。 今後はリソース負荷状況によって自動的にインスタンスを立ち上げられるように、Autoscalingを導入しようと考えています。

Autoscalingの導入はすごく簡単です。launch-configurationとauto-scaling-groupを設定すれば終わりです。コンソール画面から設定してもいいですし、コマンドでもすぐできます。

launch-configurationの作成:

aws autoscaling create-launch-configuration 
--launch-configuration-name "newspicks_production_lc"
--image-id "awi-xxxxxxx"
--security-groups "ApplicationServers"
--instance-type "c3.xlarge"
--instance-monitoring true
--no-associate-public-ip-address

auto-scaling-groupの作成:

aws autoscaling create-auto-scaling-group
--auto-scaling-group-name "newspicks_production_sg"
--launch-configuration-name "newspicks_production_lc"
--min-size 5
--max-size 30
--desired-capacity 5
--default-cooldown 600
--availability-zones "ap-northeast-1a"
--load-balancer-names "production"
--health-check-type "ELB"
--health-check-grace-period "120"
--vpc-zone-identifier “subnet-xxxxxx”

次はScaling Plansを設定します。今NewsPicksで考えているPlansは下記の通りです。 Dynamic Scaling:CloudWatch Alarms(cpu、メモリ、アクセス数など) Scheduled Scaling :毎日の 07:30、18:30 に実行する(例) コマンド:

aws autoscaling put-scheduled-update-group-action --scheduled-action-name scaleup-schedule-year --auto-scaling-group-name newspicks_production_sg --recurrence "30 7,18 0 0 0" --desired-capacity 10

ただ、Autoscalingは導入が簡単ですが、今までのデプロイ方式と監視の仕組みを変えなければなりません。

デプロイについて

AMIが指定されているため、デプロイ都度でAMIを作り直すのは現実的ではない

解決案

  • Warファイルなどを踏み台サーバかS3に置く
  • Autoscalingが発生時、userdataを利用し、ファイルを持ってくる
  • CodeDeployの採用

監視について

Autoscallingが発生時、起動されたインスタンスが監視対象に入れるのは間に合わない ※Newspicksはcloudwatchで監視しているため(zabbixは一部監視のみ)

解決案

  • HyClops for Zabbixプラグインを導入
  • zabbixを廃止し、完全にCloudWatchに移行

また、これからさらにNewsPicksのインフラ基盤の自動化を進めるため、ansibleの構築コード化の採用、chatopsによって、リリース作業の簡潔化などなど常に進めています。

NewsPicksではエンジニアを募集しています! 各種AWSサービスを利用しながら、安定したサービス提供のための開発・運用を日々おこなっています。 興味のある方はぜひご応募待っています!

100年に一度のメディア変革期!世界一のニュースプラットフォームを創ろう - 株式会社ユーザベースの求人 - Wantedly