massの日記

日々の薪

AWSを利用してサービスの拡張環境を構築してみた

AWSを真面目に使ってみた

今月からAWSを本格的に業務で使い初めた。
環境構築の方針や導入した技術の振り返りもかねて、まとめてみた。

自分の立ち位置

昨年からアドネットワークサービスの開発業務に携わっているひよっこDevOpsエンジニア。
昨年の主な業務はデプロイシステム改善、今年の初夏からの主な業務は配信システムのインフラ部分やサーバ構成の改善。
インフラ部分は以前から興味があったので、ジェダイの騎士達(弊社インフラチームを心の中で勝手にこう呼んでいる)に教えをこいつつ日々勉強。

AWSを利用することになった背景

広告配信システムのうち、配信サーバの増設コストが課題となっていたため、より柔軟にスケールアップ・スケールダウン/スケールアウト・スケールインができる環境としてAWSを利用することにした。

利用したサービス・ツール

CI

監視

設計の方針

AWS環境の構築するにあたって、ご近所さんに相談したり、勉強会に参加して、環境構築の方針をざっくり決めた。
まず、環境構築を自動化する。
自動化として、Bootstrapping、Configuration、Orchestration、の三段階にわける。
Bootstrapingは環境構築の自動化、Configurationはサーバ構築の自動化、Orchestrationはアプリケーションのリリース作業の自動化、とそれぞれ自動化する部分での役割を分担させることにした。

Bootstrapingは何を行うか?

BootstrapingではCloudFormationとAWS CLIを利用し、JSONファイルを定義ファイルとし再現性のある環境構築を行う。
配置場所(VPC)、配置物(ELB、EC2)、出入口(SecurityGroup)、を作成する役割を持つ。

Configurationは何を行うか?

ConfigurationではPuppetを利用し、サーバのあるべき状態をManifestで定義し、定義を元に構成管理を行う。
パッケージのインストール、ディレクトリの構成、サービスの起動状態などを管理する役割を持つ。

Orchestrationは何を行うか?

OrchestrationではJenkinsを利用し、継続的なビルド&テスト、各環境へのデプロイ作業を行う。
アプリケーションのリリースを管理する役割を持つ。

結果

どこまで自動化できたか?

手動での設定が3ファイル残ってしまったが、それ以外はほぼ自動で環境構築を行えるようになった。

どの程度の柔軟性を得たか?

数十台のサーバを半日以内で、スケールアウト・スケールイン/スケールアップ・スケールダウンできる柔軟性を得た。

振り返り

一番悩んだのが、環境構築の自動化部分での役割分担。
三段階にわけるというのが果たしてよいのか、単一化した方がよいのかも、とか、色々悩んだ。
手探り状態で行ったので、運用していくと色々と問題点がみつかるかもしれないが、そこは適時対応する。

DevOpsのエンジニア業を意識した初めての業務で、中々やりがいのあるお仕事だった。
周囲の先輩エンジニアやチームメンバーに支えられつつ、今月リリースとあいなった。良かった。