Slide 1

Slide 1 text

CloudNative Daysはカンファレンスの システムをどうCI/CDしているのか Kazuto Kusama @jacopen

Slide 2

Slide 2 text

Kazuto Kusama @jacopen Senior Solutions Engineer @HashiCorp Japan Co-Chair @CloudNative Days

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

CloudNative Days 2018年に、Japan Container Daysとしてスタート 2019年からCloudNative Daysという名前に。福岡・東京・関西で開催 2020年からオンライン開催。年1回のCloudNative Daysの他、テーマ特化型 イベントを開催

Slide 5

Slide 5 text

CloudNative Days 国内最大の、クラウドネイティブの祭典 6トラック同時配信、 2日間でおおよそ70セッションという 大規模カンファレンス

Slide 6

Slide 6 text

課題の多い、オンラインカンファレンスのUX 勉強会や小規模カンファレンスの、 1トラックの配信であれば それほど難しくない。 ZoomなりYouTube Liveなりで 垂れ流せば良い では複数トラックだと? 13:00-13:40 Aさんの発表 14:00-14:40 Bさんの発表 15:00-15:40 Cさんの発表

Slide 7

Slide 7 text

課題の多い、オンラインカンファレンスのUX セッションごとに別のYouTube Liveを埋 め込みパターン 視聴者はセッションが終わるごとにリン クをクリックして,次のセッションを 表示する ⇒ とても体験が悪い

Slide 8

Slide 8 text

課題の多い、オンラインカンファレンスのUX トラックごとに別のYouTube Liveを埋め 込みパターン 視聴者は視聴したいセッションが別ト ラックにある場合、リンクをクリックし てトラックを移動する必要がある ⇒ これもあまり体験が良くない もっと簡単な操作で、複数トラックを 渡り歩けるUIであるべき

Slide 9

Slide 9 text

他にも欲しい機能が沢山ある ● スポンサーのロゴを画面に表示したい ○ 既存の仕組みだと、動画側にうまく埋め込む必要がある ● 事前収録・オンライン登壇・会場登壇をうまくミックスしたい ○ OBS等を活用して職人芸でスイッチング作業する ● スポンサーに提供する「リード」を取得したい ○ 参加者の情報をどうやって取得するか。 YouTube Liveではそういった情報は取れない。 ● できればイベントの告知は配信と同じサイトで行いたい ● できればCFPなども同じサイトで募集したい ● などなど

Slide 10

Slide 10 text

以前からモヤモヤしていたこと 2018年のJapan Container Daysや2019年のCloudNative Daysは 会場を借りてのリアル開催。 良いイベントが出来たとは思うが、カンファレンスの運営でクラウドネイ ティブ技術を活用する余地はあまりなかった。 クラウドネイティブ技術を体験 できる参加型コンテンツ 「showKs」などの企画もやった が、あくまでもコンテンツのひと つでしかなかった。

Slide 11

Slide 11 text

以前からモヤモヤしていたこと オンライン開催にあたっては、既存ベンダーのCMSをカスタマイズしてもら う案もあったが、柔軟なカスタマイズは行ってもらえそうになかった。 また、カスタマイズのための要件定義やコミュニケーションもメール経由で しか受け付けてもらえないとのことだった。

Slide 12

Slide 12 text

じゃあどうするか 理想のカンファレンスを実現するには システムを内製するしかない!

Slide 13

Slide 13 text

イベントプラットフォーム「Dreamkast」 CloudNative Daysへの参加申し込みや、 カンファレンスの視聴が行えるWebアプリケーション。 設計のコンセプトは 「大晦日のテレビ感覚で見られるUX」 ・歌合戦 ・笑ってはいけない ・格闘技 ・トークバラエティ ・グルメ ずっと同じ番組を見ても良いし、好きな人が出ていると きだけその番組に切り替える、あるいはチャンネルを回 して面白そうなものを見るという視聴スタイル

Slide 14

Slide 14 text

ワンボタンでトラック切り替え 選択トラックの過去セッション を視聴することも可能 チャットとQ&Aを一体化 視聴中セッションの情報 スポンサーロゴ

Slide 15

Slide 15 text

イベントプラットフォーム「Dreamkast」 イベント告知ページ タイムテーブル イベント参加申込 配信視聴 プロポーザル 応募フォーム スピーカー向け ダッシュボード

Slide 16

Slide 16 text

メンバー 初期メンバー 現在 役割は、ざっくり分けると ・バックエンド/API開発 ・フロントエンド開発 ・インフラ/プラットフォーム の3つ (兼務も多い)

