AWS Marketplace製品一覧へ
FerroRepo
ストレージ & データ

FerroRepo

Rust製ユニバーサルアーティファクトリポジトリ

JVM・外部DB不要の単一バイナリ 置き換え対象のAWSサービス: Sonatype Nexus / JFrog Artifactory
AWS Marketplaceで入手

単一の自己完結バイナリとして動き、Sonatype Nexus Repository 3とJFrog Artifactoryのワイヤプロトコルを話すRust製のユニバーサルアーティファクトリポジトリ。既存のMaven / npm / pip / cargo / docker / helmクライアントが無改修で動きます。JVM不要・運用すべき外部DB不要(埋め込みSQLite + ローカル/オブジェクトストレージ)、1秒未満で起動。

古典的なNexus / Artifactoryは、1個のアーティファクトを返す前にJVMと数GBのヒープと外部DBを必要とします。FerroRepo の単一バイナリモードは、それを1つの堅牢なバイナリ(自己完結AMI)で置き換えます。v0.1.0は18プロトコル中12を完全実装し、in-treeの適合テスト付き: Maven、npm、OCI / Docker Registry v2、PyPI(PEP 503系)、Cargo(sparse index)、Goモジュールプロキシ、Raw/Generic、NuGet v3、RubyGems、Helm(classic + OCI)、APT、YUM/DNF — に加えNexus REST v1とArtifactory互換の管理API。ストレージは階層化(hot/warm/cold)+コンテンツアドレス重複排除で、S3 / GCS / Azure / MinIO のblobバックエンドに対応。認証はデフォルトON(匿名読み取り可、書き込み/管理は要認証)。

課題

Sonatype Nexus Repository 3 や JFrog Artifactory といった従来のアーティファクトリポジトリは、1 つのアーティファクトを配信するだけでも JVM とギガバイト単位のヒープ、そして外部データベースの運用を前提とします。これらは起動が重く、運用面の負担も大きくなります。Maven・npm・pip・cargo・docker・helm といった既存のビルドツールを使い続けながら、もっと軽量で運用しやすいリポジトリが求められています。

仕組み

  1. 1

    単一バイナリで起動

    FerroRepo は JVM も外部データベースも持たない 1 プロセスとして動作し、メタデータは組み込みの SQLite、ブロブはローカルボリュームまたはオブジェクトストレージに永続化します。小さなインスタンス上で 1 秒未満で起動し、ハードニング済みの自己完結型 AMI として提供されます。

  2. 2

    既存クライアントをそのまま接続

    FerroRepo は Nexus Repository 3 と Artifactory のオンワイヤ HTTP プロトコルを話すため、Maven・npm・pip・cargo・docker・helm・apt/yum の各クライアントを設定変更なしでそのまま向けられます。v0.1.0 では 18 プロトコル中 12 種を、in-tree の適合テスト付きで完全配線しています。

  3. 3

    ストレージを階層化し重複排除

    ストレージは hot/warm/cold の階層型で、コンテンツアドレス指定によるブロブの重複排除を行います。ブロブのバックエンドは object_store を介して S3 / GCS / Azure / MinIO を差し替え可能で、認証はデフォルトで有効です(匿名読み取りは許可、書き込み・管理操作には適切なスコープを持つ認証済みプリンシパルが必要)。

特長

Nexus 3 + Artifactory ワイヤ互換 — 既存のビルドツール(Maven / npm / pip / cargo / docker / helm)が無改修で動作。

JVM不要・外部DB不要の単一バイナリ。1秒未満で起動し、SQLite + S3 / GCS / Azure / MinIO のblobストレージに対応。

18プロトコル中12を適合テスト付きで実装。認証デフォルトON(匿名読み取り可、書き込みは要認証)。

