1
/
5

「北欧、暮らしの道具店」インフラ構成の変遷、5年間の課題と取り組み

こんにちは。エンジニアの佐々木です。

先日12/6、弊社イベントにてカヤックの藤原さんを交えてクラシコムのSREについてお話をさせていただきました。


【オンライン開催】SRE MEET UP!カヤック×クラシコム 〜15年続くサービスのインフラ強化と個人に頼らないチームづくりのプロセスを振り返る〜12/6(火)19時から|Kurashicom Tech Blog|note
クラシコムが運営する「北欧、暮らしの道具店」のインフラを支えるSRE(Site Reliability Engineering)のあゆみをお話するトークイベントを12月6日(火)19時〜20時30分に開催します。 お申し込みは こちら から ...
https://note.com/kurashicom_tech/n/nfca4f351da34

当日は96名と多くの方にお申し込みいただきありがとうございました。1時間半があっという間で、時間の関係でお話できなかったことも多々ありました。改めてではありますが、記事にて当日の内容含め話せなかったこともご紹介したいと思います。

当日のテーマは「インフラ強化に向けた具体的な取り組み」と「一人に頼らないチーム体制づくりを目指して」という2つでした。

この記事では前半の「インフラ強化に向けた具体的な取り組み」について紹介します。北欧、暮らしの道具店のインフラ構成の変遷を追いつつ、その時々の課題や実際の取組みについて説明していきます。

目次

  1. 5年前(2017年5月頃)のインフラ構成
  2. 3年前(2019年9月頃)のインフラ構成
  3. 今(2022年11月頃)のインフラ構成
  4. まとめ

5年前(2017年5月頃)のインフラ構成

エンジニア3人で作った月間1600万PVのECサイト
「北欧、暮らしの道具店」を支えるシステムの裏側
より


いきなりイベント中に触れなかった内容ではありますが、これはクラシコム内でSREの活動が始まるずっと前に書かれた記事にある構成図です。

私が入社直後の構成でもありますが、当時インフラ面で以下のような課題感がありました。

  • サーバー監視に改善の余地がある
  • 大事にならないと把握できない潜在的な問題があるかもしれない

当初、NewRelicとLogentriesは監視するために導入されていました。

しかし、NewRelicはメトリクスの取得のみしていて通知の設定が不十分。

Logentriesは、特定の文字列が入ったログが出力されたらSlackに通知されるという設定がされていましたが、ログだけでは情報が少なすぎて、それが不具合を抱えているのかどうかも把握するのが難しい状態。

こういった経験から、すでにお客様から信頼してもらえている自社サービスを安定的に成長させるためには、まずは以下の部分で改善が必須だと考えていました。

  • 監視の改善
  • 可観測性の向上
  • 小規模チームで裏側も改善していける体制づくり

すぐNewRelicでアラートを設定するなど少しだけ改善。その後、他プロジェクト優先で2年ほど月日が経ち、ある日代表の青木からカヤックさんのエンジニアと一緒に仕事をするのはどうかという打診があり、SRE伴走支援が始まります。

カヤックのSRE伴走支援が『北欧、暮らしの道具店』にもたらしたもの | 面白法人カヤック
「サービス運用におけるSREの必要性を感じながらも、なかなか手が回らない。」多くの企業が抱える悩みに対して、カヤックはどのような協業や技術的支援を行っているかをレポート。本記事では、 カヤックSREチーム の藤原、株式会社クラシコムのエンジニア佐々木さまと一緒に、『北欧、暮らしの道具店』へのSRE伴走支援で得られた成果や変化を振り返ります。 佐々木 亮祐 さま(左)株式会社クラシコム ...
https://www.kayac.com/news/2022/11/interview_hokuo

3年前(2019年9月頃)のインフラ構成

当時の構成図

これはカヤックさんと一緒にインフラ改善を始める直前の構成図です。

買い物appはOpsWorksでEC2をプロビジョニングしているところや、RDS、SES、S3といったAWSサービスを使用しているところは以前と変わっていません。差分は以下になります。

  • 読み物app: EC2 → ElasticBeanstalk
  • インフラ監視: NewRelic → Mackerel
  • エラー検知: Sentry採用

そしてこの頃の大きな課題は以下です。

  • OpsWorks, ElasticBeanstalkの変更が簡単にできない
  • セキュリティまわりの対策が手薄

OpsWorksはChefのレシピを元にEC2をプロビジョニングしてくれるのですが、時間がかかりますし、レシピに不具合があれば途中で失敗します。プロビジョニングで10分以上待ったが失敗…というのもザラでした。

また、当時は1つのAWSアカウントに複数環境が入っていたので、本番のAWSアカウントでコンソール上から試すしかなく心理的にも作業しづらい状況。

うまくプロビジョニングできたらできたで、効率的なオペレーションが整備できていなかったため、新旧のEC2の付け替えをAWSコンソール上から台数分ポチポチ…。開発時と本番反映時の作業負荷が大きく、簡単には変更しづらいものとなっていました。

