ツナカン(TUNA-JP Conference) #4 で話した資料です! https://tuna-jp.connpass.com/event/254710/
システム運用で失敗した話については、Cloud Operator Days Tokyo 2021の発表をどうぞ https://www.youtube.com/watch?v=T0KB_9wKvTw
CloudNative DaysはカンファレンスのシステムをどうCI/CDしているのかKazuto Kusama @jacopen
View Slide
Kazuto Kusama@jacopenSenior Solutions Engineer @HashiCorp JapanCo-Chair @CloudNative Days
CloudNative Days2018年に、Japan Container Daysとしてスタート2019年からCloudNative Daysという名前に。福岡・東京・関西で開催2020年からオンライン開催。年1回のCloudNative Daysの他、テーマ特化型イベントを開催
CloudNative Days国内最大の、クラウドネイティブの祭典6トラック同時配信、2日間でおおよそ70セッションという大規模カンファレンス
課題の多い、オンラインカンファレンスのUX勉強会や小規模カンファレンスの、1トラックの配信であればそれほど難しくない。ZoomなりYouTube Liveなりで垂れ流せば良いでは複数トラックだと?13:00-13:40Aさんの発表14:00-14:40Bさんの発表15:00-15:40Cさんの発表
課題の多い、オンラインカンファレンスのUXセッションごとに別のYouTube Liveを埋め込みパターン視聴者はセッションが終わるごとにリンクをクリックして,次のセッションを表示する⇒ とても体験が悪い
課題の多い、オンラインカンファレンスのUXトラックごとに別のYouTube Liveを埋め込みパターン視聴者は視聴したいセッションが別トラックにある場合、リンクをクリックしてトラックを移動する必要がある⇒ これもあまり体験が良くないもっと簡単な操作で、複数トラックを渡り歩けるUIであるべき
他にも欲しい機能が沢山ある● スポンサーのロゴを画面に表示したい○ 既存の仕組みだと、動画側にうまく埋め込む必要がある● 事前収録・オンライン登壇・会場登壇をうまくミックスしたい○ OBS等を活用して職人芸でスイッチング作業する● スポンサーに提供する「リード」を取得したい○ 参加者の情報をどうやって取得するか。YouTube Liveではそういった情報は取れない。● できればイベントの告知は配信と同じサイトで行いたい● できればCFPなども同じサイトで募集したい● などなど
以前からモヤモヤしていたこと2018年のJapan Container Daysや2019年のCloudNative Daysは会場を借りてのリアル開催。良いイベントが出来たとは思うが、カンファレンスの運営でクラウドネイティブ技術を活用する余地はあまりなかった。クラウドネイティブ技術を体験できる参加型コンテンツ「showKs」などの企画もやったが、あくまでもコンテンツのひとつでしかなかった。
以前からモヤモヤしていたことオンライン開催にあたっては、既存ベンダーのCMSをカスタマイズしてもらう案もあったが、柔軟なカスタマイズは行ってもらえそうになかった。また、カスタマイズのための要件定義やコミュニケーションもメール経由でしか受け付けてもらえないとのことだった。
じゃあどうするか理想のカンファレンスを実現するにはシステムを内製するしかない!
イベントプラットフォーム「Dreamkast」CloudNative Daysへの参加申し込みや、カンファレンスの視聴が行えるWebアプリケーション。設計のコンセプトは「大晦日のテレビ感覚で見られるUX」・歌合戦・笑ってはいけない・格闘技・トークバラエティ・グルメずっと同じ番組を見ても良いし、好きな人が出ているときだけその番組に切り替える、あるいはチャンネルを回して面白そうなものを見るという視聴スタイル
ワンボタンでトラック切り替え選択トラックの過去セッションを視聴することも可能チャットとQ&Aを一体化視聴中セッションの情報 スポンサーロゴ
イベントプラットフォーム「Dreamkast」イベント告知ページ タイムテーブル イベント参加申込配信視聴 プロポーザル応募フォームスピーカー向けダッシュボード
メンバー初期メンバー現在役割は、ざっくり分けると・バックエンド/API開発・フロントエンド開発・インフラ/プラットフォームの3つ (兼務も多い)
テクノロジースタック2020年6月に開発をスタート。この時点で本番まで3ヶ月しかなかったので、とにかく開発の効率性を最優先に考え、初期メンバーのjacopenやr_takaishiが知見を持ち合わせていたRuby on Railsを利用したモノリシックなアプリケーションに。プラットフォームはHerokuを利用。言語・フレームワーク リポジトリ IdPプラットフォーム動画配信
DreamkastとCI/CD開発メンバーは全員がコミュニティ活動の一環として参加しており、プライベートの時間を割いて開発している。なので、平日夜や休日のほんの数時間しか使えない。だからこそ、少ない労力でチーム開発を行っていくためのCI/CDの整備は開発における生命線であり、開発の初手から最優先で整備した
Dreamkast v12020/09 - CloudNative Days Tokyo 2020
Review AppDreamkastとCI/CDコードを修正し、GitHubにPull Requestを作成すると、GitHub Actionsによって自動的にテストを実行する(CI)。また、自動的にレビュー用アプリがHeroku上に作成され、動作確認ができる。PRがマージされると自動的にStagingにデプロイされる(CD)。Productionへは手動トリガーでデプロイPull RequestMain BranchGitHub ActionsでRSpec実行(CI)MergeStagingProductionPRごとにレビュー用アプリを自動デプロイ自動デプロイ自動デプロイ(トリガーは手動)Commit
DreamkastとCI/CD6/15 初回コミット~6/22 手元でプロトタイプ実装6/18 本番向けプラットフォーム検討開始6/25 Continuous Deliveryできるようにアプリを修正6/27 プラットフォームをHerokuに決定7/2 レビューアプリデプロイを自動化
Review AppDreamkastとCI/CDPull RequestMain BranchGitHub ActionsでRSpec実行(CI)MergeStagingProductionPRごとにレビュー用アプリを自動デプロイ自動デプロイ自動デプロイ(トリガーは手動)Commitコードレビュー 動作確認レビューして問題無ければApprove
無事、イベントを開催できました2020/09/07
本番中にもバリバリ開発・リリース● 正直言うと結構不具合起きた● 不具合報告を受けたらイベント中でも即座に修正・リリース● すぐに実現出来る機能要望やフィードバックは即実装・リリースイベント開催中にリアルタイムで修正して反映している
DreamkastとCI/CD開発メンバーは全員がコミュニティ活動の一環として参加しており、プライベートの時間を割いて開発している。なので、平日夜や休日のほんの数時間しか使えない。だからこそ、少ない労力でチーム開発を行っていくためのCI/CDの整備は開発における生命線であり、開発の初手から最優先で整備した時間が無いからCI/CDの整備は後回し・・・というケースも多いが悪手時間が無い・人が居ないからこそ、優先的にCI/CDを構築すべき
Dreamkast v1 - 良かったことと気になったこと● 本番まで3ヶ月を切る中で、ゼロから開発を開始して本番にこぎ着けたRailsとHerokuの生産性すごかった● CI/CDを初手から行ったおかげで上手く分担して開発が出来た● HerokuがビルトインでCD周りを提供してくれたのが最高に助かった● 総じてテクノロジー選択は最適だったと思う気になったこと● クラウドではあるがクラウドネイティブではない○ テクノロジースタックとしては枯れているもの。今回はポジティブ面が目立ったが、今後どうなるか?● DB周りの安定度○ Heroku AddonのDBは本番向けには難が多く、直前にAmazon RDSに切り替えた● UI周りの開発が早々に限界に○ jQueryを使ったが、インタラクティブなUIの作成には向いていないと感じた
Dreamkast v22021/03 - CloudNative Days Spring 2021 ONLINE
テクノロジースタックUXを改善して行くにはフロントエンドの進化が必須。そのため、視聴UIをNext.jsを使ったアプリケーションに分離。RailsからAPIで情報を渡すように。インフラはAWSに移行し、EKSを中心にAWSのサービスを利用。
DeploymentデプロイにはArgoCDを利用。Contourを使ってDreamkastとUIをPathbased routingRDSElastiCacheS3
Review AppsHerokuのReview apps機能の開発体験がとても良かったので、k8sでも実現したいと思った。そこで、Pull Requestが上がるとActionsでManifestを生成して、Infra Repositoryにコミットするようにした。いわゆるGitOpsで一式が揃ったReview Appが立ち上がるように。Pull RequestCommitDreamkastRepositoryInfraRepositoryUnit TestImage BuildManifest生成HTTPProxy
無事、イベントを開催できました2021/03/11
Dreamkast v2.x2021/09 - CI/CD Conference 20212021/11 - CloudNative Days Tokyo 20212022/03 - Observability Conference 2022
ReleaseBot@kanatakitaが作ってくれた、Production環境へのリリースを、SlackからのChatOpsで行えるようにするBot。ものすごくリリース作業が楽になった。出先でも風呂からでも、スマホさえあればリリースが出来る
reviewapp-operatorGitHub Actionsで頑張ってやっていたReview app作成を、K8sのOperatorで実現できるようにした。GitHubのPull Requestをチェックし、新しいPRがあればManifestを作成してInfra Repoにコミットし、アプリのURLをPRにコメントする。
reviewapp-operator実装については、主開発者の @kanatakita の記事に詳細がありますhttps://zenn.dev/kanatakita/articles/about-reviewapp-operator
Dreamkast v32022/08 - CloudNative Security Conference 2022
reviewapp-operator
reviewapp-operatorは退役しました
ArgoCD ApplicationSetArgoCD v2.3からArgoCD本体に取り込まれた仕組み。ArgoCDのApplicationをまとめて生成・管理できる。
ArgoCD Applicationこれまで取っていたパターンPull Requestpr-123App RepoInfra RepoPull Requestpr-124 DreamkastDeploymentDreamkast UIDeploymentContourHTTPProxyMySQLStatefulsetRedisStatefulsetArgoCD Application (pr-124)DreamkastDeploymentDreamkast UIDeploymentContourHTTPProxyMySQLStatefulsetRedisStatefulsetArgoCD Application (pr-123)App-of-apps patternPRチェックManifest生成
ArgoCDApplicationArgoCDApplicationapiVersion: argoproj.io/v1alpha1kind: ApplicationSetmetadata:name: dreamkast-dknamespace: argocdspec:generators:- pullRequest:github:owner: cloudnativedaysjprepo: dreamkasttemplate:metadata:name: 'dreamkast-dk-{{number}}'spec:project: reviewappssource:repoURL: https://github.com/cloudnativedaysjp/dreamkast-infra.gittargetRevision: mainpath: manifests/app/dreamkast/overlays/development/template-dkApplicationSetPull Requestpr-123App RepoPull Requestpr-124ArgoCD ApplicationSetApplicationSet Controller
Dreamkast v3.x / v42022/11 - CloudNative Days Tokyo 2022and Beyond
イベント運営の全てをコード化Amazon IVS MediaLiveDreamkast TeamBroadcastTeamOBS StudiocndctlAfter EffectsExport動画自動生成ObservabilityTeamMonitorStatsPromotion TeamExport Export
ハイブリッドイベント対応
Kubernetes以外の活用API GatewayLambdaECSEKSDynamoDB新機能AmplifyPromoWebHeroku時代に比べるとコストが10倍に跳ね上がってしまったため、k8sである必要がないアプリはAWSの機能で運用していきたい
Kubernetes以外の活用API GatewayLambdaECSEKSDynamoDB新機能AmplifyPromoWebこれをどうやってCI/CDしていくかはチャレンジ
CloudNative Days Tokyo 2022● 11/21-22に開催!スケジュール空けておいて下さい!● CFPは9月中旬に開始!ネタ考えておいてください!● (たぶん)ハイブリッド開催!オンラインでもオフラインでも登壇できるし参加出来ます