Slide 1

Slide 1 text

self-hosted runnersで AWSコスト削減? 古屋 啓介 2024年11月15日

Slide 2

Slide 2 text

#kkdevops 自己紹介 2 ● 古屋 啓介 ○ 株式会社kubell SRE部 ○ JAWS-UG SRE支部運営 ○ AWS Community Builder(2023〜) ○ ドラム叩きます

Slide 3

Slide 3 text

2024年7月1日よりChatwork株式会社は、株式会社kubell(読み:クベル)に社名変更しました。 株式会社kubellは、誰もが使いやすく、社外のユーザーとも簡単につながることができる 日本最大級のビジネスチャット「Chatwork」を運営しています。 また、チャット経由で会計、労務、総務など様々なバックオフィス業務をアウトソースできる 「Chatwork アシスタント」などのBPaaSサービスを幅広く展開。 ビジネスチャットの会社から、BPaaSで「働く」を変えるプラットフォームを提供する会社へ事業領域を拡張します。

Slide 4

Slide 4 text

目次 CONTENTS 01 | GitHub Actionsとは 02 | 「Chatwork」における課題 03 | 課題への対処 04 | 結果 05 | まとめ

Slide 5

Slide 5 text

01 | GitHub Actionsとは

Slide 6

Slide 6 text

#kkdevops アイスブレイク 6 GitHub Actions(yaml)、書いたことがあるひと?

Slide 7

Slide 7 text

#kkdevops (改めて)GitHub Actionsとは 7 GitHub Actions は、ビルド、テスト、デプロイのパイプラインを自動化できる 継続的インテグレーションと継続的デリバリー (CI/CD) のプラットフォームです。 リポジトリに対するすべての pull request をビルドしてテストしたり、マージされ た pull request を運用環境にデプロイしたりするワークフローを作成できます。 GitHub Actions は、DevOps であるだけでなく、(略 https://docs.github.com/ja/actions/about-github-actions/understanding-github-actions

Slide 8

Slide 8 text

#kkdevops (改めて)GitHub Actionsとは 8 GitHub Actions は、ビルド、テスト、デプロイのパイプラインを自動化できる 継続的インテグレーションと継続的デリバリー (CI/CD) のプラットフォームです。 リポジトリに対するすべての pull request をビルドしてテストしたり、マージされ た pull request を運用環境にデプロイしたりするワークフローを作成できます。 GitHub Actions は、DevOps であるだけでなく、(略 https://docs.github.com/ja/actions/about-github-actions/understanding-github-actions よかった、テーマに沿ってた...

Slide 9

Slide 9 text

#kkdevops GitHub Actionsの利用シーン 9 ● CI ○ 静的解析 ■ lintとかpolicy checkとか ○ アプリケーションのビルド ■ コンテナのbuild & pushとか ○ テスト ■ E2Eとか ● CD ○ デプロイ ■ aws deployとかkubectl applyとか

Slide 10

Slide 10 text

#kkdevops 「Chatwork」におけるGitHub Actionsの利用シーン 10 開発者 Application Manifest (helmfile) Charts ECR EKS Push Build & Test Update Push kubectl apply Sync CI Reconciliation Loop

Slide 11

Slide 11 text

#kkdevops 小ネタ: repository_dispatchの活用 11 ● そんなときはrepository_dispatch ○ 外部からGitHub Actionsを呼び出せるAPI ○ 認証したうえでRESTで叩く ○ 諸々の情報も渡せる ビルドとコンテナイメージのpush終わったら k8sマニフェストリポジトリのファイルを 自動で更新したい

Slide 12

Slide 12 text

02 | 「Chatwork」における課題

Slide 13

Slide 13 text

#kkdevops 課題: Amazon Elastic Container Registryの料金が高い!!! 13

Slide 14

Slide 14 text

#kkdevops え、なんでECR? 14 開発者 Application Manifest (helmfile) Charts ECR EKS Push Build & Test Update Push kubectl apply Sync CI Reconciliation Loop ● 要因 ○ 実はテストんときにECRからイメージをPullしなおしている Pull

Slide 15

Slide 15 text

#kkdevops Pullしなおしているということは 15 ● ECRの料金体系 https://aws.amazon.com/jp/ecr/pricing/

Slide 16

Slide 16 text

#kkdevops Pullしなおしているということは 16 ● ECRの料金体系 https://aws.amazon.com/jp/ecr/pricing/ CIを回すほど(=開発が活発になるほど) ECRのPull料金が増える!!!

Slide 17

Slide 17 text

03 | 課題への対処

Slide 18

Slide 18 text