イベントでも触れましたが、使っていたOSが古くなってきていたことも本格的にインフラ改善を行うきっかけになりました。

ElasticBeanstalkは元々OpsWorksで動いていたものを本番もDockerで動かしたいという考えから採用されました。

ただ、イージーなのですがシンプルではなく、AWSのコンソール上からElasticBeanstalkを使ってリソースを作成すると、裏側ではCloudFormationが作られそこからいろんなAWSリソースが自動で作られ管理されるようになります。

その関連したAWSリソースを変更したいと思ったときに、リソースの設定をCloudFormationを使わず直接変更してしまい、CloudFormationの設定と差分が発生した結果環境が壊れてしまうことがあります。実際、ElasticBeanstalkの変更が行えなくなったり環境自体の削除もできなくなりAWSサポートに連絡して削除してもらうなどの問題も発生していました。

Mackerelに関しては私が以前使っていたこともあり、導入しやすかったため採用しNewRelicから移行しました。カヤックさんとの改善が始まる前での導入でしたが、カヤックさんもMackerelを使っており、専用のOSSを作られていたり知見が豊富だったので結果的に採用してよかったです。

今(2022年11月頃)のインフラ構成

今現在の構成図

これが現在の構成です。AWSサービスが増えて一見複雑になったように見えるのですが、コンポーネント同士のつながりはシンプルです。以前の構成との大きな差分をピックアップします。

  • OpsWorks、ElasticBeanstalkがECS/Fargateに
  • ECSになるに合わせてバッチジョブ構成変更
  • エンドユーザー側のアプリケーションは一つに統合
  • CloudFront、WAF、Cognitoなどアプリケーション前段部分の拡充
  • ElasticsearchやGunfish/FCM(Push通知基盤)など追加
  • Datadog APM採用

OpsWorks、ElasticBeanstalkに関してはすべてECS/Fargateに移行しました。複数アプリケーションあったのでトータルで1年以上かかってはいますが、このおかげで、以下の点で管理や変更作業がしやすいというメリットを享受しています。

  • Fargateのためサーバー管理が楽に
  • 手動によるサーバーの作り直しやターゲットグループ入れ替えが不要に
  • プラットフォームが統一されてスイッチングコスト減。CI/CDも対応しやすい
  • インフラ部分の設定の見通しがよくなった
  • Secret Managerを使用し秘匿情報管理がより簡単でセキュアに
  • バッチ・キューワーカーの冗長化


Laravel on ECSでのバッチ実行基盤事例|Kurashicom Tech Blog|note
こんにちは。エンジニアの佐々木です。最近、映画アルゴの主人公のような密度が濃く整った髭を目指し日々手入れを行っています。 さて。以前、社内勉強会で発表した「北欧、暮らしの道具店」におけるSREについての記事を書きました。 ...
https://note.com/kurashicom_tech/n/n6446ba01344f

ECS移行のタイミングと合わせて、AWSリソースはすべてterraformで管理するようになりました。他のメンバーからのレビューも受けやすくなりましたし、GitHubで変更履歴も残っているので、品質や変更のしやすさが大きく改善しています。

CloudFront、WAF、Cognitoなどアプリケーション前段部分拡充の他にも、RDSがAuroraになったり、KMSやSecrets ManagerやGuardDutyをちゃんと使うようになったり、AWSアカウントもマルチアカウントにして運用するなど、システムの安定性とセキュリティの向上にも着手し続けてきました。

結果、大きな不具合が起きたらどうしようといったリリースや運用面での心理的なハードルが下がり、開発に集中できる環境の整備が進んだと感じています。

参考: 北欧、暮らしの道具店を支えるAWSマルチアカウント運用(Speaker Deck)


CloudFront導入とCognitoで認証した話|Kurashicom Tech Blog|note
テクノロジーグループの冨田です。 北欧、暮らしの道具店とクラシコムのコーポレートサイトにCloudFrontを導入しました。以前から画像についてはCloudFrontやimgixを利用し配信していました。今回はサイト自体を配信するようにしました。 2022年8月に東証グロース市場へ上場しました。 という動機からCloudFrontを導入しました。 ...
https://note.com/kurashicom_tech/n/necd485b3da44

また、構成図には記載しませんでしたが、DBへアクセスするための踏み台サーバーもEC2からECSに移行しています。

FargateでECSタスクを用意しておりSession Managerを利用しトンネルさせています。

AWS Systems Manager 経由で SSH トンネルを使用してプライベート VPC リソースにアクセスする
SSH トンネルを作成するには、Session Manager を使用できます。Session Manager は AWS Systems Manager の機能で、リモートホストのポート転送を使用できます。この機能は SSM Agent バージョン 3.1.1374.0 以降でサポートされています。ポート転送は、以下の手順の代替手段です。リモートホストのポート転送の詳細については、「 セッションを開始する 」を参照してください。 Session Manager は Systems Manager インフ
https://aws.amazon.com/jp/premiumsupport/knowledge-center/systems-manager-ssh-vpc-resources/

