■イベント Sansan Builders Box 2019 https://jp.corp-sansan.com/sbb2019/
■登壇概要 タイトル:Terraformを使ったステージング環境の再構築
登壇者: DSOC Infrastructure Group 藤田斉
▼Sansan Builders Box https://buildersbox.corp-sansan.com/
Terraformを使ったステージング環境の再構築
View Slide
#33tech
藤⽥ ⻫(Hitoshi Fujita)DSOC Infrastructure Group- お仕事DSOCの名刺データ化システム、名寄システムのインフラ運⽤、改善- 趣味バスケットボール, TVゲーム- Twitterhttps://twitter.com/noobs_waneal- GitHubhttps://github.com/waneal
Sansan Builders Boxゴール- Terraformを使ったAWS環境構築で直⾯した課題を知ってもらう- AWSコスト、運⽤コストを最適化する⽅法を知ってもらう
Sansan Builders BoxAgenda- 名寄システムについて- ステージング環境再構築- 構築で直⾯した課題- 今後やりたいこと
名寄システムについて
Sansan Builders Box名寄とは?名寄Sansan株式会社藤⽥⻫会社と⼈物を識別する
Sansan Builders Box会社の名寄とは?・会社:三三株式会社・部署:営業部・ドメイン:sansan.com・会社:Sansan株式会社・部署:営業部・ドメイン:sansan.com・会社:Sansan・部署:営業部・ドメイン:sansan.com・会社:Sansan株式会社・部署:スリー部・ドメイン:threethree.com社名変更・合併通称・略称同名他社Sansan株式会社
Sansan Builders Box会社の名寄とSansan/Eightの関係DSOC (Data Strategy & Operation Center)Sansan、Eight を⽀える存在名寄システムデータ化された名刺の会社情報名寄された会社
Sansan Builders BoxAWSアカウント構成- 1つのAWSアカウントに複数システムが共存- 歴史的経緯あり- 各環境の利⽤⽤途- 本番環境- ステージング環境- 結合テスト- 本番と同じ構成- インスタンスタイプ、台数は異なる- 開発環境- 各種AWSサービスの検証
Sansan Builders Boxインフラチームが抱える課題- コストが明確に分離できない- タグをもとにシステム毎に算出しているが完全とは⾔えない- ネットワークコストなど- 構成・権限の複雑化- IAMロール、Security Group, サブネットが複雑化
ある⽇、開発チームから相談が...
Sansan Builders Boxリリース前のリハーサルの質を上げたい- ステージング環境はテストデータを利⽤- テストデータでの結合検証のみ- 会社の名寄の結果までは確認できていない- リハーサルの質を上げたい- 本番相応の会社データを利⽤してこれを実現- 会社データのため個⼈情報は含まれていないSansan Builders Box - "%98- &*'.- -7$& !3 - +/- 642 -98,(- -)105#
本番環境・ステージング環境の課題を解決すべくインフラ再構築まずはステージング環境を再構築
Sansan Builders Box名寄せシステムのインフラを再構築- アカウントを分離- アカウント毎でコスト算出- 構成・権限をシンプルに- 開発効率向上- 各環境の役割変更- ステージング環境- リリース前リハーサル- 結合テスト- 開発環境- AWSサービス検証
Sansan Builders Box名寄せシステムのインフラを再構築今回の発表範囲- アカウントを分離- アカウント毎でコスト算出- 構成・権限をシンプルに- 開発効率向上- 各環境の役割変更- ステージング環境- リリース前リハーサル- 結合テスト- 開発環境- AWSサービス検証
ステージング環境再構築
Sansan Builders BoxAWS環境をコード化- ⽬的- 本番環境構築の作業コストを削減- 環境間の設定差異をなくす- Terraformを採⽤- Hashicorp製オープンソースのインフラ構築ツール- インフラの状態を保持、冪等性がある- 社内での利⽤実績多数
Sansan Builders BoxAWSコストの最適化- AWS Instance Scheduler- EC2, RDSの起動・停⽌をスケジューリング- AWS SolutionsとしてAmazonが提供- CloudFormationで構築- Redshift, Glueは必要なときだけ構築- Terraformで利⽤したいときだけ作成- dc2.large/RI/1年間の場合→1,645$- 起動時間が18⽇/⽉ならオンデマンドのほうがお得- コンテナ化- それぞれEC2で起動していた管理系サーバを1台に集約
Sansan Builders Box運⽤コストの最適化- Terraformのコードはアプリ・インフラ両⽅が書く- インフラチームの運⽤コスト削減- 全体の開発スピード向上- 現在はインフラチームの作業がボトルネックに- ステージング環境の起動はSlackから- Slackコマンド → 共有ボット⽤EC2 → EC2, RDS起動
構築で直⾯した課題
Sansan Builders Boxどうやって別アカウントのRDSを持ってくるか- RDS(Aurora)から週次でクローン作成- Auroraは2019/7/2よりアカウント間のクローンがサポート- CloudWatch Events + CodeBuild- クローンのほうがスナップショットからリストアするより安い- 本番のディスクを丸ごとステージングにコピー- ストレージコストが2倍リストア- コピーオンライト。本番との差分だけをステージングのディスクで持つ- 新規の書き込み分だけ費⽤がかかるクローン
Sansan Builders Boxどこまでコード化するか- 全部Terraformで書きたい欲を抑える- 無理やりコード化するとメンテナンス性が低下する場合も- コード化しないと決めたもの- アプリケーション側だけで完結する部分- Parameter Store、Lambdaのコード- CloudFormation- Instance Schedulerで利⽤- コード化できなかった部分はドキュメントとして残す
Sansan Builders Boxディレクトリ構成をどうするか- システム毎に適したものを採⽤すべき- リソースをimmutable, mutableで分離- メリット- tfstateが別れているのでplan, applyが早い- オンデマンドなリソース構築が楽- デメリット- 依存関係を整理する必要がある- 環境毎の設定差異はtfvarsで定義- prod.tfvars, stg,tfvars, dev.tfvars- workspace毎に作成- 環境ごとでリソース要素が変わらないのでこの⽅法を選定
Sansan Builders Boxディレクトリ構成をどうするか
Sansan Builders BoxSecretsをどうやって管理するか- データベースのパスワードやAPIキーなどをGitHubにアップしたくない- データソース: aws_ssm_parameterを利⽤ただし、tfstateファイルに平⽂で書き込まれるので注意tfstateファイルへのアクセス権限に気をつける
移⾏した後の開発チームの声
移⾏した後の開発チームの声実はまだ移⾏中…
Sansan Builders Box- Lambdaのデプロイを改善したい- TerraformはLambda関数だけ構築、コードは管理していない- Terraform適⽤のパイプライン- GitHubのPull RequestやMergeを起因にplan, applyを実⾏したい今後やりたいこと