Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

会社紹介

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

会社紹介

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

改善前のリリースの状況

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

改善に向けての課題整理

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

まとめ

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

Thank you!