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 で発表した資料です。
開発者が安心かつスムーズなリリースフローを作り、開発生産性を向上させたいと言う課題感からリリースフロー刷新の取り組んだお話をさせていただきました。

3f848c0c0b9a6603894e157da93e4655?s=128

SadayoshiTada

March 20, 2021
Tweet

Transcript

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

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

    DAYS 初登壇です😌
  3. 会社紹介

  4. 会社紹介 • おやつ体験 BOX 『snaq.me』 • ⽉額 1,980円(税込、送料込) • 4週

    or 2週毎に100種類以上の商品からお客様にパーソナライ ズした8種のおやつをお届け
  5. 会社紹介 おやつ診断、商品リクエスト、商品評価などのデータを取得してお 届けするのが特⻑

  6. 会社紹介

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

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

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

  10. • 弊社のシステムリリースには次のものがある • フロントエンド(React)のリリース • API(PHP)のリリース • 上記2つはリリースが仕組み化されてる • 社内システム(Rails/Python)のリリース

    • 課題があり本発表も上記リリース改善に関する話 改善前のリリースの状況
  11. • Rails では社内の在庫や配送などのデータが閲覧できるシス テムになっており社内業務の中核を担っている • 過去 Capistrano で EC2 1台にデプロイしていたが複数構成

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

  13. • Lambda 単体もしくは Step Functions を組み合わせて Python で開発している • AWS

    SAM を利⽤した開発 • Rails のシステムから直接実⾏したり、社内オペレーション を⾃動化した仕組みを定期実⾏したりしている 改善前のリリースの状況
  14. • 独⾃スクリプトを実⾏しデプロイスクリプトを作り、 CodePipeline/CodeBuild によるデプロイ • Step Functions は都度作成 改善前のリリースの状況

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

    Lambda がな いことがあった • Step Functions がコード化されてないこと 改善前のリリースの状況
  16. 改善に向けての課題整理

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

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

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

  20. • Lambda/Step Functionsリリースのヒアリングでわかったこと • 独⾃スクリプトによるデプロイは実⾏漏れやデプロイスクリ プトの空振りもあるため⽌めたい • リリースの進⾏状況も把握したい • Step

    Functions もコード化したい • リリースは対象ブランチにマージされた後にリリースする 改善に向けての課題整理
  21. • Step Functions のコード化と独⾃スクリプトでのデプロイフ ローを⽌めてシンプルな形に整理することにした 改善に向けての課題整理

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

  23. • EC2 のリリースの改善 • Lambda/Step Functions のリリース改善 • いずれも GitHub

    Actions を使ったリリースフローに変更 リリースフロー改善の実施
  24. • GitHub Actions を使った経緯 • 開発者も別の仕組みでも使っているため GitHub Actions に慣れている •

    ⾃分も開発者も扱うツールが少なくなる リリースフロー改善の実施
  25. • EC2 のリリースの改善 • GitHub Actions と Systems Manager によるリリース

    • リリースでやっていたのはシンプルなコマンド実⾏ • Run Command で実⾏可能であることを確認 • リリースはタイミングを図って⾏う • メンテナンスウィンドウによりスケジュール実⾏ リリースフロー改善の実施
  26. • Systems Manager エージェントが⼊った インスタンスに指定したコマンドを実⾏で きる • 下記のサービスで期間や⽇時を指定してタ スクを実⾏することができる •

    Run Command • Automation • Lambda • Step Functions 改善後のリリースフロー Maintenance windows Run command
  27. • 改善に向けて⾏ったアクション • リリース時に実⾏しているコマンドを Systems Manager ドキュメントにまとめて Run Command 経由で実⾏

    • GitHub Actions でメンテナンスウィンドウでリリースのタ イミングを指定し Run Command を設定する リリースフロー改善の実施
  28. リリースフロー改善の実施 • 改善に向けて⾏ったアクション • Run Command の実⾏状況は Chatbot 経由で Slack

    に通知 してコマンドの実⾏ステータスをわかるようにした • EventBridge + SNS + Chatbot で実現
  29. • Lambda/Step Functions のリリースの改善 • GitHub Actions と AWS SAM

    によるリリースに変更 • Step Functions も AWS SAM でコード化 リリースフロー改善の実施
  30. • Lambda/Step Functions のリリース改善時の課題 • Lambda のリリースのために差分検出の仕組みが必要 改善後のリリースフロー

  31. • Lambda/Step Functions のリリース改善時の課題 • Lambda と Step Functions は同じリポジトリで管理せず、

    別々のリポジトリにした • Step Functions で管理する Lambda の ARN を AWS SAM が扱えるようにする必要がある 改善後のリリースフロー
  32. • 設定データや機密情報管理のための階層型ス トレージ • パラメーターストアに Lambda のARN を格納 して活⽤ •

    AWS SAM の template.yaml で下記の定義 で指定して取り込む • '{{resolve:ssm:HogeFunctionARN:1}}' 改善後のリリースフロー Parameter store
  33. • Lambda/Step Functions のリリース改善時の課題 • CodePipeline + CodeBuild のデプロイでは感知できなかっ た

    CloudFormation の進⾏状況を SNS + Chatbot を使っ て実現した • GitHub Actions の処理ステータスも Slack に通知した 改善後のリリースフロー
  34. リリースフロー改善の実施 $MPVE'PSNBUJPOͷ࣮ߦεςʔλε (JU)VC"DUJPOT੒ޭ௨஌ (JU)VC"DUJPOTࣦഊ௨஌

  35. まとめ

  36. まとめ • 社内システムに関する EC2/Lambda/Step Functions のリリース フロー課題と改善の取り組みをお話しした • 改善前に開発者が負担していたタスクを軽減し、シンプルな仕組 みを整備していくことができた

    • リリースフローの中にテストを組み込み切れてない等課題も残っ ているので引き続き開発者と協⼒して効率的な仕組みになるよう に進めていく
  37. Thank you!