@takutakaまとめ開発合宿のすゝめなぜ開発合宿をするのか技術部プラットフォームグループのリューちゃんです。GMOペパボでは多くのサービスを提供しております。技術部プラットフォームグループ(以降PFG)はSREロールとして横断的にさまざまなサービスの信頼性を担保できるように努めております。現在PFGには遠方在住パートナーもおり、リモートをメインとして日々の業務を行っています。PFGをチームに分割して担当しているため同じ部署ではあるものの、担当しているサービス(チーム)以外のパートナー(一緒に働く仲間のこと)との日頃の接点が少ないという状況があります。チームを超えてサービスの信頼性についてオフラインでディスカッションしたり開発を行ったりするという場も少なく、それぞれのノウハウを共有する機会があまり多くないと感じています。そこで横断組織としてのシナジーを活かすため開発合宿を企画いたしました。沼津なのか開発合宿をする以上、リラックスした環境で挑みたいと考えました。沼津は富士山が一望でき、港の近くで美味しい新鮮な魚介類を食べることができる環境であることが挙げられます。リモートメインのパートナーの居住地と間をとることができるというのも大きな理由です。プラクティカルに管理・運用するためのツールであるproxysqlupというCLIツールを開発しました。するうえで起こりうる障害ケースを想定したデモなどを実施しました。運用上頻繁に起こるタスクに対しpuppetの変更→デプロイ→適用→メトリクス等をモニタリングして監視というフローを取ってきました。1アプリケーションインスタンスに対しProxySQLが1台という専任構造を取ってしまっていました。Clusterの導入を検討しています。ProxySQL自体のアップデートやClusterのスケールアウト、設定変更等をCLIの1コマンドで実施できるコンセプトを持って開発されています。Actionsから使えるようにして、CLI自体を各自が手動実行しないようすることで運用上のトイルを軽減するように意識しています。proxysqlupに落とし込んでいく、という分担で実施しました。Clusterを構築するデモです。@yuchiカラーミーショップのデータベース運用として、参照頻度が高いショップページ全体の情報をInnoDBのバッファプールへキャッシュすることで、アクセス時のレスポンスタイムの低減を行っています。予備DBをバッファプールのキャッシュがない状態から本番システムへサービスインを行う前には、主に使用されるテーブルをSelectするスクリプトを実行し、バッファプールへキャッシュが乗った状態を作ってからサービスインしていました。障害/メンテナンス時などはもちろんのこと、ECサイトというサービスの特性上急激なトラフィック増加が発生した場合もスケールアウトさせるために予備DBを使用する必要が出てきます。上述したスクリプトの実行完了までは数十分かかっていることで、サービス影響が発生する時間が長くなってしまう問題がありました。ProxySQLのミラーリング機能を使用し、アプリケーションから実行されるクエリを予備DBにも実行することでバッファプールにキャッシュが乗った状態を作れると考え検証を行いました。ClusterをKubernetesで構築および運用するツールと合わせることで、データベースの運用を楽にしたいと考えています。パフォーマンスチューニングに取り組みました。rcはすでに社内でも運用されているパッケージです。リクエストやレスポンスをバッファに持ってしまう設計になっていることであるのは明らかでした。「どのようにStreamで透過的にキャッシュファイルを読み書きするか」が今回の鍵でした。あることに気づき、そこからは実装だけでした。結果として、ベンチマークレベルで2桁のメモリ使用率改善ができました。@n01e0こんにちは。バイナリかるたをするため、急遽合宿に参加しました。KunaiはRust製のツールです。eBPFを使ってシステム上で発生するさまざまなイベントのログを取得することができます。「Linux版のSysmonだと思って良い」とも書かれています。通常のx86_64のLinux環境であればReleaseのバイナリをダウンロードして実行するだけで動きます。設定についてはドキュメントにかかれています。ドキュメントを読むと取得できるイベントの種類もわかります。Kunaiをロードしたうえで、コンテナ内でコマンドを実行してみると以下のようなログが取れます。}}良くないですか?ちゃんと親プロセスもわかるし、コンテナの名前もnamespaceも取れてるんです。「eBPFでイベントログを取って色々したい」という願望があっても、イベントの定義と実装がどうしても膨大な作業になりがちで面倒なんですが、Kunaiが全部いい感じにしてくれているので助かります。あとはこれで取得したデータの活用に集中するだけです。@tnmtカラーミーショップではCourier-IMAPとqmail-pop3dでメールホスティングを行っていますが、運用上のさまざまな問題の解決と、社内の利用技術の統一を目指してDovecotへの移行を検討しています。現行のメールサーバーの構成からのリプレース方法を探るべく、今回の合宿中で既存のIaCのコードを変更を行いました。実現できたのは以下の内容です。以上をもって検証環境にてCourier-IMAP&qmail-pop3dとDovecotのプロセスを切り替えることで、IMAP/POPのポートの待受のミドルウェアを変更できる状態を作れました。ここまではさほど難易度の高くない内容ではあるのですが、単純にミドルウェアを切り替えるだけではNGでミドルウェア変更の差分の解消が必要になります。注意を払わないといけないのは、ホストしているメールの連番とファイル名のリストの扱いです。これらはファイルやミドルウェアからの応答として管理されますが、特にPOPでは受信・未受信管理にも利用されるため、ミドルウェア切り替えの際にこの互換性が取れていないと、POPにてメールの再受信がされる可能性があります。ミドルウェアを切り替えてもIMAP/POP利用クライアント側での設定変更が必要とならないよう、調査・検証する時間が残りの合宿期間中で多く占めました。そこでさらに以下が実施できました。Courier-IMAP/qmail-pop3dと互換性を持つためのDovecotの設定項目の把握と指定方法ユーザーのMaildirにあるミドルウェア固有のファイルのマイグレーション方法の調査と検証すでに弊社内でも技術部ホスティングインフラグループの面々がCourier-IMAPからDovecotへのマイグレーションを実施していたため、社内の情報を参考にすることで大幅に時間が短縮できました。今後は移行の計画を十分に練ったのち、プロダクションの構成の変更に臨みたいと考えています。Releaseを実施しています。これまでは、Prometheusに収集されたIstioのメトリクスを使ってCanaryの状態を計測していましたが、いくつかの課題がありました。Request(500エラー等)が増えているかを判断できず、開発者がArgoRolloutsによってロールバックされた原因を掴むまでに時間がかかってしまうといった問題がありました。Shardingを行っているPrometheusサーバーが一台でも落ちると、正常にリクエストレートの集計ができなくなり、リリースに影響が出てしまう問題もありました。これらの課題に対して、私たちはCanaryの状態の計測にアクセスログを集計したデータを用いることを検討しました。Lokiを使用してアクセスログを集計し、Canaryの状態を評価するアプローチを考えました。Lokiを用いたアクセスログの集計を行うことにしました。Lokiでアクセスログを集計するにあたって、既存のアクセスログの収集方法を見直す必要がありました。LokiのLogQLでの集計方法の調査・検証をメインで行いました。Rolloutsの基盤にこれらの機能を取り入れることはできませんでしたが、引き続き検証を進めて、さらなるデプロイフローの改善に取り組んでいきたいと考えています。Watanabe)仙台在住の初静岡だった渡部(gurasan)です。東北の民なので富士山が見たくて見たくて仕方なかったのですが当日は山頂部が雲で隠れていて見れなくて残念でした。絶対行こうと思います。私は今回の合宿でOpenDKIMが持っているなりすましに関する調査と対策の実装を行いました。この課題は細かく書くと以下のようなものです。課題SigningTableの設定が、認証されたユーザーが他人の署名設定を適用することを可能にしている悪意のあるユーザーが、OpenDKIMシステム上で他人の秘密署名鍵を使ってメッセージに署名することができてしまうXというユーザーがメールサーバの認証を突破した上でYというユーザーのメールアドレスをFromヘッダーに設定してメールを送信すると、Yというユーザーとして正しく認証してしまうこの課題は以下のissueにも記載されており現在もOpenDKIM自体では現在も対応がされていません。signingこの相乗りしてるドメイン間のなりすましを防ぐ仕組みはOpenDKIM本体では機能としては備わっていないがLuaで拡張を行う機能は備わっていますopendkim-lua。そちらを利用することでなりすましを防ぎ署名をしないという仕組みは実装することができます。以下は実装のサンプルとなっています。Luaで認証されたユーザー名やFromヘッダーの値を取得できることがわかります。これらの値を元に署名をするかどうかを判定するということができるようになっています。nilまたGitHubのリポジトリにも他のサンプルがあるのですがMySQLに問い合わせた結果をもとに署名を行うこともできるようです。OpenDKIMのバックエンドとしてMySQLなどのバックエンドを使っている場合でも対応が可能となっていました。@harukinはじめて「こだま」に乗りました、harukinです。Firehose)を経由してS3に保存されています。Logsを介する必要はありません。CloudWatchのコスト増加が課題となっていたため、監査ログを直接S3に保存する仕組みを検討し、今回の合宿をきっかけに実装に着手しました。以下のような流れを想定しています。EventBridgeが定期的にLambda関数をトリガーLambda関数が監査ログのローテーションを確認し、S3に保存する監査ログをS3へ保存する部分まで実装が完了していますが、Lambdaが監査ログをS3に保存できなかった場合の通知やリトライ機能など、実際の運用に向けて追加の対応が必要です。これらの課題に対応しつつ、引き続き実装を進めていきます。Shibata)こんにちは。shibatchといいます。先月、なぜSUZURIはHerokuから「EKS」へ移設する決定をしたのかと題して、SUZURIをHerokuからEKSへの移設を決定した経緯についてお話ししました。Requestを作成すると自動で専用の環境をKubernetesクラスタ上に作ってくれる仕組みの作成に、この合宿で着手してみました。実績は以下の通りで、branchの更新をサイドカーコンテナが検知してsyncするところまではこぎつけました。Appを定義して周期的にトークンをEKSで更新し、git-syncサイドカーコンテナでPod内でリポジトリのsyncができた「こうすればできるだろう」というイメージは事前に固めて着手したものの、トークンの更新作業は当初あまり想定していませんでした。それでも他合宿メンバーから助言いただいたおかげで実装できてよかったです。一人だとこうもいかなかったので合宿という環境に感謝ですね。Actionsで起動するようにしていく予定です。@pochy沼津の伊豆・三津シーパラダイスにはゴマフアザラシがいます。この合宿には「AIをやるぞ」と決めて臨みました。ペパボの連結企業であるGMOクリエイターズネットワークにおいて、定型タスクとして特定種類のログの解析を人間が目視で行っているという課題がありました。Firewall)のブロックログを眺めて、偽陽性ブロックが出ていないかどうかなどを判断する作業です。このような、テキストで与えられた情報をもとに確率的な判断をするという作業は昨今のAIが得意とするところです。そのため、トイル削減を目的として、人間ではなくAIが判断することを目指しました。1で出力する合宿内で、以上の流れを実行するスクリプトが実装できました。人間が普段おこなっている常識的な判断は、現代のAIサービスでも十分に代替できそうだと分かりました。精度の評価と、データソースやプロンプトの拡張性などが今後の課題として残っています。@pyamaこの世で一番キライな食べ物は夏です。今回の合宿では、WEBサービスにアクセスしてくるクライアントの中からボットのアクセスを判定するための高度な分類器をPythonとXGBoostを用いて実装しました。その結果、非常に高い精度を達成することができました。300000この分類器は、実際の運用環境でも高い信頼性をもってボットと人間のアクセスを区別する能力を発揮しています。ボットの検出率が95%と高いため、悪意のあるアクセスや転売目的のクローリングを効果的に防ぐことができます。最近では、攻撃目的のアクセスに加え、転売目的で大量にクローリングするボットも増加しています。これらのボットはWEBサービスのリソースを無駄に消費し、我々のサービスを利用するお客様の満足度を低下させる要因となります。した問題を解決するために、ボット判定の精度向上に努めました。今回の実装では、WEBサーバのログに出力される一般的な特徴量を利用し、ユーザーエージェントやWEBアクセスログの周期性、ステータスコードの割合に基づいて特徴量を設定しました。この分類器は自社開発のWEBプロキシサーバから呼び出し、リアルタイムでボットを判定し、必要に応じてアクセスを制限することができます。今後の展望として、本番環境での適用後に詳細な結果を公開し、さらなる改善を続けていきたいと考えています。これからもお楽しみにお待ちください。待ちが発生し、本番のデプロイがなかなか始まらないという課題が発生していました。ツールとして実行できるようにパッケージングしました。以下のようなコマンドを実行することで、コントローラが行う処理と全く同じことを即時実行できます。テストが指定のリソースのみを対象に行えるようになるなど、想定していなかった副次的な効果がありました。コマンドを実行するジョブを並列に動かすことによる処理のスケールアウトを実装しようと考えています。まとめ通常業務では同じチームといえどなかなか会話しないパートナーとコミュニケーションを図ったり、相談し合いながら夜通し開発できる機会というのは弊社を含めてなかなか難しいように思います。そこに対して開発合宿は私たちが大切にしている3つのことのみんなと仲良くすること、ファンを増やすこと、アウトプットすることの全てを合宿・ブログ・開発で満たせることができて大成功でした。私個人としてもさまざまな技術背景を持つパートナーたちが互いに尊重し合いながら開発でき、本当に良い仲間に恵まれたと感じております。この場をお借りして感謝したいと思います。エンジニア新卒採用に関する情報をまとめたページも公開中!ツイート書いた人ryu-ch最近はおうちクラウドを始めようとしてます。逸般人と呼ばれる日も近い、、!pochy好きなアザラシはワモンアザラシです。n01e0わいわいわいk1LoW少し実用的で小さなOSSを書くのが趣味。pyama最近の趣味はファイナルカレーです。今日はクミンを入れすぎて酸っぱくなりました。gurasan仙台にいますharukin海鮮おいしかったtakutaka作業場のエアコンが直接あたって寒いですressy技術合宿と運動合宿を終え強くなりましたdrumatoプログラミングとゲームで休日が終わる生活をしていますyuchi最近買い替えた3Dプリンターと戯れてますnaryoエンジニアになる前はサーターアンダギー職人でした。