クラウドワークス エンジニアブログ

日本最大級のクラウドソーシング「クラウドワークス」の開発の裏側をお届けするエンジニアブログ

Amazon LinuxのEOLに伴いバッチをサーバレス化しFargateに移行した話

はじめまして、2020年3月に中途入社したSREチームの @bayashiok です。

今回は入社後、Fargateでサーバレスバッチ基盤を構築した話を書いていきます。

目次

  • 目次
  • 経緯
  • Fargateを選んだ理由
    • 1. リソースの見積もりがCPU/Memoryだけですむ
    • 2.スケーリングを考えなくて良くなる
    • 3. セキュリティレベルの向上につながり管理負荷が減る
  • 現行システムで発生している問題点の解消
  • 構成
  • FargateのトリガーとしてRundeckを採用
    • 理由1: バッチ実行が行われる場所でログを見たかった
    • 理由2: ジョブ失敗やSlack通知の仕組み、リトライ方法やジョブ連携などの作り込みを簡単にしたかった
    • ecs-taskとの連携について
  • デプロイ
    • 1. wrapperコンテナのデプロイ
    • 2. バッチのデプロイ
  • Fargateタスク実行について
  • 移行後の総括
    • よかった点
    • 悪かった点
    • 苦労した点
    • 今後の課題
  • 最後に
  • We Are Hiring!

経緯

日々のSREチームのタスクの中で、EOLとなるソフトウェアの状況を定期的にチェックしているのですが、今回 Amazon Linuxが2020 年 12 月 31 日にEOLを迎えるということで、Amazon Linux上に設置されているシステムを移行する必要がありました。

Amazon Linux2に移行するという案もあるのですが、このままでは負債(後述記載)が残ってしまうためAmazon Linux上に置いてあるバッチの整理と移行バッチのFargate化を行いました。

Fargateを選んだ理由

Fargate化することのメリットは次のようなものがあげられます。

続きを読む

クラウドワークスを退職します。

オフィス
お世話になったオフィス

こんにちは、@ysk_118 です。
実は2020/06/30をもって退職することになりました。
2015/05/18に入社していますので5年とちょっと在籍していたことになります。

時系列とKPTでこの5年を振り返ります。

  • whoami
  • やってきたこと
    • 2015年
    • 2016年
    • 2017年
    • 2018年
    • 2019年
    • 2020年
  • KPT
    • Keep
    • Problem
    • Try

whoami

この5年で非常に多くのことに携わりましたので、まず軽くやってきたことを振り返りながら何者なのか知っていただけたらと思います。

  • 2015/05〜2016/03: 開発Div. エンジニア
  • 2016/04〜2017/02: プロダクトDiv. 新規事業開発グループ チームリーダー
  • 2017/02〜2018/03: プロダクトDiv. エンジニア -> スクラムマスター -> プロダクトオーナー
  • 2018/04〜2019/04: プロダクトDiv. エンジニアリング部 部長
  • 2019/05〜2020/06: 執行役員, エンジニアリングDiv. GM, 人事兼務1

クラウドワークスに入社した当時は新卒3年目でまだ経験的にも浅く、エンジニアとしてしっかりキャリアを積んでいきたいという一心でいろいろな会社を受けていたところ、運良く拾ってもらえたので非常にうれしかったです。

そこから2年ほどエンジニアとして様々なプロジェクトに関わり、その後スクラムマスターやプロダクトオーナーとしてプロダクトや組織そのものへアプローチを1年ほど。さらにその後組織全体をみていくポジションに手をあげ、マネージャーや執行役員として会社全体の中でのエンジニアリングを考える役割を2年ほどやってきました。

こうしてみると自分で手を動かすよりもマネジメント寄りのことをしている時間のほうが若干上回っていそうです。当初の目的であったエンジニアとしてのキャリアを突き詰めるよりかはなんだかんだジェネラリストを極めた結果になってしまいましたw


  1. Div.=Division(部署) GM=General Manager(部門責任者)

続きを読む

Rollbar による快適通知生活 (フロントエンド編)

こんにちは、エンジニアの Bugfire です。