含まれるもの

  • Amazon Linux 2023 ベースの自己完結型 AMI(Graviton / arm64、t4g・c7g・m7g・r7g クラスのインスタンスに対応)
  • JVM も外部データベースも不要の単一バイナリサーバー(メタデータは組み込み SQLite、ブロブはローカルボリュームまたはオブジェクトストレージ、起動は 1 秒未満)
  • 18 プロトコル中 12 種を完全配線(Maven、npm、OCI / Docker Registry v2、PyPI(PEP 503 系)、Cargo(sparse index)、Go module proxy、Raw/Generic、NuGet v3、RubyGems(Compact Index)、Helm(classic + OCI)、APT、YUM/DNF)+ Nexus REST v1 / Artifactory 互換の管理サーフェス
  • hot/warm/cold の階層型ストレージと、コンテンツアドレス指定によるブロブ重複排除
  • object_store 経由で差し替え可能な S3 / GCS / Azure / MinIO のブロブバックエンド
  • デフォルト有効の認証(匿名読み取りは許可、すべての書き込み・管理操作には認証が必須、組み込みユーザーまたは OIDC フェデレーション、初回起動時にインスタンスごとの一意なランダム管理者パスワードを生成)
  • abyo software によるサポート([email protected]、初回応答は 1 営業日以内、Private Offer の Enterprise ティアでは Critical 案件 1 時間応答の 24/7 SLA を追加)

こんな用途に

Nexus や Artifactory を、JVM と外部データベースを運用せずに単一バイナリへ置き換えたいチーム

Maven・npm・pip・cargo・docker・helm のクライアント設定を変えずに利用できる、ワイヤ互換のアーティファクトリポジトリが欲しいケース

CI/CD パイプライン向けに、起動が速く運用負荷の小さい単一ノードのパッケージレジストリを求めるケース

匿名読み取りを許可しつつ書き込みは認証で守る、パブリックミラー的なリポジトリの運用

よくある質問

どのパッケージエコシステムに対応していますか?

v0.1.0 では 18 プロトコル中 12 種を、in-tree の適合テスト付きで完全に配線しています。対応は Maven、npm、OCI / Docker Registry v2、PyPI(PEP 503 系)、Cargo(sparse index)、Go module proxy、Raw/Generic、NuGet v3、RubyGems(Compact Index)、Helm(classic + OCI)、APT、YUM/DNF です。残る 6 種(Conan、Conda、CRAN、Hex、CocoaPods、Bazel)はスコープ宣言済みで、現時点では 501 を返します。正直に申し上げると、これらの未実装プロトコルはまだ動作しません。

本当に JVM も外部データベースも不要なのですか?

そのとおりです。FerroRepo は JVM を持たない 1 プロセスとして動作し、メタデータは組み込みの SQLite、ブロブはローカルボリュームまたはオブジェクトストレージに永続化します。運用すべき外部データベースはありません。従来の Nexus や Artifactory がアーティファクトを 1 つ配信する前に JVM・ギガバイト単位のヒープ・外部データベースを必要とするのに対し、FerroRepo はそれを 1 つのハードニング済みバイナリで置き換え、小さなインスタンス上で 1 秒未満に起動します。

ストレージはどのように構成されますか?

ストレージは hot/warm/cold の階層型で、コンテンツアドレス指定によるブロブの重複排除を行います。ブロブのバックエンドは object_store を介して S3 / GCS / Azure / MinIO を差し替え可能で、メタデータは組み込みの SQLite に保持されます。

認証はどう扱われますか?

認証はデフォルトで有効で、セキュアバイデフォルトの方針を採ります。匿名読み取りは許可される一方、すべての書き込みおよび管理操作には適切なスコープを持つ認証済みプリンシパルが必要です。組み込みユーザー、または外部 OIDC イシュアへのフェデレーションに対応し、初回起動時にはインスタンスごとに一意なランダム管理者パスワードが生成されます。デフォルトや共有のパスワードが使われることはありません。

複数ノードでスケールできますか?

現時点ではできません。サポート対象のトポロジは単一ノード(単一バイナリ)で、SQLite メタデータと S3 上のブロブ階層を用います。水平スケールするマルチノード / Postgres メタデータ構成はロードマップ上にあり、まだサポートされていません。正直に申し上げると、マルチノード構成は現状では提供していません。

料金モデル

時間課金のソフトウェア利用料 + EC2(t4g / c7g / m7g / r7g 級、Arm)。インスタンスタイプ別の従量課金。

AWS Marketplaceで入手