AWS Casual Talks #3 @ Cookpad
id:myfinder
- id:myfinder
- まいんだー
- エム・ティー・バーン株式会社
- サーバサイド / Android
- 2012年初頭に VPC/EC2/ELB を使い始めた程度の初心者
- http://aws.amazon.com/jp/solutions/case-studies/freakout/
- AWS Summit 2013に登壇して自作サーバの話をする程度の初心者
- 12/12(金)開催
- 参加登録 -> いまから
- トーク/LTネタがある方はお気軽に^^
- "どオンプレ環境"で作ったサービスを最近 AWS に移設しました
- 移設するにあたって、運用環境を大きく変えました
- AWS x Mackerel でとても捗っています
オンプレ+S3/CloudFront(とか他のCDN)
- Single Segment
- データセンター提供のマネージドDNS
- 箱物ロードバランサ / 大手メーカー製サーバ / 一部自作機
- CentOS 6.x / cobbler / puppet / RackTables
- Hadoop 担当が構築 / 運用
- MySQL/Redis 担当が構築 / 運用
- Nagios / CloudForecast / GrowthForecast
- 足元のディスクに吐いたログをでっかいサーバに収集して集計
- 足元にログ吐くな
- Single Segment -> Multi-AZ
- マネージドDNS -> Route53
- 箱物LB -> Elastic LoadBalancing
- 物理サーバ -> EC2
- CentOS -> Ubuntu
- cobbler -> cloud-init
- puppet -> ansible
- MapReduce/Hive -> BigQuery
- MySQL -> RDS(MySQL)
- Redis -> ElastiCache(Redis)
- 一部 Docker でコンテナデプロイ
- Nagios+CloudForecast -> Mackerel
- 足元のストレージに吐いたログをscpとかで収集して集計していた
- fluentd でログを各所に投げる形に
- fluentd 自体のログも他に投げる
過去の例はオンプレ事情の考慮が必要だった
http://aws.amazon.com/jp/solutions/case-studies/freakout/
- 4セグメント
- 後ろのセグメントはマネージドサービス用
- RDSとかElastiCacheとか用
- 履歴機能とかはあったけど余りプログラマティックではなかった
- ヤバい点は NS レコードを変更できない(!)こと
- Roadworker を使えば git で管理できるので急いで引越
- ハードウェアロードバランサにはとても救われた
- 一方でハードウェアロードバランサおじさん業が必要になる
- 最初からキャパシティを見切れない環境では新規に買うのもためらわれる
- SSL を箱で処理してたけど ELB も SSL 受け持ってくれるので特に問題なし
- NAT インスタンス不使用
- すべての EC2 インスタンスに Public IP を付与
- アクセスコントロールは Security Group で設定
- 個別のインスタンスに名前は付けない
- したがって内部 DNS 廃止 / IP 付与も DHCP 任せ
- 事例の時は独自の AMI を作っていた
- update への追随がダルくなるのでやめたかった
- AWS でまともな CentOS を使おうと思うと Rightscale の AMI を魔改造する羽目になる
- 標準提供で一般的なディストロの方がメンバーの理解が早い
- 使ってた Travis CI も Ubuntu だし
- 独自の yum リポジトリとか作っていたけどそういうのを捨てた
- 思い切って捨ててみたら実はそれほど必要なかった
- 素直にシェルスクリプトで書いておけば良い
- ハードウェアの種類が多いと cobbler の snippet がカオス化したりする
- ex. ethx で良かったはずの記述が DELL のサーバ買った瞬間 enx の対応を迫られる
- ex. Hadoop のために 2U のサーバみたいなのを買うとどでかいパーティションをほげほげする対応に迫られる
- そもそも後述の BigQuery に移行したからこれは関係なくなった :p
- chef-soloも検討したけど複雑なことをやる必要がなくなった
- yaml だけでいい Ansible の方がメンバーの学習が早いので採用
- 徹底して各 role が受け持つ範囲を小さくしたので分岐が要らない
- 複雑になり(そう|なる)のは、問題の切り分けができていない可能性大
$ ansible -i mackerel.py all -m ping -u foobar
- ついに実用段階に入った BigQuery
- fluent-plugin-bigquery 0.2.4 で timestamp 型サポートが入った
- Redshift と比較検討したけど BigQuery のほうが要件に合ってた
- 続きはLTで
- 事例の頃はオペレーションが変わるのを避けたかった
- オンプレ脳で作ったネットワーク&オンプレとの連携を考えなくてよくなったので活用
- MySQL Casualもよろしくね!!
- 冗長化や自動バックアップ対応なので独自構築をやめた
- auto failover サポートが発表されてさらに安心
- ついに実用段階に入った Docker
- 手始めに fluentd / Norikra をコンテナデプロイしてます
- 本番で使ってる base image は Docker Hub に up してあります
- Deploy は cap で docker pull -> docker stop -> docker run するだけ
$ cap deploy:container:td-agent
$ cap deploy:container:norikra
- graceful restart が必要なものの利用にはまだ課題がある
- 後述の private registry は build 忘れや push 忘れが発生しがちなので Docker Hub の有料プランに build とレジストリを押し付けたい
- --link とか良い機能だけど人類には早い
- SA さんの blog に書いてあった手法
- http://aws.typepad.com/sajp/2014/06/eb-docker-private-repo.html
- サーバリストの管理/連携で消耗していた
- role ベースでの管理に移行してサーバに命名することをやめた
- 個別のサーバにログインするオペレーションは基本しない
- サーバ情報管理の中心を Mackerel にした
携帯がアラートメールでうめつくされるみたいなのもなくなった
- 実際運用しているやつから抜粋
- "どオンプレ環境"で作ったサービスをAWSへ移設できました
- 移設するにあたって、運用環境を
やりたい放題に大きく変えました - AWS x Mackerel でとても捗っています
- MTBurnはサーバサイド/スマートフォンのエンジニアを募集してます
- MySQL Casual もよろしくお願いします