BLOG ブログ

エンジニアブログ

2016.09.21

Mysqlバージョンアップの動作検証をAWS CloudFormationで効率化してみた

制作開発チーム入社3年目のソラです。

簡単に自己紹介

肩書き

・サイトのリスクを1個1個軽減をするお仕事(今はデータベースの問題解消に取り組んでいる)
・開発チームのスクラムマスター
・開発チームのマネジメント

最近の楽しいこと

・深夜対応のときは、ロードバイクで出勤(楽しい)
・AWSの勉強(デベロッパーアソシエイトの勉強中)

社内のAWS歴

・社内でのAWS使用歴は、5年ぐらい
・AWSのサービスがあまりないときに使用開始したため、古い作りが残っている

CloudFormationを使うにいたった背景

RDS for Mysql5.5を使っているとあるサーバのテーブルサイズがでかくなってきてパフォーマンスの低下が劣化が起きた。

パフォーマンスの劣化を抑えるためにAuroraでの構築を試みることになった。

現状のサービスがAurora対応できるかどうか検証する際に、今までは、EC2コンソールやRDSのコンソールから、ポチポチインスタンスを立てて設定などをしていた。(EC2*4台、 RDS*4台が必要だった)

この待ち時間や、他の環境に影響でないネットワーク設定をし、検証環境が立ち上がるまでに、出社してから2時間ほどかかっていた。(検証環境をずっと立てておくとムダな費用がかかるので、落として帰るということをしていた)

その2時間がムダだと思ったのと、ちょうどCloudFormationの勉強をしていたので、CloudFormationを使ってみようとチームメンバーに提案し、使う期限を設けてうまく活用できるか試してみることにした。

1日1時間半ほど使って、jsonを書く時間をとって、3日間でCloudFormationの環境構築ができるようになった。

CloudFormationを使った結果

待ち時間含めて毎日2時間かかっていた作業が、検証開始する2時間前に立ち上げておくことで、検証環境の立ち上げと落とす作業にかかる時間が一切なくなった。

どんな流れで作成していったか

①構築したい環境のテンプレートを公式のドキュメントから探す。(EC2とRDSとAuroraが必要だったので探して、テンプレートをそのままコピペ) ※構文という部分をコピペ
aws-rds-dbinstance-aws-cloudformation
②必須項目のみ残す
aws-rds-dbinstance-aws-cloudformation2
③必須項目の値を入れる
④今ある本番環境に干渉しない設定にしたかったのでネットワークのテンプレートを公式のドキュメントから探す。(VPC、subnet、InternetGatewayの設定で、テンプレート)
⑤ネットワークのテンプレートの必須項目を残す
⑥セキュリティグループの設定
⑦必須ではないが、検証に必要な設定を追記

http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html
上記が公式ドキュメント。ここ見ながらやればスムーズに作れた。

今後AWSでやってみたいこと

DMSを使ったデータ移行
データ分析に適した環境の構築(RedShiftを使ったり、あちこちにあるlogをS3に集約して分析しやすくとかとか・・・まだ勉強不足で思っていることだけ書く。もっといい方法はあるかもしれないので、やり方はこれ以外でもいい)

今後は今まで以上に貯めているデータを活用して、新しいサービスや機能を開発していくことになるので、データ収集にかかる時間をなくしていきたい

まとめ

RDSやEC2のテンプレートが一つ完成するとあとは、コピペして「AMIのID」や「SnapshotのID」を入れ替えるだけで簡単に増やせるのでとても便利。
検証環境を立てて検証をしたいときに、ポチポチやってしまっているならCloudFormationの活用の検討を!

サンプルコード(EC2 + RDS aurora)

  • Happi+ 「ハピタス」とは?