0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Actionsを使ったおうちダッシュボードの継続的デプロイ

0
Posted at

はじめに

本稿は生成AIで作ったインフラのデプロイメントに、CI/CDガードレールを引いて安全なリリースを実現する話。対象は以前作ったオンプレ+AWSで構築したダッシュボードである。

過去作:玄関にオリジナルダッシュボードを設置した
https://qiita.com/bd8z/items/d0c20d5f1cb0833d1bbc

image.png

おうち用のダッシュボードの運用においては、ちょっとした変更から逃れられない。センサの追加、ダッシュボードのUI改善、バス時刻情報の改定などデータ部分…。家族からのSLAも厳しい(SLA100%)。変更をコーディングエージェントにやってもらうと、ほんの小変更でもAPI基盤が壊れてしまい、復旧に莫大なトークンが消費され、時間もかかってしまう。生成AI開発にはガードレール開発が必要とよく言われるのでこれを実践し、デプロイ・テスト・ロールバックの仕組みを構築することで、継続的な改善に耐えられるようにしていく。

最終的に落ち着いたダッシュボードインフラ

ダッシュボードの物理・論理構成の特徴として、Mac mini上のAPI基盤、AWS側の各種データ層など、オンプレ(家庭内)と、AWS側にインフラが分かれた構造がある。これまでは端末からSSHログインして直にコマンドを打つ、powershellスクリプト(ps1)からデプロイメントを行うなど、コーディングエージェントに気ままにやらせていて、 デプロイに冪等性が存在しなかった。テストも存在しなかった。 この状態から、正規のCI/CDパイプラインを通らないとリリースができない構成にした。

image.png

アーキテクチャの工夫点

  • 全てのパイプラインはGitHub Actionsで管理する
  • オンプレミス側はMac mini上のSelf-Hosted RunnerからPull型のリリース
    • Podmanでコンテナビルドとテストデプロイを担う
    • Pull型なのでM4 Macでもイメージビルド環境に困らない
  • AWSリソースはCodePipelineからCloudFormationでリリースされる
    • Cloud RunnerにAWS CLIを入れたくないのでCodeシリーズでPull型構成とした
  • 全てのデプロイの後にAPIテストがあり、失敗した場合はCommitIDを起点にロールバックされる

パイプラインの設計

AWS側のステージをActionsパイプラインの中に内包した1つのパイプライン構成とした。また最後にロールバックステージを入れて、失敗をガードできるようにした。

image.png

パイプライン作成時にコーディングエージェントが実装したアンチパターン

上記のMermaidの画像も、ADRも、すべてコーディングエージェントに委任したが、開発の中でいわゆるアンチパターンでエージェントが実装をしてくることがあったので書いておく。今回はGPT-5.3-Codexを利用した。

パターン1 セキュリティキーの直接ぶち込み

ケース:GitHubのリポジトリ間の親リポジトリとサブモジュール間の接続の実装

image.png

手持ちの手札で実装しようとするのでどうしてもセキュリティキーをURLにぶち込む様な実装に走りがちであるが、GitHubの場合リポジトリ間はGitHub Appで認証認可を設定すべきであり、必ずしもベストプラクティスを守ってくれない。

パターン2 意味のないテストステージ

ケース:パイプライン上のAPIテストステージ実装

image.png

ダッシュボードにはバス時間の取得が含まれている。例えば深夜帯に開発していると、リアルタイムにバスが動いていないなど、APIが正常動作でもクエリの結果が空になり、テストステージが失敗判定になる。最近使えるようになったautopilotを走らせていると、ステージ設計を楽な方向に(テストが通る方に)テストクライテリアを緩和していき、ガードレールとして意味のないステージが完成しそうだったので慌てて止めた。

最後に

冪等なデプロイプロセスと、ガードレールとなるパイプラインを手に入れたので、モバイルからIssueを投げる気軽な開発を安心してできるようになった。彼らは手札内で何とか実装しようとしてくるので、やはりレビュープロセスが必要だと感じている。レビューの底上げのために、レビューエージェントなどにも手を出していきたい。また、実装においては必要最低限のトークンだけ用意してgh/awsコマンドを打たせるなど、Sandbox化も少し工夫した。コーディングエージェントは、放置していると何でもかんでも.envに書いていくなど、セキュリティでも課題がある。私個人も人間としての学習も忘れず、しっかり気を付けながら使っていく。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?