Daigo Suhara
AWS
Azure
自宅サーバー
GoogleCloud

AWSを生涯無料で使い放題にする方法(答え:自作)

ソース
Qiita
公開 更新 元記事を開く

はじめに

AWS,Azure,GoogleCloudなどパブリッククラウドはすごく便利ですが,個人で使うには高いですよね.(貧乏学生にはきちぃ) 一生無料で,使い放題なクラウドがほしいな〜

せや自分で作ればいいやん!

ということでパブリッククラウドを自作してみました(タイトル詐欺?電気代はかかります..実家に)

システム構成は大体下図の通りです(Gemini作). Gemini_Generated_Image_grq25ugrq25ugrq2.png

宣伝

自作クラウドのコンテナサービス(ECS風)で運用しているポートフォリオサイトです https://daigo-suhara.com

フェーズ1:kubernetesクラスタ自動構築化

基盤にはkubernetesを採用することにしました. しかしベアメタルにクラスタ構築するのめんどいなーということで自動的にクラスタ構築してくれるようにしました.

具体的には,Tinkerbellというソフトウェアを使用しています.これによりストレージ空っぽ,電源OFFの状態から,クラスタ構築に必要最低限なパッケージ(kubeadmなど)のみ含んだOSが勝手にインストールされます. (Tinkerbell:ベアメタルにipxe経由でOSや初期設定を自動的にプロビジョニングしてくれる) さらにClusterAPI Provider Tinkerbellを使用することで,OSプロビジョニング後のクラスタ構築作業も自動化してくれます.

自分はこれを,ノートPCにmicrok8sで作ったクラスタの上にargocdをインストして,argocdリソースとしてtinkerbell環境を構築しています.

フェーズ2:クラウドコアシステムの作成

まず現状ですが,

  • 認証系(IAM的な)
  • テナント
  • コンテナサービス(ECS)
  • 仮想マシン(EC2)
  • WEBコンソール
  • API

が作成できています.

それぞれの内部システムはgrpcサーバとして切り離されていて,GitHub Actionsでコンテナ化してociレジストリにPushしたものを,ArgoCDが呼び出します. (*APIはFastAPI,WEBコンソールはReact製です)

コンテナサービスについて

基盤はknativeで動いています.それをFastAPIからの指示に基づいてGo製のシステムで操作しています.

オートスケールやコンテナイメージURLの指定などができます.ソースコードからの継続デプロイ機能はまだ開発できていません.

また,ドメインマッピング機能もあるので,<サービスID>.drkatana.comという名前で公開URLもつきますし,CNAMEでカスタムドメインも設定できます. スクリーンショット 2026-06-14 13.00.53.png スクリーンショット 2026-06-14 13.05.56.png

仮想マシンについて

基盤はkubevirtで動いています.ubuntu,fedora,debianなどのテンプレートの他,カスタムociイメージを指定することができます.コア数やメモリ数の指定と,コンソール画面からの操作ができます. コンソール画面はwebsocketとxterm.jsで実装しています. スクリーンショット 2026-06-14 13.01.27.png

おわりに

自分用クラウドとしてはOpenStackなどのOSSを使うと楽ですが,自分で1から作るというのは勉強も兼ねつつ,つい時間を忘れて徹夜してしまうくらい楽しむことができたので,ぜひクラウド自作erが増えるといいなと思いました.

謝辞

今回開発作業にあたり,私の無茶なアーキテクチャを実装するコーディング作業の多くを担当してくださったCodexに感謝を表します.