ECSのデプロイツールとしてecspressoを採用しているのですが、ecspressoでタスク数の操作もできるため、踏み台が必要なときには1、使わないときは0にすると同時にSession Managerで登録されたマネージドインスタンスの登録も解除するという運用にしています。

踏み台サーバーは頻繁に使うものでもなく、起動/停止が早いのでとくにストレスなく、サーバー費用を抑えつつセキュアな状態で運用できていると思います。

なお、セッションが始まったらChatbotからSlackに通知されるなど監査体制も整備しました。

Slack通知例(絵文字は北欧、暮らしの道具店の猫ちゃん。LINEスタンプもあります)

ElasticsearchやPush通知基盤(Gunfish, FCM)まわりはインフラ改善の一環ではなく、モバイルアプリのリリースに合わせて導入されたものになります。この記事では詳細を割愛させていただきますが、参考ブログのリンクを記載します。

「北欧、暮らしの道具店」初のアプリができるまで(API開発編)|Kurashicom Tech Blog|note
こんにちは。気がついたら入社から2年が経っていたエンジニアの廣瀬です。先日、入社以来の個人的な悲願でもあった「北欧、暮らしの道具店」のアプリ(iOS)をついにリリースしました!わーい! 🎉🎉🎉 アプリ開発に関してインタビューしてもらった記事も会社のウェブサイトで公開されています(記事内の「わからなくてもいい廣瀬さん」の方が僕です)。 インタビューでも色々と話したのですが、ここでは API ...
https://note.com/kurashicom_tech/n/nc2d9f025c909


Push 通知送信エージェント Gunfish に FCM v1 API 対応を追加した - KAYAC engineers' blog
SREチームの藤原です。 Tech Kayac Advent Calendar Migration Track 17日目の記事です。 カヤックでは iOS (APNs) や Android (FCM、かつては GCM) へのモバイルプッシュ通知に、自社で開発した Gunfish というソフトウェアを使用しているプロジェクトが多くあります。 APNs にはクライアント認証のための証明書を用意した上で HTTP2 で接続する必要があるのですが、Perl などの LL で開発されているプロジェクトで個々に HT
https://techblog.kayac.com/gunfish-fcm-v1-api

Datadog APMに関しては、負荷試験を実施するタイミングで導入しました。いくつかAPMのサービスを比較した結果、コスト・導入のしやすさで選択しています。また、このとき負荷試験ツールとしてk6を使うなどもしています。詳しくは下記ブログに記載しているのでご覧ください。


アプリケーションエンジニアが初めて負荷試験やってみた|Kurashicom Tech Blog|note
はじめまして、エンジニアの矢田です。 昨年の7月にクラシコムに入社し、SREチームでインフラの課題を解決したり、アプリケーション周りの機能実装を行ったりしています。 前職では短期間で様々なプロジェクトに参加し技術的な課題解決を行うというお仕事をしておりましたが、より身近な生活や人たちと関われるサービスで課題解決をやってみたいと感じたため転職しクラシコムにジョインしました。 ...
https://note.com/kurashicom_tech/n/n40aef15d52e7

まとめ

5年間のインフラ構成の変遷を追いながら、課題と実際の取り組みを紹介しました。

年単位での変遷なので一気に変わったように見えますが、当然、一足飛びで今の状態になったわけではありません。少し先を見据えて、少しずつ改善を加えた結果が年月を積み重ね、気づくと大きな変化になっていました。

少し話は変わりますが、開発チームのパフォーマンスを図る有名な指標となっているFour Keysに、5つ目の指標として「信頼性(運用のパフォーマンス)」が2021年に加わっています。

2021 年の Accelerate State of DevOps Report で、燃え尽き症候群とチームのパフォーマンスについて発表 | Google Cloud 公式ブログ
※この投稿は米国時間 2021 年 9 月 22 日に、Google Cloud blog に 投稿 されたものの抄訳です。 過去 7 年間で、32,000 人を超える世界中の専門家が参加している Accelerate State of DevOps Report は、この種の調査としては最大規模かつ最も長期にわたる研究となっています。Accelerate State of DevOps Report は毎年、データドリブンな業界分析情報を提供しています。分析情報では、ソフトウェア デリバリーや運用におけ
https://cloud.google.com/blog/ja/products/devops-sre/announcing-dora-2021-accelerate-state-of-devops-report


クラシコムでは数値化できてはいませんが、運用が安定し信頼性が高まると、開発のパフォーマンスも上がることはこの5年間の私の肌感ではありますが強く感じました。

今後もより良いサービスにするべく、SREの活動は継続して健全なシステムを作り続けたいと考えています。

一緒に「北欧、暮らしの道具店」というサービスを開発してくれるエンジニアを募集していますので、気になる方はぜひ一度Wantedlyからご連絡ください。

株式会社クラシコム's job postings
3 Likes
3 Likes

Weekly ranking

Show other rankings
Invitation from 株式会社クラシコム
If this story triggered your interest, have a chat with the team?