ランサーズ Advent Calendar 2021 10日目の記事です。
Lancers Engineer Blog をご覧のみなさんこんにちは。開発部/技術基盤 SREの安達(@adachin0817)です。今年2月からダイエットを始めていまして、ジョギングを週2~3日習慣付けられるようになりました。15キロ減量しましたが、まだまだ落とせると日々舞い上がっております。他にもCakePHPで個人開発したり、サーバーサイドやフロントにもチャレンジしています。
早朝は極寒だった
5.02キロジョギングしました👟
— adachin👾SRE (@adachin0817) December 9, 2021
さて、直近のSREチームの大きなイベントとしてはランサーズ本体のインフラを改善している最中でございます。まずは上期SREチームで取り組んだことをエンジニアブログを元にまとめていき、最後には今期(下期)での取り組みについてご紹介します。
上期取り組んだこと
ランサーズで利用している開発環境をすべてM1 Macに対応させることができました。素早い対応でしたが、M1とDocker for Macの相性があまり良くなく、フリーズやクラッシュしている方やbuildが遅いなど見受けられますがアップデートを見届けるしかないでしょう。
ランサーズ以外のサービス3つをAWSに移行完了したということもあり、長年放置されていたTerraformのバージョンアップ(v1.0.0まで)を実施することができました。LTも出来たので知見を共有できましたし、やりきることができました。(思い出すと結構大変だった。。)
こちらはAmazon Linux 2で運用していましたが、コンテナに無事移行することができました。EFSでの移行後課題がいくつかあり、レスポンスとコストパフォーマンスが悪く、デプロイの複雑さ等懸念点がありました。結局のところリポジトリを一つに集約したことによって従来のコストパフォーマンスやレスポンス等よくなったので、新規のメディアが増えても、導入の工数がかからなくなったのはメリットでした。
分析で利用しているDigdagサーバーをコンテナに移行し、属人化の廃止とバージョンアップのしやすさによりメンテナンスがしやすくなりました。また、開発環境も新たに用意したので、SRE以外でもテーブルの追加依頼等任せることができたので、大きな変化となりました。
SREの金澤さん(@yakitori009)がOSSとして公開したSendGrid用のMailモックコンテナですが、弊社で利用ケースの拡大に伴い、様々な要望が出てきたので自作しました。メールの誤送信は、最も発生件数の多いセキュリティインシデントの1つでもありますので、対応されていない方がいましたらぜひ利用してみてください。
Lancers Assistant、Lancers Agency、MENTAの開発、Stg環境における本番DBマスキングリストアの仕組みを実装しました。実装内容がデータベースを触るということもあってかなりシビアでしたが、開発メンバーがより本番環境に近い環境で作業できるようになったのと、個人情報を取り扱っていないのでインシデントも起きない状態になったのはいい取り組みとなりました。
- その他社内ツールをECS/Fargate移行し安定化稼働
- Datadogでのアプリケーションログ、エラーログの可視化
- E2EテストによるUbuntuVNCデスクトップの構築
以上が上期取り組んだ内容になりましたが、グループ会社でのコンテナ移行の知見を生かしてランサーズで利用しているサーバーを少しずつコンテナへ移行出来たのが大半でした。またSRE以外にも開発メンバーが本番でのコンテナ運用もできるようになったのは良い取り組みでしょう。
次は今期(下期)での取り組みについてご紹介します。
現在のSREチームとオンボーディングについて
10月から新たに1名SREとして波平(@kata_dev)さんがジョインしてくれまして、計3名となりました!SREを採用するのはどの会社も苦労していると思いますが、いい人に出会えて非常に感動でございます!
また、私は入社して来年で4年目を迎えるのですが覚えることが多く、すぐに現場に慣れてもらいたいという気持ちがあったので、オンボーディング資料を今回初めて作成しました。これを見れば1発でどんな業務や課題があるのかなどイメージが湧き、今後のやりたいことなど議論等活発になります。
まずは入社日に各サービスの構成等把握してもらい、2~3週間はわからないところがあれば気楽にSlackのハドルを利用してペアプロしながら業務を進めていきました。また業務で「これ改善したらもっと楽になりますが、どうでしょうか?」など本人の意見を尊重し合い、心理的安全性を保つようにチーム全員でコミュニケーションし合うことを努めています。オンボーディングについてはカジュアル面談等で見てみたい!という方がいれば気楽に連絡ください。
- 現在のチーム構成
・@yakitori009: ランサーズ本体 PHPバージョンアップ
・@adachin0817: ランサーズ本体 インフラ改善/@kata_devさんフォロー
・@kata_dev: 分析基盤、Lancers Agency、Lancers Assistant、MENTA、新サービスインフラ
新チームになって2ヶ月目ということもあり、担当するインフラも変化していきました。SREチームとしてさらに改善したい部分が見えてきてのと、よくサービス1人に複数担当で「あとはよろしく!」などは基本しません。3名で全プロジェクトのインフラを把握し、属人化がないように回すようにしています。
個人的には私がようやくLancers本体を改善できる立ち位置になり、波平さん(@kata_dev)には他プロジェクトを担当してもらっているので非常に助かっております。一見上記の図を見ると私がラーメン食べて仕事するように見えますが気のせいです。(波平さん(@kata_dev)のアイコンです)
ちなみに波平さん(@kata_dev)と1on1していますが「今までの技術力にプラスしてさらに経験が得られるので、毎日が勉強です!」とのことでした。良かった!
今期(下期)SREチームの取り組みについて
- Lancers本体をAmazon Linux 2(Arm)化とログ基盤リニューアル
Lancers本体は現在Amazon Linux 1で運用しています。開発環境はDockerを利用していますが、Ansibleのメンテナンスを怠っていたということもあり、Docker ImageのAmazon Linux 1では動作しなくなってしまったので、この機会にAmazon Linux 2(Arm)への移行を決意しました。
■移行の流れ
・Amazon Linux 1 → Amazon Linux 2(Arm)移行
・パフォーマンス計測
・ECS/Fargate(Arm)移行
また、wkhtmltopdfによるPDFへ変換するツールを利用しているためArm対応していなさそうと懸念していましたが、ステージング環境やdevx(社内向け開発環境)は無事にArmへ移行することができました。ちなみにAmazon Linux 2022も発表されましたが、タイミングが悪い!
さらに分析としてログ基盤(サーバー)を運用していますが、ブラックボックス化してしまっているので、分析で利用しているログを全て見直して、以前までFluentdを利用していましたが、バージョンアップを試みたところ厳しかったので、廃止してAmazon Kinesisに移行することにしました。
この運用により開発メンバーはわざわざログサーバーにSSHすることなく、CloudWatch Logsでログの確認やCSVでのダウンロードができるので、ブラックボックス化しにくくなります。またLambdaでLTSV形式にすれば生ログで出力されて、分析基盤で利用しているDigdag/Embulkにも相性は良くなります。さらにDatadogでのLogs機能とKinesisを連携すれば突発的なエラーも早期発見することができます。ログ基盤をリニューアルすることでECS/Fargateへの移行もできる準備も整うことができました。ECSのDocker ImageはAmazon Linux 2を利用する予定です。
- ECS/Fargate Arm移行
待望のECS/FargateでもArmを利用できるようになりました。パフォーマンスが上がるのと同時にコストダウン可能なので全サービス適用する予定です。Datadogでどのくらい変化するか計測もしていきたいと思います。Terraformはタスク定義でArm指定が可能になりましたが、CircleCiでのコンテナbuildでOrbsが対応していないので継続的に情報を確認していきます。
最新のaws providerでFargateのArm64に対応してた🙏https://t.co/tVp5wOSIzJ
— namipay (@kata_dev) December 13, 2021
- MySQL8.0に移行
https://aws.amazon.com/jp/about-aws/whats-new/2021/11/amazon-aurora-mysql-8-0/
こちらも待望のRDS AuroraがMySQL8.0に対応しました。MySQL8は5.7よりパフォーマンスが2倍高速になったのと様々な新機能が追加されたので、まずは開発環境から移行を進めていきたいと思います。台数がかなり多いので、事前の検証と労力をかなり奪われそうなのと慎重に進めていきます。
ちなみにLancers Creativeのステージング環境はAurora MySQL8.0にしましたが、5.7から8.0へのアップグレードはできないので、スナップショットあるいはmysql dumpしてrestoreするしかないので気をつけましょう。Terraformからのスナップショットはかなり神経使いますね。。
Aurora MySQL5.7からMySQL8.0にバージョンアップはできないので、スナップショット、あるいはdumpしてrestoreするしかない!https://t.co/RB5UrIfgi7
— adachin👾SRE (@adachin0817) December 8, 2021
- Digdagをv0.10.3にバージョンアップ
こちらDigdagのみバージョンアップの対応が完了しました。ちなみにJava11 +Graaljsに対応してから安定性が増えるとのことでしたが、Embulk自体がJava11に対応していないので、様子見となります。Embulkのプラグインはまだバージョンアップしていないので、動作確認等対応していきます。また、最近テーブルのレコード数が増加しているので、差分更新するよう全てのテーブルを洗い出していこうと思います。
- Redashをv10.0.0にバージョンアップとECS/Fargateに移行
現在RedashサーバーはEC2/Ubuntu上のDockerで稼働しています。こちらもECSに移行することでより運用上と安定性が担保されるので、まずは本番環境と差異が生まれないように専用の開発環境の構築をしました。またRedashもバージョンアップが完了しましたが、V10.1.0でBigQueryのスキーマロードが60倍速度向上となりますので対応していきたいと思います。残りECS/Fargateへ移行のみとなりますので期待しましょう。
その他取り組んでいることは以下となります。
・Lancers Agency/PROsheet PHP7バージョンアップ→完了
・マイページリニューアルと分離
・Deployサーバーを廃止してreleaseをCircleCIに移行
・Terraform→完了
・Lambda→完了
・Session Manager専用Ansible開発環境の構築
・Lancers本体Terraform化
・フロントエンドを分割
・BigQueryからAmazon Athenaに移行
・ランサーズ CakePHP2→CakePHP4 バージョンアップ
・ランサーズ 管理画面 CakePHP4 実装
・ECS/Fargate移行
・新サービスのインフラ構築(Lancers Digital Acadmy)
・OneLoginでアカウント周り連携
・簡単なシェルスクリプトをGoに置き換え
まとめ
今期は主にランサーズ本体の改善を行います。ランサーズは10年以上運用しているサービスでもありますし、課題が山積みです。グループ会社で培ってきたコンテナの活用をフルに発揮することができるので、ようやくこの時が来たか..といった心境で技術スタックもモダンに近づいています。移行できた際にはメンバー全員が喜ぶことでしょう。たくさんの壁がありますが、全てやりきっていきたいと思います。
ちなみに私の来年の目標としてはインフラ以外にもサーバーサイド(CakePHP)も取り組んで行く予定なので気合入れて頑張っております。明日はMENTAで教えていた大平@koki0527くんです!ぜひお楽しみに!
※追記