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

スタートアップ企業での散乱した システムリリースフローをととのえる話/Maintain the system release flow

スタートアップ企業での散乱した システムリリースフローをととのえる話/Maintain the system release flow

JAWS DAYS 2021 re:Connect で発表した資料です。
開発者が安心かつスムーズなリリースフローを作り、開発生産性を向上させたいと言う課題感からリリースフロー刷新の取り組んだお話をさせていただきました。

SadayoshiTada

March 20, 2021
Tweet

More Decks by SadayoshiTada

Other Decks in Technology

Transcript

  1. スタートアップ企業での散乱した
    システムリリースフローをととのえる話
    多田 貞剛

    View Slide

  2. 2
    自己紹介
    多⽥ 貞剛 @tada_infra
    株式会社スナックミー
    SRE/CorpEng 担当
    筋トレとサウナが好きです
    JAWS DAYS 初登壇です😌

    View Slide

  3. 会社紹介

    View Slide

  4. 会社紹介
    • おやつ体験 BOX 『snaq.me』
    • ⽉額 1,980円(税込、送料込)
    • 4週 or 2週毎に100種類以上の商品からお客様にパーソナライ
    ズした8種のおやつをお届け

    View Slide

  5. 会社紹介
    おやつ診断、商品リクエスト、商品評価などのデータを取得してお
    届けするのが特⻑

    View Slide

  6. 会社紹介

    View Slide

  7. 本日お話しすること
    1. システムリリースの課題
    2. リリース改善に向けて取り組んだこと
    3. 改善後のリリースフローの紹介

    View Slide

  8. 改善前のリリースの状況

    View Slide

  9. • 弊社のシステムリリースには次のものがある
    • フロントエンド(React)のリリース
    • API(PHP)のリリース
    • 社内システム(Rails/Python)のリリース
    改善前のリリースの状況

    View Slide

  10. • 弊社のシステムリリースには次のものがある
    • フロントエンド(React)のリリース
    • API(PHP)のリリース
    • 上記2つはリリースが仕組み化されてる
    • 社内システム(Rails/Python)のリリース
    • 課題があり本発表も上記リリース改善に関する話
    改善前のリリースの状況

    View Slide

  11. • Rails では社内の在庫や配送などのデータが閲覧できるシス
    テムになっており社内業務の中核を担っている
    • 過去 Capistrano で EC2 1台にデプロイしていたが複数構成
    になって諸々の事情があり、⼿動デプロイを⾏っている
    改善前のリリースの状況

    View Slide

  12. • Rails システムリリースでの課題に感じたこと
    • ⾃動化していたデプロイが⼿動実⾏になっていること
    • 開発者3⼈のオンサイトデプロイ⼯数が発⽣していること
    改善前のリリースの状況

    View Slide

  13. • Lambda 単体もしくは Step Functions を組み合わせて
    Python で開発している
    • AWS SAM を利⽤した開発
    • Rails のシステムから直接実⾏したり、社内オペレーション
    を⾃動化した仕組みを定期実⾏したりしている
    改善前のリリースの状況

    View Slide

  14. • 独⾃スクリプトを実⾏しデプロイスクリプトを作り、
    CodePipeline/CodeBuild によるデプロイ
    • Step Functions は都度作成
    改善前のリリースの状況

    View Slide

  15. • Lambda/Step Functions システムリリースでの課題に感じた
    こと
    • 独⾃ツールのため新規メンバーの学習コストが発⽣した
    • 独⾃スクリプトの実⾏漏れやスクリプトの課題によってデ
    プロイできない事象が発⽣し、業務で必要な Lambda がな
    いことがあった
    • Step Functions がコード化されてないこと
    改善前のリリースの状況

    View Slide

  16. 改善に向けての課題整理

    View Slide

  17. • 2つのリリースプロセスを改善するために開発チームにヒア
    リングを⾏った
    • 現状のリリースプロセスでやっていることや課題に感じて
    いることを確認
    • リリースのタイミングを確認
    改善に向けての課題整理

    View Slide

  18. • Rails のシステムリリースでのヒアリングでわかったこと
    • サーバーにログインし⼿動でコマンドを実⾏を仕組み化し
    たい
    • サーバーごとにコマンドは異なる
    • リリースはマージ後即ではなく、適宜タイミングを⾒計っ
    てリリースする
    改善に向けての課題整理

    View Slide

  19. 改善に向けての課題整理
    • サーバーにログインせずにコマンド実⾏を指定した時間帯に
    実施できるよう改めることにした

    View Slide

  20. • Lambda/Step Functionsリリースのヒアリングでわかったこと
    • 独⾃スクリプトによるデプロイは実⾏漏れやデプロイスクリ
    プトの空振りもあるため⽌めたい
    • リリースの進⾏状況も把握したい
    • Step Functions もコード化したい
    • リリースは対象ブランチにマージされた後にリリースする
    改善に向けての課題整理

    View Slide

  21. • Step Functions のコード化と独⾃スクリプトでのデプロイフ
    ローを⽌めてシンプルな形に整理することにした
    改善に向けての課題整理

    View Slide

  22. リリースフロー改善の実施

    View Slide

  23. • EC2 のリリースの改善
    • Lambda/Step Functions のリリース改善
    • いずれも GitHub Actions を使ったリリースフローに変更
    リリースフロー改善の実施

    View Slide

  24. • GitHub Actions を使った経緯
    • 開発者も別の仕組みでも使っているため
    GitHub Actions に慣れている
    • ⾃分も開発者も扱うツールが少なくなる
    リリースフロー改善の実施

    View Slide

  25. • EC2 のリリースの改善
    • GitHub Actions と Systems Manager によるリリース
    • リリースでやっていたのはシンプルなコマンド実⾏
    • Run Command で実⾏可能であることを確認
    • リリースはタイミングを図って⾏う
    • メンテナンスウィンドウによりスケジュール実⾏
    リリースフロー改善の実施

    View Slide

  26. • Systems Manager エージェントが⼊った
    インスタンスに指定したコマンドを実⾏で
    きる
    • 下記のサービスで期間や⽇時を指定してタ
    スクを実⾏することができる
    • Run Command
    • Automation
    • Lambda
    • Step Functions
    改善後のリリースフロー
    Maintenance windows
    Run command

    View Slide

  27. • 改善に向けて⾏ったアクション
    • リリース時に実⾏しているコマンドを Systems Manager
    ドキュメントにまとめて Run Command 経由で実⾏
    • GitHub Actions でメンテナンスウィンドウでリリースのタ
    イミングを指定し Run Command を設定する
    リリースフロー改善の実施

    View Slide

  28. リリースフロー改善の実施
    • 改善に向けて⾏ったアクション
    • Run Command の実⾏状況は Chatbot 経由で Slack に通知
    してコマンドの実⾏ステータスをわかるようにした
    • EventBridge + SNS + Chatbot で実現

    View Slide

  29. • Lambda/Step Functions のリリースの改善
    • GitHub Actions と AWS SAM によるリリースに変更
    • Step Functions も AWS SAM でコード化
    リリースフロー改善の実施

    View Slide

  30. • Lambda/Step Functions のリリース改善時の課題
    • Lambda のリリースのために差分検出の仕組みが必要
    改善後のリリースフロー

    View Slide

  31. • Lambda/Step Functions のリリース改善時の課題
    • Lambda と Step Functions は同じリポジトリで管理せず、
    別々のリポジトリにした
    • Step Functions で管理する Lambda の ARN を AWS
    SAM が扱えるようにする必要がある
    改善後のリリースフロー

    View Slide

  32. • 設定データや機密情報管理のための階層型ス
    トレージ
    • パラメーターストアに Lambda のARN を格納
    して活⽤
    • AWS SAM の template.yaml で下記の定義
    で指定して取り込む
    • '{{resolve:ssm:HogeFunctionARN:1}}'
    改善後のリリースフロー
    Parameter store

    View Slide

  33. • Lambda/Step Functions のリリース改善時の課題
    • CodePipeline + CodeBuild のデプロイでは感知できなかっ
    た CloudFormation の進⾏状況を SNS + Chatbot を使っ
    て実現した
    • GitHub Actions の処理ステータスも Slack に通知した
    改善後のリリースフロー

    View Slide

  34. リリースフロー改善の実施
    $MPVE'PSNBUJPOͷ࣮ߦεςʔλε (JU)VC"DUJPOT੒ޭ௨஌
    (JU)VC"DUJPOTࣦഊ௨஌

    View Slide

  35. まとめ

    View Slide

  36. まとめ
    • 社内システムに関する EC2/Lambda/Step Functions のリリース
    フロー課題と改善の取り組みをお話しした
    • 改善前に開発者が負担していたタスクを軽減し、シンプルな仕組
    みを整備していくことができた
    • リリースフローの中にテストを組み込み切れてない等課題も残っ
    ているので引き続き開発者と協⼒して効率的な仕組みになるよう
    に進めていく

    View Slide

  37. Thank you!

    View Slide