Slide 1

Slide 1 text

インフラの は に任せた 株式会社クオリティア 平野美賢 GitHub Actionsを使ったインフラの自動構築とパラメータ管理

Slide 2

Slide 2 text

自己紹介 • Name: 平野美賢 (Mihyon Lee Hirano) • Company: 株式会社クオリティア • Role: SRE/Ops • Title: IT Specialist Leader • Likes: 宝塚歌劇、高校野球 • Language: Shell, Python 最近は Yaml 職人 • Twitter: @mihyon

Slide 3

Slide 3 text

目次 • GitHub Actions をCI/CDに導入するまで • GitHub Actions の採用 • CI/CDへの道のり • 完成したCI/CD • 今後の課題 • 公開資料

Slide 4

Slide 4 text

を に 導入するまで

Slide 5

Slide 5 text

当初のTEAM構成 • 2017年に新サービスの企画や研究開発を目的に発足 • Product Owner かつ Tech Lead 1名 • Full Stack Engineer 1名 • 自然言語処理専門 Data Scientist 1名 • Frontend Engineer 1名 • SRE/Ops, Scrum Master/Management 1名(私) • 5名の少人数チームでやや開発より

Slide 6

Slide 6 text

開発体制 • 開発方式 - Agile, Scrum - DevOps, CI/CD ・インフラ - AWS - Microsoft Azure - Vultr, さくら etc • 12 factor app 準拠 https://12factor.net/ja/

Slide 7

Slide 7 text

問題点・要件① • インフラを手動で触りたくない。Infra as a Code したい。 • プログラマはインフラを一度作ったら忘れてしまう。 • パラメータをExcelで管理したくない(重要) • これらを解決するために、AWS CodePipeline、CodeDeployなど使ってみたが、限界を感じ る(Multi Cloudに使えない等)

Slide 8

Slide 8 text

問題点・要件② • 開発環境と本番が別々だが、同じものをDeployしたい(Build Once) • 開発環境でテストされたものを本番にDeployしたい • パラメータはソースコードと別のところに、環境毎に保存・管理したい

Slide 9

Slide 9 text

GitHub Actionsの登場と採用 • その時、GitHub Actionsがリリース (2019年) • GitHub Actions : “開発ワークフローをリポジトリの中で自動化し、カスタマイズし、実行” するもの • https://docs.github.com/ja/actions • すでにGitHubを使っているので、導入しやい • 説明聞いたら使いやすそう • 無料

Slide 10

Slide 10 text

への道のり

Slide 11

Slide 11 text

問題点・要件①はすぐ解決 • インフラを手動で触りたくない。Infra as a Code したい。 ✅ • プログラマはインフラを一度作ったら忘れてしまう。 ✅ • パラメータをExcelで管理したくない(重要) ✅ • これらを解決するために、AWS CodePipeline、CodeDeployなど使ってみたが、限界を感じ る(Multi Cloudに使えない等) ✅

Slide 12

Slide 12 text

問題点・要件② • 開発環境と本番が別々だが、同じものをDeployしたい(Build Once) • 開発環境でテストされたものを本番にDeployしたい • パラメータはソースコードと別のところに、環境毎に保存・管理したい これだけではない。さらに

Slide 13

Slide 13 text

問題点・要件③ • 開発環境と本番環境ではパラメータが異なる • 開発環境でパラメータを変えたら開発環境だけDeployしたい • パラメータは各環境毎に管理し、それぞれ履歴に残したい

Slide 14

Slide 14 text

解決策 • Build と Deploy の2段階に分ける • そのために、Repository を ソースコードとパラメータの2つに分ける

Slide 15

Slide 15 text

REPOSITORY の中身 hoge というサービス  hoge-infra  hoge-infra-params インフラのソースコード インフラをDeployするコードと 環境毎のパラメータ

Slide 16

Slide 16 text

hoge-infra Repoの構造 インフラのソースコード インフラのBuild(CI)

Slide 17

Slide 17 text

hoge-infra-params Repoの構造 インフラソースコードのバージョン インフラのDeploy (CD) 環境毎のパラメータ

Slide 18

Slide 18 text

hoge-infra CI/CD 1 merge to main Unit Test Build Etc... S3 Store Package Version Parameters Change Package Version Development Environment (Staging) hoge-infra/ vpc.cf.yaml vpc.cf. yaml hoge-infra-params/ vpc/packages/develop.yaml 続く

