Mỗi lập trình viên Spring Boot làm việc với AWS đều hiểu nỗi đau này. Bạn viết code giao tiếp với S3, SQS, hoặc DynamoDB. Để kiểm thử, bạn có phải mock mọi thứ (và phát hiện tại thời điểm triển khai rằng các mock của bạn sai), hoặc bạn trỏ các bài kiểm thử vào một tài khoản AWS thực (và cầu nguyện không ai xóa sai bucket).
LocalStack từng là câu trả lời. Rồi vào tháng 3 năm 2026, LocalStack ngừng cung cấp phiên bản Community miễn phí. Theo [blog của Floci](https://floci.io/blog/whos-actually-using-floci/), token xác thực trở nên bắt buộc, các bản cập nhật bảo mật đóng băng, và kho lưu trữ mã nguồn mở đã được gắn cờ hàng nghìn pipeline CI tự động tải phiên bản mới nhất đột nhiên phụ thuộc vào một dự án đang được đóng lại.
Đi vào **Floci**, một trình giả lập đám mây miễn phí vĩnh viễn theo giấy phép MIT, được ra mắt vào tháng 3 năm 2026 và đạt hơn 16.900 sao trên GitHub trong vòng bốn tháng.
## Floci Thực Sự Là Gì?
Floci là một bộ các trình giả lập đám mây được xây dựng với Quarkus Native (được biên dịch với GraalVM Mandrel thành một tệp thực thi độc lập). Nó chạy các dịch vụ của AWS, Azure và GCP trên máy của bạn. Không cần tài khoản đám mây, không cần khóa API, không có遥测 (telemetry).
Đối với AWS cụ thể, Floci cung cấp **68 dịch vụ** trên cổng 4566, cùng cổng với LocalStack sử dụng. Điều này có nghĩa là nếu bạn đã cấu hình LocalStack, việc chuyển đổi chỉ cần thay đổi một dòng trong tệp hình ảnh Docker.
Ba sản phẩm hiện có:
* **floci**: 68 dịch vụ AWS (S3, SQS, Lambda, DynamoDB, RDS, ECS, ElastiCache, MSK, và nhiều hơn nữa) trên cổng 4566
* **floci-az**: 22 dịch vụ Azure (Blob, Queue, Table, Functions, Key Vault, Event Hubs, Service Bus) trên cổng 4577
* **floci-gcp**: 22 dịch vụ GCP (Cloud Storage, Pub/Sub, Firestore, Datastore, Secret Manager, IAM) trên cổng 4588
Cả ba đều được cấp phép MIT và yêu cầu không cần thông tin xác thực.
## Tại Sao Điều Này Quan Trọng Với Lập Trình Viên Spring Boot?
Nếu bạn xây dựng các ứng dụng Spring Boot tích hợp với AWS, các bài kiểm thử tích hợp của bạn có thể chạm đến một hoặc nhiều dịch vụ này: S3 cho lưu trữ tệp, SQS cho nhắn tin, DynamoDB cho cơ sở dữ liệu NoSQL, hoặc RDS cho cơ sở dữ liệu quan hệ.
Floci chạy **các engine thực**, không phải mock. Đây là sự khác biệt quan trọng:
* **Lambda** chạy trong các container Docker thực với các runtime AWS thực tế (Java, Python, Node.js, Go)
* **RDS** khởi tạo các instance PostgreSQL, MySQL, hoặc MariaDB thực
* **ElastiCache** chạy Redis thực
* **MSK** chạy Kafka thực qua Redpanda
* **OpenSearch** chạy các cluster OpenSearch thực
Khi ứng dụng Spring Boot của bạn kết nối với S3 của Floci, nó sử dụng cùng các lệnh gọi AWS SDK, cùng xác thực SigV4, cùng giao thức HTTP như môi trường production. Nếu code của bạn hoạt động trên Floci, nó sẽ hoạt động trên AWS thực.
## Số Liệu Hiệu Suất
Floci là tệp thực thi native, không phải ứng dụng JVM. Các con số từ bộ benchmark của họ (1.925 bài kiểm thử tương thích SDK):
* **Khởi động**: 24ms (so với 3.3 giây của LocalStack)
* **Bộ nhớ nhàn rỗi**: 13 MiB (so với 143 MiB)
* **Kích thước hình ảnh Docker**: 90 MB (so với 1.0 GB)
* **Tương thích SDK**: 1.925/1.925 bài kiểm thử thành công, bao gồm 889/889 bài kiểm thử SDK Java v2
Đối với các pipeline CI, thời gian khởi động 24ms rất quan trọng. Job kiểm thử của bạn không còn lãng phí hơn 3 giây chờ trình giả lập khởi động trước khi bài kiểm thử đầu tiên có thể chạy.
## Cách Sử Dụng Floci Với Spring Boot
### Yêu Cầu Tiên Quyết: Các Phụ Thuộc Maven
Đối với Maven (thêm starter cho mỗi dịch vụ AWS bạn sử dụng):
“`
Spring Boot 3.1+ quản lý phiên bản Testcontainers trong BOM của nó, vì vậy bạn không cần chỉ định phiên bản. Mỗi Spring Cloud AWS starter tự động cấu hình bean client AWS tương ứng của nó (ví dụ: `spring-cloud-aws-starter-s3` cung cấp cho bạn `S3Client` được cấu hình tự động).
### Tùy Chọn 1: Docker Compose
Cách đơn giản nhất. Thêm Floci vào `docker-compose.yml`:
“`yaml
services:
floci:
image: floci/floci:latest
ports:
– “4566:4566”
“`
Sau đó trỏ ứng dụng Spring Boot của bạn tới localhost. Spring Cloud AWS cung cấp thuộc tính endpoint toàn cục áp dụng cho tất cả các client dịch vụ AWS được cấu hình tự động (nguồn: [tài liệu tham khảo Spring Cloud AWS](https://docs.awspring.io/spring-cloud-aws/docs/3.0.0/reference/html/index.html#endpoint)):
“`yaml
# application-test.yml
spring:
cloud:
aws:
endpoint: http://localhost:4566
region:
static: us-east-1
credentials:
access-key: test
secret-key: test
“`
Để ghi đè cho từng dịch vụ, bạn cũng có thể sử dụng `spring.cloud.aws.s3.endpoint`, `spring.cloud.aws.sqs.endpoint`, hoặc `spring.cloud.aws.dynamodb.endpoint`.
### Tùy Chọn 2: Testcontainers (Khuyến Nghị Cho Spring Boot)
Spring Boot hỗ trợ Testclasses từ phiên bản 3.1. Dự án Spring Cloud AWS đã thêm hỗ trợ Floci vào thiết lập kiểm thử tích hợp của nó (PR [#1604](https://github.com/awspring/spring-cloud-aws/pull/1604)).
Floci in dòng log `Ready.` theo phong cách LocalStack khi khởi động để tương thích Testcontainers (nguồn: [hướng dẫn di chuyển của Floci](https://floci.io/floci/getting-started/migrate-from-localstack/)), vì vậy chiến lược `Wait.forLogMessage` tiêu chuẩn hoạt động:
“`java
@SpringBootTest
@Testcontainers
class S3IntegrationTest {
@Container
static GenericContainer> floci = new GenericContainer<>(
DockerImageName.parse(“floci/floci:latest”))
.withExposedPorts(4566)
.waitingFor(Wait.forLogMessage(“.*Ready.*”, 1));
@DynamicPropertySource
static void configure(DynamicPropertyRegistry registry) {
String endpoint = “http://” + floci.getHost()
+ “:” + floci.getMappedPort(4566);
registry.add(“spring.cloud.aws.endpoint”, () -> endpoint);
}
@Autowired
private S3Client s3Client;
@Test
void shouldUploadAndDownloadFile() {
s3Client.createBucket(CreateBucketRequest.builder()
.bucket(“test-bucket”).build());
s3Client.putObject(PutObjectRequest.builder()
.bucket(“test-bucket”).key(“test.txt”).build(),
RequestBody.fromString(“Hello Floci”));
String content = s3Client.getObjectAsBytes(
GetObjectRequest.builder()
.bucket(“test-bucket”).key(“test.txt”).build())
.asString(StandardCharsets.UTF_8);
assertEquals(“Hello Floci”, content);
}
}
“`
Mẫu `@DynamicPropertySource` chèn endpoint của Floci vào ngữ cảnh Spring của bạn vào thời điểm kiểm thử. Code sản phẩm của bạn không bị ảnh hưởng.
## Ai Đã Sử Dụng Nó?
Đây không phải dự án thử nghiệm. Các nhóm thực đã di chuyển:
* **Apache Camel** thay thế LocalStack bằng Floci trên toàn bộ bộ kiểm thử AWS của nó. Bộ kiểm thử camel-aws giảm từ 6,5 phút xuống 4,5 phút ([PR #23404](https://github.com/apache/camel/pull/23404)).
* **Spring Cloud AWS** thêm Floci vào thiết lập kiểm thử tích hợp của nó ([PR #1604](https://github.com/awspring/spring-cloud-aws/pull/1604)).
* **Testcontainers cho .NET** phát hành mô-đun Floci chính thức ([PR #1690](https://github.com/testcontainers/testcontainers-dotnet/pull/1690)).
* **Quarkus AWS Services** (Quarkiverse) phát hành testcontainers-floci làm nhà cung cấp dev-services.
* **Just Eat Takeaway.com** di chuyển hai dự án mã nguồn mở về messaging.
* **Nhóm Chính phủ Vương quốc Anh** tại DEFRA, NHS Digital, và GOV.UK One Login đã áp dụng Floci.
Khi Apache Camel và Spring Cloud AWS tin tưởng một công cụ cho CI của họ, đó là một tín hiệu mạnh.
## Floci So Sánh với LocalStack: Sự So Sánh Khách Quan
LocalStack vẫn tồn tại như một sản phẩm trả phí. Nhưng phiên bản Community miễn phí đã chết, và nhiều nhóm cần một giải pháp thay thế miễn phí.
| Tính năng | Floci | LocalStack Community |
| — | — | — |
| Giá | Miễn phí vĩnh viễn | Yêu cầu token xác thực (Tháng 3, 2026) |
| Giấy phép | MIT | Apache 2.0 (đã gắn cờ hàng) |
| Bản cập nhật bảo mật | Đang hoạt động | Đã đóng băng |
| Thời gian khởi động | 24ms | 3,3 giây |
| Bộ nhớ nhàn rỗi | 13 MiB | 143 MiB |
| Hình ảnh Docker | 90 MB | 1,0 GB |
| Các bài kiểm thử Java SDK v2 | 889/889 thành công | Một phần |
| Lambda | Container Docker thực | Một phần |
| RDS | PostgreSQL/MySQL thực | Không khả dụng |
| ECS | Task Docker thực | Không khả dụng |
| EKS | API k8s sống (k3s) | Không khả dụng |
Cách tiếp cận engine thực của Floci là ưu điểm lớn nhất của nó. Khi bạn kiểm thử với S3 giả lập, bạn có thể bỏ lỡ các trường hợp cạnh như hành vi tải lên đa phần, xác thực URL đã ký trước, hoặc đánh giá chính sách bucket. Floci chạy stack giao thức thực, vì vậy những tình huống này hoạt động giống nhau trên local như trong môi trường production.
## Floci + Các Agent Lập Trình Mã Hóa AI
Một điều nữa đáng được nhắc đến. Nếu bạn sử dụng các trợ lý lập trình mã hóa AI như GitHub Copilot hoặc Claude Code để viết code đám mây, những agent đó cần một nơi an toàn để kiểm thử. Tài khoản đám mây thực đồng nghĩa với rủi ro hóa đơn thực và rò rỉ thông tin xác thực.
Floci cung cấp cho agent một đám mây local mà chúng có thể phá vỡ mà không có hậu quả. Không có thông tin xác thực để rò rỉ, không lo lắng về hóa đơn, vòng phản hồi 24ms. Agent viết code, chạy nó trên Floci, xác minh nó hoạt động, sau đó bạn xem lại trước khi triển khai.
## Khi Floci Có Thể Không Đủ
Floci mô phỏng control plane và data plane của các dịch vụ AWS. Nó không sao chép:
* **Độ trễ mạng** giữa các vùng
* **Độ trễ lan truyền IAM** (mặc dù IAM được mô phỏng, timing khác nhau)
* **Hạn ngạch dịch vụ** và hành vi giới hạn tốc độ
* **Chính sách ủy thác-cross account** trong các thiết lập phức tạp
Đối với hầu hết kiểm thử tích hợp và phát triển local, những khoảng trống này không quan trọng. Đối với kiểm thử hiệu suất hoặc kiểm toán bảo mật, bạn vẫn cần một môi trường AWS thực.
## Bắt Đầu
“`bash
# Cài đặt
curl -fsSL https://floci.io/install.sh | sh
# Khởi động trình giả lập AWS
floci start
# Đặt endpoint
export AWS_ENDPOINT_URL=http://localhost:4566
# Sử dụng nó
aws s3 mb s3://my-bucket –endpoint-url http://localhost:4566
“`
Hoặc với Docker:
“`bash
docker run -d -p 4566:4566 floci/floci:latest
“`
Floci miễn phí, được cấp phép MIT, và cộng đồng đang hoạt động. Kho lưu trữ GitHub tại [github.com/floci-io/floci](https://github.com/floci-io/floci).
## Tóm Tắt
Đối với lập trình viên Spring Boot làm việc với AWS, Floci giải quyết ba vấn đề cùng lúc: không hóa đơn đám mây trong quá trình phát triển, không các kết quả dương tính giả liên quan đến mock trong kiểm thử, và không phụ thuộc vào một tầng miễn phí đã chết. Cách tiếp cận engine thực có nghĩa là các bài kiểm thử tích hợp của bạn nắm bắt các vấn đề mà mock bỏ lỡ. Tốc độ tệp thực thi native có nghĩa là pipeline CI của bạn chạy nhanh hơn. Và giấy phép MIT có nghĩa là nó miễn phí vĩnh viễn.
Nếu bạn vẫn bị ràng buộc bởi một hình ảnh LocalStack đã gắn cờ hàng, việc di chuyển chỉ cần thay đổi một hình ảnh Docker. Code Spring Boot của bạn không cần thay đổi gì cả.
* * *
**Nguồn:**
* Trang chính thức của Floci: [https://floci.io/](https://floci.io/)
* GitHub của Floci: [https://github.com/floci-io/floci](https://github.com/floci-io/floci) (16.936 sao, giấy phép MIT)
* So sánh Floci với LocalStack: [https://floci.io/aws/compare/](https://floci.io/aws/compare/)
* Hướng dẫn di chuyển của Floci: [https://floci.io/floci/getting-started/migrate-from-localstack/](https://floci.io/floci/getting-started/migrate-from-localstack/)
* Bài blog “Who’s Actually Using Floci”: [https://floci.io/blog/whos-actually-using-floci/](https://floci.io/blog/whos-actually-using-floci/)
* Tài liệu tham khảo Spring Cloud AWS: [https://docs.awspring.io/spring-cloud-aws/docs/3.0.0/reference/html/index.html](https://docs.awspring.io/spring-cloud-aws/docs/3.0.0/reference/html/index.html)
* PR Floci của Spring Cloud AWS: [https://github.com/awspring/spring-cloud-aws/pull/1604](https://github.com/awspring/spring-cloud-aws/pull/1604)
* PR Floci của Apache Camel: [https://github.com/apache/camel/pull/23404](https://github.com/apache/camel/pull/23404)



