2021年7月のふりかえりです。 引き続き B 社(週5日)にて Rails 製の EC サイトの開発業務と Engineering Manager / Scrum Master 業務に携わっています。

7 月はマネジメント 8 割、プレイヤー 2 割といった割合で対応していました。

マネジメント系

  • お問い合わせ数を Datadog でメトリクスとして蓄積して追跡できるようにしました。
    • Slack でお問い合わせ投稿 => Github Issues Open => Datadog Metrics という流れです。
    • EventBridge で定期的に Lambda をキックして Datadog API 経由で Metrics 化したお問い合わせ数を送信する、みたいなかんじです。
      • Datadog の Github Integration だと Datadog Events に変換されるだけという挙動で、Datadog Events => Metrics な仕組みが現状 Datadog に実装されていないので自前で実装しました。
      • Datadog のセールスの方には改善してほしいと伝えてあります。
  • セキュリティマネジメント
    • CISOハンドブック を参考にしながら概念を一旦理解して。
      • いきなり全社巻き込みの話をすると開発の作業が全然できなくなるボリュームだなぁということを理解しまして。
    • ちょっと手入れするだけで効果あるよねというセキュリティ上の課題感がいくつもあり、そのあたりをさっさとやっていきたいというモチベーションがあったので、一旦デファクトスタンダードな形に落とし込もうということで CIS Controls や NIST CSF などを読み込むなどしました。
    • 直近の動きとしては、NIST CSF ベースで組み立てつつ、資料にまとめていきつつ、AWS Config の Conformance Packs を使って省力しつつみたいなところに落とし込みをし始めています。
  • 中長期
    • 四半期恒例の中長期計画の策定と共有をおこないました。
    • 今回は前 Q から引き続きで進めることにしていたので計画の差分はなかったです。
    • 今回からアロケーション計画を作るようにしました。
      • 中長期計画作るようになってから 9 ヶ月程度経過したことで、様々な開発チームのメトリクスを取れるようになっています。
      • それらの数値ベースで計画を立てれるようになってきたので、先2年分のリソースアロケーション計画を作ってみました。
      • 今回は全体ボリュームだけですね。人員コスト、委託コスト、インフラ関連コストといった部分。
      • ボードメンバーとの認識合わせとチームメンバーへの未来のイメージ共有に使いました。徐々に馴染んでいくかなと思っています。
  • 人事・採用
    • リファラルプールをめちゃ増やしてリファラルの声がけをはじめました。
      • 結果、1名、業務委託でお手伝いしていただけるようになりました〜!
    • Web デザイナーがジョインして早速活躍してくれています〜!
      • B 社は今月から初めてインハウスの Web デザイナーがいる状況で開発しています。
      • これにより Web デザインという仕事の範囲が初めて可視化されているという状況を経験しており、たとえば、従来であればシステムのデザイン的にちょっとおかしかったり使いづらかったりというのがありつつも、「まぁ優先度低いよね〜」と心の中にしまい込んでいたような話がちゃんとタスクとして明らかになっていく話だったり、「そもそもメニューの構造はこうあるべきなのでは?」みたいな情報の構造自体への言及をする場が発生していたり…
      • といった感じで、仕事に名前が与えられることによって可視化されて改善されていくというストーリーがめちゃくちゃいい流れだなぁと思っています。
    • 8月にもエンジニアが1名ジョインすることが決まっているので、採用はめちゃ順調です。
  • DevOps 指標の可視化
    • 以前から Pulse を使って DevOps 主要 4 指標のうち、2 指標を可視化できていました。
    • 残りの 2 指標は Issue Open/Close を同期する必要があって、なにを Issue にするかという点とどうやろうかな〜という点でう〜んと悩んで一旦寝かせようみたいな感じで優先度落としていました。
    • 今回は、Datadog Monitors の Alert 期間を Issue とすることに一旦決めまして、同期する仕組みを作り込んでいきました。
    • 具体的には Datadog => PagerDuty => Pulse としました。Pulse に PagerDuty Integration があるのと、Datadog にも PagerDuty Integration があるので Integration 設定を行うだけで終わりな感じに出来ました。