Slide 19

Slide 19 text

hoge-infra CI/CD 2 S3 Store Package Version Parameters Version Development Environment (Staging) Package Version Parameters Change Package Version Production Environment hoge-infra-params/ vpc/packages/prod.yaml hoge-infra-params/ vpc/packages/develop.yaml 前のページ から続く

Slide 20

Slide 20 text

hoge-infra workflow 1

Slide 21

Slide 21 text

hoge-infra workflow 2

Slide 22

Slide 22 text

問題点・要件②が解決 • 開発環境と本番が別々だが、同じものをDeployしたい(Build Once) ✅ • 開発環境でテストされたものを本番にDeployしたい ✅ • パラメータはソースコードと別のところに、環境毎に保存・管理したい✅

Slide 23

Slide 23 text

問題点・要件③ • 開発環境と本番環境ではパラメータが異なる • 開発環境でパラメータを変えたら開発環境だけDeployしたい • パラメータは各環境毎に管理し、それぞれ履歴に残したい

Slide 24

Slide 24 text

解決策 hoge というサービス  hoge-infra  hoge-infra-params 環境毎のパラメーターファイルをそ れぞれ格納してDeployさせる インフラのソースコード インフラのソースコード 環境毎のパラメータファイルを それぞれ格納してDeployさせる

Slide 25

Slide 25 text

hoge-infra-params Repoの構造 インフラソースコードのバージョン インフラのDeploy (CD) 環境毎のパラメータ

Slide 26

Slide 26 text

パラメータの例 • Develop/prodで比較する EC2 develop.yaml (開発環境) EC2 prod.yaml (本番環境)

Slide 27

Slide 27 text

Deploy parameters to develop merge to main Unit Test Build Etc... S3 Change Parameters Store Package Version Parameters Change Package Version Development Environment (Staging) hoge-infra-params/ ec2/parameters/develop.yaml

Slide 28

Slide 28 text

Deploy parameters to prod merge to main Unit Test Build Etc... S3 Change Parameters Store Package Version Parameters Change Package Version Production Environment hoge-infra-params/ ec2/parameters/prod.yaml

Slide 29

Slide 29 text

hoge-infra-params workflow 1

Slide 30

Slide 30 text

hoge-infra-params workflow 2

Slide 31

Slide 31 text

問題点・要件③の解決 • 開発環境と本番環境ではパラメータが異なる ✅ • 開発環境でパラメータを変えたら開発環境だけDeployしたい ✅ • パラメータは各環境毎に管理し、それぞれ履歴に残したい ✅

Slide 32

Slide 32 text

完成した

Slide 33

Slide 33 text

CI and Deploy to Develop merge to main Unit Test Build Etc... S3 Change Parameters Store Package Version Parameters Docker-Compose etc... Change Package Version Development Environment (Staging) インフラの ソースコード インフラの パラメータ (開発環境)

Slide 34

Slide 34 text

Deploy to Prod S3 ECR Registry rs Store Store Package Version Parameters Docker-Compose etc... Version Development Environment (Staging) Change Parameters Package Version Parameters Docker-Compose etc... Change Package Version Production Environment インフラの パラメータ (本番環境)

Slide 35

Slide 35 text

AZ #A AZ #C AZ #A AZ #C AZ #B AZ #C Azure Tokyo Canary Release Develop Prod #2 (Servers) Servers Servers Tokyo Servers Servers Singapore Servers Servers San Francisco Prod #1 (Servers) Servers Servers Tokyo AZ #A AZ #C Servers Servers Singapore AZ #A AZ #C Servers Servers Frankfurt AZ #A AZ #C Release 1 Release 2 Release 3 Release 4 Approve Approve Approve Approve GitHub Actions Push

Slide 36

Slide 36 text

今後の課題 • Repositoryが2つなのでActionsが2回実行され、時間がかかると感じる • 従来のOpsとしては、パラメータをまとめて一元管理したくなる • これがベストプラクティスかは断言できない • モノレポに戻りたい時もある

Slide 37

Slide 37 text

公開資料 • 本スライド: https://speakerdeck.com/mihyon • Blog : https://qiita.com/qualitia_cdev

Slide 38

Slide 38 text

ご静聴ありがとうございました。