Slide 17

Slide 17 text

テクノロジースタック 2020年6月に開発をスタート。 この時点で本番まで3ヶ月しかなかったので、とにかく開発の効率性を最優 先に考え、初期メンバーのjacopenやr_takaishiが知見を持ち合わせていた Ruby on Railsを利用したモノリシックなアプリケーションに。 プラットフォームはHerokuを利用。 言語・フレームワーク リポジトリ IdP プラットフォーム 動画配信

Slide 18

Slide 18 text

DreamkastとCI/CD 開発メンバーは全員がコミュニティ活動の一環として参加しており、プラ イベートの時間を割いて開発している。 なので、平日夜や休日のほんの数時間しか使えない。 だからこそ、少ない労力でチーム開発を行っていくためのCI/CDの整備は 開発における生命線であり、開発の初手から最優先で整備した

Slide 19

Slide 19 text

Dreamkast v1 2020/09 - CloudNative Days Tokyo 2020

Slide 20

Slide 20 text

Review App DreamkastとCI/CD コードを修正し、GitHubにPull Requestを作成すると、GitHub Actionsによって自動的にテストを 実行する(CI)。 また、自動的にレビュー用アプリがHeroku上に作成され、動作確認ができる。PRがマージされると 自動的にStagingにデプロイされる(CD)。Productionへは手動トリガーでデプロイ Pull Request Main Branch GitHub ActionsでRSpec実行(CI) Merge Staging Production PRごとにレビュー用アプリ を自動デプロイ 自動デプロイ 自動デプロイ(トリガーは手動) Commit

Slide 21

Slide 21 text

DreamkastとCI/CD 6/15 初回コミット ~6/22 手元でプロトタイプ実装 6/18 本番向けプラットフォーム検討開始 6/25 Continuous Deliveryできるようにアプリを修正 6/27 プラットフォームをHerokuに決定 7/2 レビューアプリデプロイを自動化

Slide 22

Slide 22 text

Review App DreamkastとCI/CD Pull Request Main Branch GitHub ActionsでRSpec実行(CI) Merge Staging Production PRごとにレビュー用アプリ を自動デプロイ 自動デプロイ 自動デプロイ(トリガーは手動) Commit コードレビュー 動作確認 レビューして問題無ければ Approve

Slide 23

Slide 23 text

無事、イベントを開催できました 2020/09/07

Slide 24

Slide 24 text

本番中にもバリバリ開発・リリース ● 正直言うと結構不具合起きた ● 不具合報告を受けたらイベント中でも即座に修正・リリース ● すぐに実現出来る機能要望やフィードバックは即実装・リリース イベント開催中にリアルタイムで 修正して反映している

Slide 25

Slide 25 text

DreamkastとCI/CD 開発メンバーは全員がコミュニティ活動の一環として参加しており、プラ イベートの時間を割いて開発している。 なので、平日夜や休日のほんの数時間しか使えない。 だからこそ、少ない労力でチーム開発を行っていくためのCI/CDの整備は 開発における生命線であり、開発の初手から最優先で整備した 時間が無いからCI/CDの整備は後回し・・・というケースも多いが悪手 時間が無い・人が居ないからこそ、優先的にCI/CDを構築すべき

Slide 26

Slide 26 text

Dreamkast v1 - 良かったことと気になったこと ● 本番まで3ヶ月を切る中で、ゼロから開発を開始して本番にこぎ着けた RailsとHerokuの生産性すごかった ● CI/CDを初手から行ったおかげで上手く分担して開発が出来た ● HerokuがビルトインでCD周りを提供してくれたのが最高に助かった ● 総じてテクノロジー選択は最適だったと思う 気になったこと ● クラウドではあるがクラウドネイティブではない ○ テクノロジースタックとしては枯れているもの。今回はポジティブ面が 目立ったが、今後どうなるか? ● DB周りの安定度 ○ Heroku AddonのDBは本番向けには難が多く、直前にAmazon RDSに切り替 えた ● UI周りの開発が早々に限界に ○ jQueryを使ったが、インタラクティブなUIの作成には向いていないと感じた

Slide 27

Slide 27 text

Dreamkast v2 2021/03 - CloudNative Days Spring 2021 ONLINE

Slide 28

Slide 28 text

テクノロジースタック UXを改善して行くにはフロントエンドの進化が必須。 そのため、視聴UIをNext.jsを使ったアプリケーションに分離。Railsから APIで情報を渡すように。 インフラはAWSに移行し、EKSを中心にAWSのサービスを利用。

