JAWS DAYS 2021 re:Connect で発表した資料です。 開発者が安心かつスムーズなリリースフローを作り、開発生産性を向上させたいと言う課題感からリリースフロー刷新の取り組んだお話をさせていただきました。
スタートアップ企業での散乱したシステムリリースフローをととのえる話多田 貞剛
View Slide
2自己紹介多⽥ 貞剛 @tada_infra株式会社スナックミーSRE/CorpEng 担当筋トレとサウナが好きですJAWS DAYS 初登壇です😌
会社紹介
会社紹介• おやつ体験 BOX 『snaq.me』• ⽉額 1,980円(税込、送料込)• 4週 or 2週毎に100種類以上の商品からお客様にパーソナライズした8種のおやつをお届け
会社紹介おやつ診断、商品リクエスト、商品評価などのデータを取得してお届けするのが特⻑
本日お話しすること1. システムリリースの課題2. リリース改善に向けて取り組んだこと3. 改善後のリリースフローの紹介
改善前のリリースの状況
• 弊社のシステムリリースには次のものがある• フロントエンド(React)のリリース• API(PHP)のリリース• 社内システム(Rails/Python)のリリース改善前のリリースの状況
• 弊社のシステムリリースには次のものがある• フロントエンド(React)のリリース• API(PHP)のリリース• 上記2つはリリースが仕組み化されてる• 社内システム(Rails/Python)のリリース• 課題があり本発表も上記リリース改善に関する話改善前のリリースの状況
• Rails では社内の在庫や配送などのデータが閲覧できるシステムになっており社内業務の中核を担っている• 過去 Capistrano で EC2 1台にデプロイしていたが複数構成になって諸々の事情があり、⼿動デプロイを⾏っている改善前のリリースの状況
• Rails システムリリースでの課題に感じたこと• ⾃動化していたデプロイが⼿動実⾏になっていること• 開発者3⼈のオンサイトデプロイ⼯数が発⽣していること改善前のリリースの状況
• Lambda 単体もしくは Step Functions を組み合わせてPython で開発している• AWS SAM を利⽤した開発• Rails のシステムから直接実⾏したり、社内オペレーションを⾃動化した仕組みを定期実⾏したりしている改善前のリリースの状況
• 独⾃スクリプトを実⾏しデプロイスクリプトを作り、CodePipeline/CodeBuild によるデプロイ• Step Functions は都度作成改善前のリリースの状況
• Lambda/Step Functions システムリリースでの課題に感じたこと• 独⾃ツールのため新規メンバーの学習コストが発⽣した• 独⾃スクリプトの実⾏漏れやスクリプトの課題によってデプロイできない事象が発⽣し、業務で必要な Lambda がないことがあった• Step Functions がコード化されてないこと改善前のリリースの状況
改善に向けての課題整理
• 2つのリリースプロセスを改善するために開発チームにヒアリングを⾏った• 現状のリリースプロセスでやっていることや課題に感じていることを確認• リリースのタイミングを確認改善に向けての課題整理
• Rails のシステムリリースでのヒアリングでわかったこと• サーバーにログインし⼿動でコマンドを実⾏を仕組み化したい• サーバーごとにコマンドは異なる• リリースはマージ後即ではなく、適宜タイミングを⾒計ってリリースする改善に向けての課題整理
改善に向けての課題整理• サーバーにログインせずにコマンド実⾏を指定した時間帯に実施できるよう改めることにした
• Lambda/Step Functionsリリースのヒアリングでわかったこと• 独⾃スクリプトによるデプロイは実⾏漏れやデプロイスクリプトの空振りもあるため⽌めたい• リリースの進⾏状況も把握したい• Step Functions もコード化したい• リリースは対象ブランチにマージされた後にリリースする改善に向けての課題整理
• Step Functions のコード化と独⾃スクリプトでのデプロイフローを⽌めてシンプルな形に整理することにした改善に向けての課題整理
リリースフロー改善の実施
• EC2 のリリースの改善• Lambda/Step Functions のリリース改善• いずれも GitHub Actions を使ったリリースフローに変更リリースフロー改善の実施
• GitHub Actions を使った経緯• 開発者も別の仕組みでも使っているためGitHub Actions に慣れている• ⾃分も開発者も扱うツールが少なくなるリリースフロー改善の実施
• EC2 のリリースの改善• GitHub Actions と Systems Manager によるリリース• リリースでやっていたのはシンプルなコマンド実⾏• Run Command で実⾏可能であることを確認• リリースはタイミングを図って⾏う• メンテナンスウィンドウによりスケジュール実⾏リリースフロー改善の実施
• Systems Manager エージェントが⼊ったインスタンスに指定したコマンドを実⾏できる• 下記のサービスで期間や⽇時を指定してタスクを実⾏することができる• Run Command• Automation• Lambda• Step Functions改善後のリリースフローMaintenance windowsRun command
• 改善に向けて⾏ったアクション• リリース時に実⾏しているコマンドを Systems Managerドキュメントにまとめて Run Command 経由で実⾏• GitHub Actions でメンテナンスウィンドウでリリースのタイミングを指定し Run Command を設定するリリースフロー改善の実施
リリースフロー改善の実施• 改善に向けて⾏ったアクション• Run Command の実⾏状況は Chatbot 経由で Slack に通知してコマンドの実⾏ステータスをわかるようにした• EventBridge + SNS + Chatbot で実現
• Lambda/Step Functions のリリースの改善• GitHub Actions と AWS SAM によるリリースに変更• Step Functions も AWS SAM でコード化リリースフロー改善の実施
• Lambda/Step Functions のリリース改善時の課題• Lambda のリリースのために差分検出の仕組みが必要改善後のリリースフロー
• Lambda/Step Functions のリリース改善時の課題• Lambda と Step Functions は同じリポジトリで管理せず、別々のリポジトリにした• Step Functions で管理する Lambda の ARN を AWSSAM が扱えるようにする必要がある改善後のリリースフロー
• 設定データや機密情報管理のための階層型ストレージ• パラメーターストアに Lambda のARN を格納して活⽤• AWS SAM の template.yaml で下記の定義で指定して取り込む• '{{resolve:ssm:HogeFunctionARN:1}}'改善後のリリースフローParameter store
• Lambda/Step Functions のリリース改善時の課題• CodePipeline + CodeBuild のデプロイでは感知できなかった CloudFormation の進⾏状況を SNS + Chatbot を使って実現した• GitHub Actions の処理ステータスも Slack に通知した改善後のリリースフロー
リリースフロー改善の実施$MPVE'PSNBUJPOͷ࣮ߦεςʔλε (JU)VC"DUJPOTޭ௨(JU)VC"DUJPOTࣦഊ௨
まとめ
まとめ• 社内システムに関する EC2/Lambda/Step Functions のリリースフロー課題と改善の取り組みをお話しした• 改善前に開発者が負担していたタスクを軽減し、シンプルな仕組みを整備していくことができた• リリースフローの中にテストを組み込み切れてない等課題も残っているので引き続き開発者と協⼒して効率的な仕組みになるように進めていく
Thank you!