#kkdevops ECRの料金の特徴 18 ● ECRの料金体系 https://aws.amazon.com/jp/ecr/pricing/

Slide 19

Slide 19 text

#kkdevops ECRの料金の特徴 19 ● ECRの料金体系 https://aws.amazon.com/jp/ecr/pricing/ 同じリージョン内であれば無料!

Slide 20

Slide 20 text

#kkdevops そこで思うこと 20 AWS(東京リージョン)で GitHub Actionsが動けばいいのに...

Slide 21

Slide 21 text

#kkdevops そんなアナタに 21 self-hosted runners!!!

Slide 22

Slide 22 text

#kkdevops self-hosted runnersとは 22 A self-hosted runner is a system that you deploy and manage to execute jobs from GitHub Actions on GitHub. (中略) Self-hosted runners can be physical, virtual, in a container, on-premises, or in a cloud. https://docs.github.com/ja/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners

Slide 23

Slide 23 text

#kkdevops self-hosted runnersとは 23 A self-hosted runner is a system that you deploy and manage to execute jobs from GitHub Actions on GitHub. (中略) Self-hosted runners can be physical, virtual, in a container, on-premises, or in a cloud. https://docs.github.com/ja/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners

Slide 24

Slide 24 text

#kkdevops つまり 24 ● AWS内のコンピュートリソースを使ってActionsを実行できる ○ EC2 ○ Fargate ○ CodeBuild

Slide 25

Slide 25 text

#kkdevops 「Chatwork」の場合 25 ● EKS(Kubernetes)のpodとしてrunnerを動かしたい ○ 主要なアプリケーションはすべてEKSで稼働している ○ このためだけにEC2とかたてるのはイマイチ 開発者 Application ECR EKS Push Build & Test Push Pull

Slide 26

Slide 26 text

#kkdevops そんなアナタに(2) 26 Actions Runner Controller (ARC)!!!

Slide 27

Slide 27 text

#kkdevops Actions Runner Controllerとは 27 Actions Runner Controller (ARC) is a Kubernetes operator that orchestrates and scales self-hosted runners for GitHub Actions. With ARC, you can create runner scale sets that automatically scale based on the number of workflows running in your repository, organization, or enterprise. https://github.com/actions/actions-runner-controller

Slide 28

Slide 28 text

#kkdevops よーするに 28 ● self-hosted runnersをKubernetes上でいい感じに動かしてくれるやつ ○ Kubernetes Operatorとして提供 ○ いい感じにrunnerをスケールしてくれたりする

Slide 29

Slide 29 text

#kkdevops コラム: ARCの出自 29 ● もともとOSSだったのをGitHubが取り込んでくれた! ○ @summerwind さんによって誕生 ○ その後 @mumoshu さんらによって開発・メンテ ○ OSSとして開発してたらGitHub側がメンテしてくれることに! https://github.com/actions/actions-runner-controller/discussions/2072

Slide 30

Slide 30 text

#kkdevops ● ARCおよびrunnerをEKSにデプロイする ○ 詳しくは公式ドキュメントを! ● runnerをGitHubに登録する ○ 詳しくは(ry ● yaml側のruns-onでrunnerを指定する ○ 実はARC自体はずっと前から動いていたので今回やった対応はここだけ ○ こんな感じ 設定 30

Slide 31

Slide 31 text

04 | 結果

Slide 32

Slide 32 text

#kkdevops ECRの料金、減る!!! 32

Slide 33

Slide 33 text

#kkdevops ただ別の問題が... 33 ● リソース不足なのか何なのか、原因不明なエラーや停止が発生...

Slide 34

Slide 34 text

#kkdevops ただ別の問題が... 34 ● リソース不足なのか何なのか、原因不明なエラーや停止が発生... 泣く泣く戻すことに

Slide 35

Slide 35 text

#kkdevops 実際お得なの? 35 ● 減るの ○ ECRの通信費用 ○ GitHub Actionsの料金 ● 増えるの ○ EC2の料金 たーぶん安くなってるはず (他のEC2とかの料金と混ざっちゃうので計算むずい)

Slide 36

Slide 36 text

05 | まとめ

Slide 37

Slide 37 text

#kkdevops self-hosted runnersでAWSコスト削減? 37 ● 通信コスト、というGitHub Actions利用時の意外な落とし穴 ○ もちろん基本的にはめちゃくちゃ便利 ● ワークロードに近いところでGitHub Actionsを実行することで解決 ○ self-hosted runnersやActions Runner Controllerを活用 ● こんな方法でもコスト削減ができるよ、という一例

Slide 38

Slide 38 text

働くをもっと楽しく、創造的に