Slide 29

Slide 29 text

Deployment デプロイにはArgoCDを利用。Contourを使ってDreamkastとUIをPath based routing RDS ElastiCache S3

Slide 30

Slide 30 text

Review Apps HerokuのReview apps機能の開発体験がとても良かったので、k8sでも実 現したいと思った。そこで、Pull Requestが上がるとActionsでManifest を生成して、Infra Repositoryにコミットするようにした。 いわゆるGitOpsで一式が揃ったReview Appが立ち上がるように。 Pull Request Commit Dreamkast Repository Infra Repository Unit Test Image Build Manifest生成 HTTPProxy

Slide 31

Slide 31 text

無事、イベントを開催できました 2021/03/11

Slide 32

Slide 32 text

Dreamkast v2.x 2021/09 - CI/CD Conference 2021 2021/11 - CloudNative Days Tokyo 2021 2022/03 - Observability Conference 2022

Slide 33

Slide 33 text

ReleaseBot @kanatakitaが作ってくれた、Production環境へのリリースを、Slackか らのChatOpsで行えるようにするBot。ものすごくリリース作業が楽に なった。 出先でも風呂からでも、スマホさえあればリリースが出来る

Slide 34

Slide 34 text

reviewapp-operator GitHub Actionsで頑張ってやっていたReview app作成を、K8sの Operatorで実現できるようにした。 GitHubのPull Requestをチェックし、新しいPRがあればManifestを作成 してInfra Repoにコミットし、アプリのURLをPRにコメントする。

Slide 35

Slide 35 text

reviewapp-operator 実装については、主開発者の @kanatakita の記事に詳細があります https://zenn.dev/kanatakita/articles/about-reviewapp-operator

Slide 36

Slide 36 text

Dreamkast v3 2022/08 - CloudNative Security Conference 2022

Slide 37

Slide 37 text

reviewapp-operator

Slide 38

Slide 38 text

reviewapp-operatorは退役しました

Slide 39

Slide 39 text

ArgoCD ApplicationSet ArgoCD v2.3からArgoCD本体に取 り込まれた仕組み。 ArgoCDのApplicationをまとめて生 成・管理できる。

Slide 40

Slide 40 text

ArgoCD Application これまで取っていたパターン Pull Request pr-123 App Repo Infra Repo Pull Request pr-124 Dreamkast Deployment Dreamkast UI Deployment Contour HTTPProxy MySQL Statefulset Redis Statefulset ArgoCD Application (pr-124) Dreamkast Deployment Dreamkast UI Deployment Contour HTTPProxy MySQL Statefulset Redis Statefulset ArgoCD Application (pr-123) App-of-apps pattern PRチェック Manifest生成

Slide 41

Slide 41 text

ArgoCD Application ArgoCD Application apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: dreamkast-dk namespace: argocd spec: generators: - pullRequest: github: owner: cloudnativedaysjp repo: dreamkast template: metadata: name: 'dreamkast-dk-{{number}}' spec: project: reviewapps source: repoURL: https://github.com/cloudnativedaysjp/dreamkast-infra.git targetRevision: main path: manifests/app/dreamkast/overlays/development/template-dk ApplicationSet Pull Request pr-123 App Repo Pull Request pr-124 ArgoCD ApplicationSet ApplicationSet Controller

Slide 42

Slide 42 text

Dreamkast v3.x / v4 2022/11 - CloudNative Days Tokyo 2022 and Beyond

Slide 43

Slide 43 text

イベント運営の全てをコード化 Amazon IVS MediaLive Dreamkast Team Broadcast Team OBS Studio cndctl After Effects Export 動画自動生成 Observability Team Monitor Stats Promotion Team Export Export

Slide 44

Slide 44 text

ハイブリッドイベント対応

Slide 45

Slide 45 text

Kubernetes以外の活用 API Gateway Lambda ECS EKS DynamoDB 新機能 Amplify Promo Web Heroku時代に比べるとコストが10倍に 跳ね上がってしまったため、k8sである 必要がないアプリはAWSの機能で運用し ていきたい

Slide 46

Slide 46 text

Kubernetes以外の活用 API Gateway Lambda ECS EKS DynamoDB 新機能 Amplify Promo Web これをどうやってCI/CDしていくかは チャレンジ

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

CloudNative Days Tokyo 2022 ● 11/21-22に開催! スケジュール空けておいて下さい! ● CFPは9月中旬に開始! ネタ考えておいてください! ● (たぶん) ハイブリッド開催! オンラインでもオフラインでも登壇でき るし参加出来ます