プレイヤー系

  • RDS => Aurora 移行が無事おわりました〜!!!
    • 手順は AWSのこちらのページ のとおりです。
      • 万全を期して 5 時間位のメンテナンスあり、でやりました。
    • 旧 DB と新 DB 両方に Write が走るという致命的な問題がでましたが、みんなでなんとか乗り越えました。
      • 事前に用意していた手順と違うことをやるとダメですよねという当たり前の話を踏み抜いちゃいました。
      • 事前準備で9割9分はやること終わるので、これからやる方は入念に準備しさえすれば単純に置き換えるだけで何事もなくいけるとおもいます。
    • 他 Aurora 化に際して変更したポイントとして…
      • Datadog で参照する・参照できるメトリクスが変わるので色々調整いれました。Aurora 側から出せるメトリクスは全部出すようにして連携しました。
      • DB を暗号化するようにしました。
      • 監査ログを取るようにしました。最初全部 ON みたいにしていたら CloudWatch Logs の金額がエグい感じになったので一旦最小限にしています。
        • CloudWatch Logs じゃなくて S3 に出力する方法あるのかな?まだちゃんと調べてないです…
  • ElastiCache のセキュリティパッチの適用を行いました。
    • インスタンス停止時間があるパッチだったので RDS => Aurora のメンテナンス時間に合わせてやりました。
  • 開発用DB関連
    • 元々、Production 以外の環境で Production 相当のデータがある状況でアプリケーションを動かす目的で、個人情報等のデータをマスクした DB を作って Docker Image 化 => ECS に保存という処理をしています。
    • この処理について RDS => Aurora 移行に伴う修正をおこないました。
      • Aurora からクローン(CoW)が使えるようになって大変高速ですね、応用範囲も広いので今後の環境改善に使っていくことになるとおもっています。
  • インフラコスト削減
    • Aurora 移行に合わせて Aurora の Reserved Instance を買いました。
    • ElastiCache も RI に。
    • Saving Plans も追加しました。(カバー率50%くらい)
    • いにしえの、何に使っているのか誰もわからないようなインスタンスをいくつか終了させたりもしました。
  • ID 基盤
    • 久しぶりに ID 基盤に着手できるようになってきました。
    • Datadog との接続
      • Fargate + ECS + Rails における Datadog との接続みたいな感じです。
      • 特に変わったことをやってないので書くことないです…
    • Log 周り
      • ECS になるので全面的に作り直しになるポイントで。
      • ログの長期保存、および、ログからデータを生み出すデータフローを作ることを想定しています。
      • このタイミングで CloudWatch Logs はやめて…
        • FireLens + FluentBit + Datadog のパスを作りました。こちらは短期間参照用ログです。保存期間は Datadog の契約上、2week になります。
        • FireLens + FluentBit + Firehose + S3 のパスも作りました。こちらは長期間参照用ログです。ログを Select する手段をどうしようか、というのはユースケースが見えてきたら作り込もうと思っていて、現時点では S3 Select だけです。
          • 全環境で上記 2 パスを共通利用できるように、環境変数注入で挙動を変えれるように FluentBit コンテナを作りました。
  • アセット分離
    • 既存 Rails アプリは Rails からアセットを配信している部分がありまして、コンテナ化していく流れの中でアセット配信を分離しなければというのがあります。
    • 今月は app/assets/images に配置している画像配信を Imgix 経由にする処理をひとつづつやっていきました。
    • 大量にあるので来月も引き続きやるかんじです。
    • コンテナじゃないアプリケーションをコンテナにしようとするとこういう本質的じゃない対応が延々と続くので、これから同じ道を進もうとされている方は参考にしてください〜!
      • 単純作業に落とし込めないけど比較的単純だなぁみたいな状況が結構長く続くことになりがちなので、チームマネジメント力が問われるかもしれません。

おわり