自分の前の記事 でも Rollbar について書きましたが、今回はフロントエンド編です。

無法地帯

バックエンド(Rails)では、Rollbar による通知は便利に活用されており、対応したりみなかったことにしていたわけですが、フロントエンドでは以下の状況にありました。

  • あまりにもエラーが多い
  • エラーが多すぎて課金がすごいことになるのでかなり厳しめの RateLimit をかけていた
  • エラーが多すぎて slack 通知していない
  • 結局エラーを誰もみていない
  • SourceMap が登録されていないので、いざ登録されたエラーをみても分析が難しい

問題は、エラーが多すぎる件と SourceMap がないの二点です。それぞれ対応していきます。

目次

  • 無法地帯
  • Rollbar の設定
  • SourceMap
    • Webpacker 編
      • webpack の設定変更
      • AssetSync の設定変更
      • Rollbar へのアップロード
      • Source linking
    • Sprockets 編
      • SourceMap 生成部分の追加
        • lib/sprockets/uglifier_compressor.rb
        • uglify_with_source_maps
      • Rollbar へのアップロード
      • 問題点
  • 「エラーが多すぎる件」対策
    • XXX is not defined
    • 外部ライブラリに起因するケース
    • ブラウザ側のプラグイン等に起因するケース
    • Rollbar で特定エラーを無視する設定
      • botにより発生したエラーのケース
      • 例外以外のエラーのケース
      • 手がかりが全くないケース
      • 未知の Schema が存在するケース
      • 外部スクリプトのケース
      • スクリプトロードエラーのケース
      • 謎の Injection エラーのケース
  • 最後に
  • We Are Hiring!
続きを読む

イニシエのコードをモダンJS化

こんにちは。D&Aチームです。

クラウドワークスではユーザーの皆様により良い体験をしていただけるよう、クラウドワークス 安心安全宣言の取り組みを進めています!

そんな中、私たちのチームでは、ほぼ初めてのフロントエンドの開発に関わることになりました。 新規での開発ではなく、既存の実装からの更新という形となるのですが、それは古の時代のCoffeeScriptで書かれたものでした。

今回のブログはフロントエンドモダン化までの流れについて書いていこうと思います。

目次

続きを読む

Elasticsearchのバージョンを6.8系から7.5系にアップグレードしました

f:id:t0yohei:20200604122036p:plain

こんにちは、 @t0yohei です。今回は、1つ前のElasticsearchのバージョンを5.6系から6.8系にアップグレードしました のブログに続けて、 Elasticsearch v7.5 系までのアップグレードについて書いていきます。

この記事では、 v6.8 系へのアップグレードの方で書かれていたアップグレードの進め方やタスク管理法には触れず、 v7.5 系へのアップグレードで必要だった対応や課題についてのみ書いていきます。 v6.8 系アップグレード時の進め方がすごくやりやすかったので丸パクリ結果、書くネタがないという。

アップグレード全体に対してや、破壊的変更の一覧については下記の公式ドキュメントをご参照ください(リンク先はこの記事作成時点で最新の v7.7 のドキュメントになっています)。 https://www.elastic.co/guide/en/elasticsearch/reference/7.7/setup-upgrade.html https://www.elastic.co/guide/en/elasticsearch/reference/7.7/breaking-changes.html

目次

  • 目次
  • はじめに
  • タイプレス移行に向けた対応
    • 1. Elasticsearch v6.8 のインスタンスに対して、 include_type_name=true オプションを 付けた 上で index を構築する
    • 2. Elasticsearch v7.5 のインスタンスに対して、 include_type_name=true オプションを 付けた 状態で index を構築する
    • 3. Elasticsearch v7.5 のインスタンスに対して、 include_type_name=true オプションを 外した 状態で index を構築する
  • 対応必要だった breaking changes
    • track_total_hits defaults to 10,000
    • rest_total_hits_as_int
  • 対応した deprecation log
    • random score
  • Elasticsearch アップグレード後に起きた問題とその対応
  • おわりに
  • We are Hiring!!
続きを読む

© 2016 CrowdWorks, Inc., All rights reserved.