CLIツール
floci-io/floci avatar
floci-io/floci

Flociを読む:ポート4566で動かすローカルAWS互換環境

Floci は、ローカル マシン上で選択された AWS サービスをエミュレートするため、リモート アカウントなしでクラウド アプリケーションを開発およびテストできます。

スター 24,290フォーク 2,611JavaMIT

ひと目でわかる

これは何?
Flociは、AWSアカウントや認証トークンを使わず、開発・テスト・CI向けにAWS形のサービスをローカルで動かすJava製エミュレータです。Docker実行、永続化、SDK接続、移行手順を確認します。
誰に向いている?
Flociは、クラウドアカウントを用意せずにAWS向けアプリケーションの開発やCIを進めたいチームに向きます。READMEは83サービス、ポート4566、複数のストレージ方式、Dockerで実行するサービスを示していますが、互換性をすべてのAPIで保証するものではありません。
商用利用できる?
できます。MIT は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
今もメンテナンスされている?
されています。直近 1 日以内に新しいコミットがあります。
何の言語で書かれている?
主に Java です(GitHub の言語統計による)。

回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。

オープンソース詳細解説

アカウントなしでAWS形の入口を作る

Flociは、開発、テスト、CIのためにAWS互換のサービスを手元でエミュレートする無料のオープンソースプロジェクトです。READMEの中心的な約束は、クラウドアカウント、認証トークン、有料機能の門を用意せずに始められることです。公式CLIではfloci startで起動し、eval $(floci env)でローカル用のAWS環境変数を読み込みます。起動後のサービス入口はhttp://localhost:4566で、READMEには任意のリージョンと、空でない値の認証情報を使えるとあります。Docker Composeを選ぶ場合は、floci/floci:latestイメージの4566番ポートを公開してdocker compose upを実行します。S3へバケットを作成したり、DynamoDBのテーブルをAWS CLIから作成したりする例も用意されています。既存のSDKやCLIを見慣れた形で接続できる点は便利ですが、ローカルで接続できたことと、AWS本番と同じ挙動であることは別に検証する必要があります。

プロセス内処理と実Dockerの使い分け

Flociの構成は、すべてを浅いモックで置き換えるという説明ではありません。READMEは、Lambda、RDS、Neptune、ElastiCache、MSK、ECS、EC2、EKS、OpenSearch、CodeBuildなど、忠実度が必要なサービスを実際のDocker実行へ振り分けると記載しています。入口のHTTPルーターが、ステートレスなサービス、状態を持つサービス、コンテナで動くサービスへ要求を分配する構成図も示されています。サービス一覧はアプリケーション、データ、イベント、認証、インフラ、請求、コンテナワークロードにまたがり、READMEは83のAWSサービスを掲げています。対応範囲が広いことは入口として有用ですが、サービスごとに実装の深さや利用できるAPIは違います。特定の機能を本番移行前に確認する場合は、対象API、エラー、権限、非同期処理、データの寿命を固定した互換性テストを用意してください。Flociがサービスを列挙していることだけで、すべてのSDK機能が同じ結果になるとは判断できません。

Dockerソケットが変える運用リスク

実コンテナを使うサービスを選ぶと、Floci自身のプロセスだけでなく、ホストのDockerデーモンとの接続が関係します。READMEは、Dockerソケットをマウントし、rootユーザーでFlociコンテナを実行する例を示しています。これにより、LambdaのランタイムやRDSのデータベースなどを別コンテナとして起動できます。標準イメージは環境変数で差し替えられるため、PostgreSQLなどの版を固定したいテストにも使えます。ただし、Dockerソケットのマウントは強い権限を持つ構成になり得ます。ローカル開発で便利な設定を、そのまま共有CIや本番相当の環境へ移してよいとは限りません。どのサービスが実Dockerを要求するか、コンテナがどのネットワークとボリュームへ接続するか、テスト終了後に残る資源があるかを確認してください。READMEはDockerが利用できない場合の代替動作や、プロセス内サービスだけを使う場合の最小権限までは説明していません。この境界は導入側の設計課題として残ります。

永続化方式をテストの目的で選ぶ

データをどのくらい残すかは、FLOCI_STORAGE_MODEで選択できます。READMEが示す方式はmemory、persistent、hybrid、write-ahead logです。memoryはRAMに保持し、停止時にデータを失うため、一時的なテストやCIに使いやすい設定です。persistentは書き込みをディスクへ即時に反映し、hybridは非同期にフラッシュします。write-ahead logは応答前に変更をログへ記録する方式として説明されています。ここで選ぶのは速度だけではありません。テストが終了した時点でデータを破棄したいのか、再起動後にも状態を確認したいのか、障害から復元する過程を試したいのかで、適した方式は変わります。AWS_ACCESS_KEY_IDが12桁の場合にアカウント識別へ使い、他の形式では既定アカウントへ戻すマルチアカウント分離もREADMEに記載されています。ローカルで分離されて見えても、本番IAMの境界を再現するものとは限らないため、権限テストは別に行うべきです。

SDKとIaCから接続する方法

Flociは、既存のAWSクライアントを大きく変えずにエンドポイントだけ差し替える使い方を想定しています。READMEにはJava v2、Pythonのboto3、Node.js v3、Go v2、Rust、AWS CLIからlocalhost:4566へ接続する例があります。Terraform、OpenTofu、AWS CDKのようなInfrastructure as Codeも対象に含まれます。Testcontainers向けにはJava、Node.js、Pythonのモジュールが案内され、Goは進行中とされています。READMEの互換性テスト欄はSDKとIaCの組み合わせを横断する自動テストを説明していますが、そこで示される件数やカバレッジはプロジェクト自身のテストスイートの数値です。独立した保証や、自分のアプリケーションが通ることの証明ではありません。CIへ組み込むときは、Flociの起動、エンドポイント設定、初期データ、終了時のクリーンアップを一つの再現可能な手順にまとめ、AWS本番で使わない認証情報を明示的に分けてください。

LocalStackからの移行判断

READMEは、LocalStack Communityからの移行先としてFlociを紹介しています。現在のイメージ名をlocalstack/localstackからfloci/floci:latestへ置き換え、AWS CLIやboto3を必要とする初期化スクリプトにはcompat付きのイメージを使う流れが示されています。LOCALSTACK_HOST、PERSISTENCE、DEBUGなどの環境変数をFloci側へ変換でき、初期化スクリプト、ヘルスエンドポイント、Ready.の出力も案内されています。古いhectorvent/flociイメージは更新されないため、READMEは新しいfloci/floci名への変更を促しています。移行は文字列置換だけで完了するとは限りません。旧環境が依存していた未実装API、イメージ内のツール、初期化順序、永続化の意味を一つずつ比較する必要があります。READMEの性能比較表にある起動時間、メモリ、イメージサイズはプロジェクトの自報値であり、測定条件が自分のCIと同じとは限りません。MITライセンスを含む配布条件も確認し、移行後の主要シナリオを実サービスで照合してから置き換えを決めてください。

編集部の結論

Flociは、クラウドアカウントを用意せずにAWS向けアプリケーションの開発やCIを進めたいチームに向きます。READMEは83サービス、ポート4566、複数のストレージ方式、Dockerで実行するサービスを示していますが、互換性をすべてのAPIで保証するものではありません。採用前に実際に使うSDKとIaC、Dockerソケットの権限、データ消失時の扱い、対象サービスの差分を小さなテストで確かめ、README記載の性能値は自報として扱ってください。

公式情報源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
コミュニティノート

コミュニティノート