Upgrade to Pro — share decks privately, control downloads, hide ads and more …

mysqlコマンドを実行したいだけなのに 〜AWS Step Functionsと歩んだ脱Je...

mysqlコマンドを実行したいだけなのに 〜AWS Step Functionsと歩んだ脱Jenkinsへの道〜 / I want to execute the mysql command ~The path to leaving Jenkins with AWS Step Functions~

この発表は、JenkinsからAWS Step Functionsへのバッチ処理移行について解説します。
レガシーなmysqlコマンドの実行をクラウドネイティブ化する工夫を紹介。
Jenkins運用で直面した課題と、脱却に至った経緯を説明します。

2025/07/09 JAWS-UG千葉支部 x 彩の国埼玉支部 LTバトル形式勉強会 〜目黒より愛をこめて〜 での発表資料

Avatar for Takashi Yamaguchi

Takashi Yamaguchi

July 23, 2025
Tweet

More Decks by Takashi Yamaguchi

Other Decks in Technology

Transcript

  1. 2 © SMS Co., Ltd. エレベーターピッチ 「たったひとつのmysqlコマンド」Jenkinsで使われていたバッチ をクラウドネイティブにしたいという一つの願い。 しかし、立ちはだかる見えない「制約」の壁。 新しいStep

    Functionsという新天地へ踏み出すにも、 既存のリソース、限られた時間、そして技術的な困難が重くのしか かる。 「無理だ」誰もがそう思った。しかし、彼らは諦めなかった。 これは、制約に挑み、不可能を可能にしたエンジニアたちの熱き物 語である。 X 千葉じぇクト
  2. 3 © SMS Co., Ltd. 自己紹介 氏名:山口隆史(やまぐちたかし) 所属:株式会社エス・エム・エス    プロダクト推進本部 技術推進グループ 業務:全社SREとしての活動

    略歴:フリーランス、SIer、Web系を渡り歩く→現職(2024/05〜) 自称:Security Hub芸人 好きなAWSサービス:営業、Security Hub、GuardDuty 他:AWS Community Builder(Security & Identity)、   JAWS-UG千葉支部運営、Snyk Ambassador 第022587号
  3. 5 © SMS Co., Ltd. 会社概要
 *1:第7期迄は単体数値、第8期より連結数値にて記載 
 基礎情報
 株式会社エス・エム・エス(英語表記)SMS

    Co., Ltd. 
 2003年 4月4日 
 東京証券取引所プライム市場(証券コード:2175) 
 25億5,172万円(2025年3月31日時点) 
 連結:4,528人、単体:3,049人(2025年3月31日時点) 
 国内:4社、海外:アジア・オセアニア等16の国と地域 
 
 「高齢社会に適した情報インフラを構築することで人々の 生活の質を向上し、社会に貢献し続ける」 
 
 高齢社会に求められる領域を、医療・介護/障害福祉・ヘルスケア ・シニアライフと捉え、価値提供先であるエンドユーザ・従事者・事 業者をつなぐプラットフォームとしての情報インフラを構築し、40以 上のサービスを展開 
 会社名 
 設立
 市場情報 
 資本金 
 従業員数 
 関連会社 
 
 ミッション 
 業績
 売上推移 *1
 (売上高・億円) 
 社会課題の解決につながる事業を
 創造・拡大し、継続的に成長

  4. 6 © SMS Co., Ltd. 分野
 区分
 サービス
 キャリア 


    介護キャリア 
 
 
 医療キャリア 
 
 介護・障害福祉 事業者 
 
 
 ヘルスケア 
 
 
 
 
 
 
 シニアライフ 
 
 
 海外
 
 
 *1.柔道整復師、あん摩マッサージ師、はり師、きゅう師のこと 
 サービス一覧 
 看護師向け 
 人材紹介 
 介護・医療・福祉の 
 資格講座情報 
 PT/OT/ST向け
 人材紹介 
 介護職向け求人情報 
 ケアマネジャー向け
 人材紹介 
 看護学生向け 
 就職情報 
 放射線技師向け 
 人材紹介 
 高校生・看護学生 
 向け奨学金情報 
 臨床検査技師向け 
 人材紹介 
 看護師・看護学生向け 
 コミュニティ 
 臨床工学技士向け 
 人材紹介 
 保育士向け 
 人材紹介 
 治療家*1・セラピスト向け
 人材紹介 
 介護事業の 
 経営者・管理者向け情報 
 高齢社会の 
 調査・研究・情報発信 
 医療従事者向け医薬情報 
 治療家*1・セラピスト向け求 人情報 
 柔道整復師・あはき師
 向け受験参考書 
 管理栄養士・栄養士向け 
 人材紹介 
 介護職向け人材紹介 
 介護で働く人の
 ためのスクール 
 介護で悩む人向け
 コミュニティ
 高齢者向け
 食事宅配紹介
 高齢者向け
 住宅紹介 
 遠隔指導特定保健指導 
 サービス 
 管理栄養士・栄養士向け 
 コミュニティ 
 企業の介護離職 
 防止ソリューション 
 ICTを活用した 
 禁煙サポート 
 認知症患者とその家族
 向け認知症情報 
 認知症予防
 ソリューション 
 認知症予防の 
 習慣化サポート 
 遠隔指導重症化予防 サービス 
 女性の健康経営
 サポート 
 産業保健に
 関わる人向け情報 
 企業の健康管理 
 業務サポート 
 リフォーム会社
 紹介
 葬儀社紹介 
 ケアマネジャー 
 向けコミュニティ 
 医療従事者向け人材紹介 
 (マレーシア、フィリピン、アイルランド、UK、ドイツ等) 
 看護師向け
 キャリアサービス 
 行動療法に特化した
 禁煙サポート
 自治体向け調査・
 計画策定・予防事業
 医療介護業界特化型
 ストレスチェック
 介護/障害福祉
 事業者向け経営支援
 
 看護師の職場を 診断するツール 
 障害のある方向け
 就労支援事業所情報
 障害のある方向け
 人材紹介
 建設業界向け
 人材紹介

  5. 8 © SMS Co., Ltd. 01 02 03 04 05

    06 今回のシステムの説明 なぜJenkinsから脱却したい流れになったか 実行していたバッチ処理の概要 rakeコマンドを実行しているバッチの移行 mysqlコマンドをどうするか まとめ 目次
  6. 9 © SMS Co., Ltd. 01 02 03 04 05

    06 今回のシステムの説明 なぜJenkinsから脱却したい流れになったか 実行していたバッチ処理の概要 rakeコマンドを実行しているバッチの移行 mysqlコマンドをどうするか まとめ 目次
  7. 10 © SMS Co., Ltd. 今回の対象システム • 看護学生向け就職情報「ナース専科」 就職 ◦

    病院検索や説明会・インターンシップ・採用試験申込み、 無料適職診断など、就職活動に役立つ情報を提供していま す。オンライン就活ゼミや合同就職フェアも実施しキャリ ア形成を支援しています。看護学生向けの求人サービスで す。
  8. 11 © SMS Co., Ltd. システムの特徴 • Ruby on Railsのモノリス

    • オンライン系はECS on Fargateでコンテナ化済み • バッチ系はEC2(Jenkins)で稼働 ◦ こちらもRails ◦ 最新ソースの反映はGitHubからのwebhookで実現(ブラ ンチ指定) ◦ Sidekiq等は使用していない • デプロイ周りはCodeシリーズを使用
  9. 13 © SMS Co., Ltd. 01 02 03 04 05

    06 今回のシステムの説明 なぜJenkinsから脱却したい流れになったか 実行していたバッチ処理の概要 rakeコマンドを実行しているバッチの移行 mysqlコマンドをどうするか まとめ 目次
  10. 14 © SMS Co., Ltd. 現状のリリースフロー • ブランチ ◦ Prd、Staging

    • デプロイ ◦ PrdへのマージでProductionへデプロイ ◦ StagingへのマージでStagingへデプロイ • リリース ◦ デプロイ=リリース • image tag ◦ latest運用
  11. 15 © SMS Co., Ltd. 現状のリリースフローの課題 • マージ、デプロイ、リリースが別れていない ◦ デプロイ=リリースなので先行開発ができない

    • latest運用なのでロールバックできない ◦ 何かトラブルがあってロールバックする場合はデプロイし なおさないといけない ◦ デプロイし直せばOKという運用の単純さはある
  12. 16 © SMS Co., Ltd. toBEのリリースフロー • マージ、デプロイ、リリースを分ける ◦ Feature

    Flagの導入 ◦ ブランチをmain一本にする ▪ mainへのマージでStaging環境へデプロイ ▪ Tagの発行でProduction環境へデプロイ • image tagをハッシュに変更する ◦ タスク定義を戻せばロールバックできる状態にする
  13. 19 © SMS Co., Ltd. すでに認識していたJenkinsのつらみ • Jenkinsにadd-onが入れるのが大変 ◦ ちょっとしたことで起動しなくなって全体障害に繋がる

    • 運用コストの負担が大きくなってきた ◦ バッチジョブの内容を確認しようとしするとWebUIを確認 しないとわからない ▪ 管理画面へのアクセスに社内VPNが必須 ◦ 何かあったらSSHで入って調査 ◦ EC2のパッチ適用 ◦ 等々
  14. 21 © SMS Co., Ltd. 01 02 03 04 05

    06 今回のシステムの説明 なぜJenkinsから脱却したい流れになったか 実行していたバッチ処理の概要 rakeコマンドを実行しているバッチの移行 mysqlコマンドをどうするか まとめ 目次
  15. 24 © SMS Co., Ltd. 01 02 03 04 05

    06 今回のシステムの説明 なぜJenkinsから脱却したい流れになったか 実行していたバッチ処理の概要 rakeコマンドを実行しているバッチの移行 mysqlコマンドをどうするか まとめ 目次
  16. 25 © SMS Co., Ltd. rakeコマンドを実行しているバッチの移行方針で考えたこと • 実行について ◦ ECS

    run taskが実行できれば問題ない ▪ タスク定義のoverrideができるのでrakeコマンド実行 できる • 既存のimageがそのまま使えそう ◦ 定期実行が主体なので、EventBridge Schedulerは必須 ▪ 直接叩いてもいいかも
  17. 26 © SMS Co., Ltd. rakeコマンドを実行しているバッチの移行方針で考えたこと • エラー制御について ◦ リトライ制御はStep

    Functionsを使った方が制御が楽 ◦ Step Functionsの失敗でよければエラー通知も楽できそう • 通知系 ◦ エラー時はSlack通知したい ◦ EventBridgeで拾えると既存の通知系に載せられる
  18. 36 © SMS Co., Ltd. 移行してみてどうだったか • EventBridge Schedulerの設定を追加するだけでバッチ処理が 移行できるのは控えめに言っても最高

    • 複数コマンドも実行できる • エラー通知がデフォルトだとわかりにくいが、Transformerで 整形したらまともになった
  19. 39 © SMS Co., Ltd. トランスフォーマの定義(出力テンプレート) { "content": { "description":

    "*Status*\n<status>\n\n*Input*\n```<input>```\n\n<https://ap-north east-1.console.aws.amazon.com/states/home#/v2/executions/details/ arn:aws:states:ap-northeast-1:123456789012:execution:stg-batch:< name>|More Details>", "textType": "client-markdown", "title": ":x: `<name>` failed to execute" }, "source": "custom", "version": "1.0" }
  20. 41 © SMS Co., Ltd. 移行中に発生したトラブル集 • 同時刻にバッチ処理多数実行したらECS runTaskのAPIスロッ トリングが発生

    • 対策 ◦ Step Functionsのワークフローにランダムに遅延させる処 理を追加 ◦ ECS runTaskにもリトライ設定を追加 • Jenkinsの場合は、実行時刻設定でHを指定するとジョブ名の ハッシュ値になる仕様があり適宜バラされて実行していた ◦ しかもEC2なのでCPU、MEMの限界まで実行可能だった
  21. 43 © SMS Co., Ltd. 実装 Step Functions EventBridge Scheduler

    のフレックスタ イムウィンドウでも実現可能ですが、Step Functionsに寄せることでTerraformコー ドをシンプルにしたかった
  22. 46 © SMS Co., Ltd. 01 02 03 04 05

    06 今回のシステムの説明 なぜJenkinsから脱却したい流れになったか 実行していたバッチ処理の概要 rakeコマンドを実行しているバッチの移行 mysqlコマンドをどうするか まとめ 目次
  23. 47 © SMS Co., Ltd. mysqlコマンドのバッチ移行で考えたこと • どう実装するか ◦ mysqlコマンド実行のためだけにEC2は立てたくない

    ◦ Lambdaは書きたくない ◦ CloudShellは自動化できない ◦ Fargateだったらなんでもできるな • 移行方針 ◦ Step Functions+ECS Fargate に決定!
  24. 48 © SMS Co., Ltd. mysqlコマンドを実行できるimageを作る(1) • LLMに作ってもらってシュッとできたように見えたが ◦ AmazonLinux2023だとmariadbしかシュッとは入らない

    ◦ user追加しようとしたらuseraddがない ◦ ・・・ ◦ 追加できたけどシークレットに登録されていたのは接続 URLでmysqlコマンドに必要なHOST、USER、PASSWORD がなかった
  25. 50 © SMS Co., Ltd. mysqlコマンドを実行できるimageを作る(3) • 接続URLを分解して環境変数にあげてみる (機密情報を複数持ちたくなかった) ◦

    shを作ってENTRYPOINTに指定してみた ▪ ENTRYPOINTとCMDを両方指定するとエラーになる ▪ CMDがENTRYPOINTの引数として実行されるので、sh の末尾のexec "$@"がないとエラーになる • shの末尾にexec "$@"を追加した
  26. 51 © SMS Co., Ltd. mysqlコマンドを実行できるimageを作る(4) • ecs execでコンテナに入ってみた ◦

    環境変数がセットされない ◦ ENTRYPOINTのプロセスとecs execの親プロセスが違うの でexportしても環境変数が参照できない ▪ 起動時に実行するシェルで /etc/profile.d/dbvars.shに環境変数としてexportする ワンライナーを書いた ログイン後にsourceコマンドや、コマンド実行前にシェル を実行すれば環境変数にセットされますが、バッチ処理で 毎回するのは手間なので、省けるようにこだわりました
  27. 52 © SMS Co., Ltd. mysqlコマンドを実行できるimageを作る(5) • こんどはpermission error ◦

    起動はroot以外のユーザーだったので/etc/profile.dに対す る書き込み権限がなかった ▪ Dockerfileで '. /workspace/eval.sh' > /etc/profile.d/dbvars.sh して/workspace/eval.shを書き換える方針に変更
  28. 57 © SMS Co., Ltd. 01 02 03 04 05

    06 今回のシステムの説明 なぜJenkinsから脱却したい流れになったか 実行していたバッチ処理の概要 rakeコマンドを実行しているバッチの移行 mysqlコマンドをどうするか まとめ 目次
  29. 58 © SMS Co., Ltd. まとめ • AWS Step Functionsは、バッチジョブのクラウドシフトに最

    適なツール • 「mysqlコマンドの実行」のようなレガシーな課題も、工夫次 第でクラウドネイティブに実行可能 • 「the elephant in the room」のような認識しているが、大 きすぎて無視しているような課題も、粘り強く対応すれば解決 の糸口が見つかるかも