## 概要
新卒配属でAmebaの基幹システム部に配属。
いくつかの基盤システムの運用・保守・エンハンス開発を担当。
- 外部向けAmebaAPIシステム
- ↑のAmebaAPIを利用するためのOAuthシステム
- 複数のブラウザサービスでCookie値を同期させるシステム
- ユーザのテキスト投稿を監視するシステム
- アメンバー管理システム
- ↑をはじめとしたつながり情報管理システム(AmebaPlatform)
## 規模
サーバ台数:各システム本番環境で10台〜20台前後
スループット:AmebaAPIは1億APIリクエスト/日 など
## 運用内容
割と安定運用の状態であったため、下記にも記載している自動テストの導入や監視システムリプレースを自発的に行っていた。
### API追加開発
- 主にAmebaアプリが新規で欲しい機能について依頼が来るので追加開発
- 1APIにつき本番リリースまでおおよそ5営業日
### エラー・障害対応
- 5xxエラーの対応・予防
- ただの中継APIのため、担当サーバ自体が障害を起こすことは少なかった
### 自動テスト(JUnit)導入
- ユニットテストすらないプロダクトだったため、UtilityクラスからJUnitでテスト化を開始
- 依存先APIやOAuth認証情報を呼ぶメソッドの実装をSpringFrameworkのMethod Injectionで上書きできる術を発見し、各レイヤの依存度の減らしつつ結合テストの記述を推進
- 依存先APIのひとつがHTTPではなく(今は亡き)kumofsの分散技術を流用したものがあり、ベータ導入のCircleCIエンタープライズに乗り換えるときにAWS → 社内オンプレPrivate Subnetへと通信が走るため非常に苦心した
### デイリー集計スクリプトの簡素化
- APIを追加開発するたびに変更が必要であったBashスクリプトの運用をRubyで極小化した。
- むしろ元のBashスクリプトよく誰も文句言わずに運用していたなぁと
- Rubyのメタプログラミングで脳汁垂らしまくっててハイになってた
- 今思えば、負荷状況確認のためにインフラが導入したfluentdを間借りすればよかった
### 監視サーバリプレース(mon, nagios -> Sensu, InfluxDB, Grafana)
- 当時微妙に話題になった&自身の勉強のためにSensuの環境構築・導入を実施
- Sensuは死活監視かつInfluxDB & Grafanaへのメトリック送信に利用
- InfluxDB & Grafanaはリソース監視としてグラフを作成
### Chefによる自動プロビジョニング化
- サーバの構築を社内ドキュメントにある秘伝のスクリプトからChefに変更
- 新卒研修時代にChefを知り、「これがサーバ構築の未来だ」って言っていた覚えがある
- データセンター移設も相まって、かなり乗り気にChef化を推進
- ステージング・本番環境共にChef乗り換え完了
- とは言いつつも、recipeをhost名で分けるというバッドノウハウを踏み、転職後気づく
### 新規システムへのマイグレーション
監視システムが並列可動している状態で、退職を決めた直後に新監視システムへの統合を決意。
旧システムを利用している各所に協力してもらい、向き先変更の開発に協力。結果、退職直前に無事旧システムのクローズが完了。
## 課題・障害等
- 慢性的に発生していた5xxエラー数を可能な限り減らすため、エラーの内容・依存先APIサーバの侵入&ログ確認・問題共有&箇所指摘等を担当チームと連携を取りつつ(?)対応
- そもそも引き継ぎされた時点で安全なデプロイができないシステムだったため、インフラチームに知見を求めつつデプロイ時にエラーが発生しないような仕組みに変更
## 脱退時状況
- 担当開始後、1年後に後輩の新卒が参画したため、API追加開発タスクは後輩に託し、サポートに従事。
- モジュール依存度の最小化を果たせぬまま退職したので若干心残り
## その他所感等
- RESTをわかっていないおじさんが `POST /getDetrails` というHTTP APIを実装してきたので文句を言ったのはいい思い出