Giả lập Google Cloud Storage sử dụng fake-gcs-server

174

Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh

Khi làm việc với các Cloud Provider, chúng ta cần tính toán đến các giải pháp để tiết kiệm chi phí, ít nhất là ở giai đoạn development. Vì đa số các service của các Cloud Provider mà chúng ta cần sử dụng, sẽ ít nhiều tốn tiền. Một giải pháp mà mình giới thiệu với các bạn trong bài viết này là về giả lập Google Cloud Storage sử dụng một open-source tên là fake-gcs-server, phù hợp cho những dự án nào có sử dụng Google Cloud Platform. Nó giúp chúng ta có thể start lên một standalone server có chức năng gần giống với Google Cloud Storage. Các bạn có thể sử dụng các thư viện của Google provide để làm việc với Google Cloud Storage, để làm việc với open-source này luôn.

  Ứng dụng mới cực hot từ Google: Android Sunflower
  10 Add-on Google Sheets phải có dành cho các Recruiters

Cài đặt fake-gcs-server

fake-gcs-server cung cấp cho chúng ta một Docker Image, giúp chúng ta có thể dễ dàng start nó lên chỉ với vài bước.

Cụ thể, các bạn cần chạy Docker command sau:

docker run -d --name fake-gcs-server -p 4443:4443 fsouza/fake-gcs-server

Lúc này, nếu các bạn request tới URL để lấy thông tin Buckets list với host port sử dụng fake server: https://localhost:4443/storage/v1/b, các bạn sẽ thấy kết quả như sau:

Giả lập Google Cloud Storage sử dụng fake-gcs-server

Items hiển thị empty vì chúng ta chưa có một bucket nào trong fake-gcs-server.

Các bạn có thể mount một số data có sẵn và chạy fake-gcs-server như sau:

docker run -d --name fake-gcs-server -p 4443:4443 -v ${PWD}/examples/data:/data fsouza/fake-gcs-server

${PWD} là thư mục hiện hành các bạn đang chạy lệnh Docker cộng với thư mục example/data, sẽ được map với thư mục /data bên trong container của fake-gcs-server. Các bạn có thể thay đổi ${PWD}/examples/data thành bất cứ thư mục nào mà các bạn muốn. Những thư mục trong thư mục ${PWD}/examples/data này sẽ là những bucket, và tất nhiên những tập tin nằm trong các bucket sẽ là những object của những bucket này.

Ví dụ mình có tập tin test.txt nằm trong thư mục /Users/khanh/Document/data/sample-bucket, mình chạy câu lệnh start fake-gcs-server như sau:

docker run -d --name fake-gcs-server -p 4443:4443 -v /Users/khanh/Documents/data:/data fsouza/fake-gcs-server

thì lúc này sample-bucket sẽ là một bucket trong fake-gcs-server, và tập tin test.txt sẽ là một object trong bucket này.

Request lại URL https://localhost:4443/storage/v1/b, các bạn sẽ thấy kết quả như sau:

Giả lập Google Cloud Storage sử dụng fake-gcs-server

Lấy thông tin tất cả các object của bucket với URL https://localhost:4443/storage/v1/b/sample-bucket/o, các bạn sẽ thấy kết quả như sau:

Giả lập Google Cloud Storage sử dụng fake-gcs-server

Các bạn có thêm tuỳ ý bao nhiêu bucket cũng được, bao nhiêu object cũng được.

Mặc định thì fake-gcs-server sử dụng HTTPS, các bạn có thể sử dụng HTTP bằng cách thêm vào command start nó tham số scheme như sau:

docker run -d --name fake-gcs-server -p 4443:4443 -v /Users/khanh/Documents/data:/data fsouza/fake-gcs-server -scheme http

Lúc này chúng ta có thể sử dụng fake-gcs-server với HTTP:

Giả lập Google Cloud Storage sử dụng fake-gcs-server

Sử dụng Spring Cloud GCP Storage để access vào bucket của fake-gcs-server

Để access vào các bucket trên Google Cloud Storage, các bạn có thể sử dụng thư viện spring-cloud-gcp-storage. Chúng ta cũng có thể sử dụng thư viện này với fake-gcs-server.

Một điều các bạn cần lưu ý là chúng ta không cần sử dụng credentials để access vào các bucket của fake-gcs-server.

Mình sẽ tạo một Maven project đơn giản, khai báo sử dụng spring-cloud-gcp-storage để access vào fake-gcs-server mà mình đã start ở trên, như sau:

Giả lập Google Cloud Storage sử dụng fake-gcs-server

với:

<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>spring-cloud-gcp-storage</artifactId>
<version>2.0.3</version>
</dependency>

Mình sẽ tạo mới một class main, sử dụng API của spring-cloud-gcp-storage để access vào bucket sample-bucket như sau:

package com.huongdanjava.springcloudgcs;

import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class Application {

public static void main(String[] args) {
Storage storage = getStorage();
Blob blob = storage.get(BlobId.of("sample-bucket", "test.txt"));

System.out.println(blob.getGeneratedId());
}

private static Storage getStorage() {
// @formatter:off
StorageOptions storageOptions = StorageOptions.newBuilder()
.setHost("http://localhost:4443")
.build();
// @formatter:on

return storageOptions.getService();
}

}

Ở đây, mình không sử dụng credentials để access vào bucket của fake-gcs-server. Các bạn có thể thao tác trên bucket của fake-gcs-server tương tự như trên Google Cloud Storage sử dụng thư viện này.

Kết quả khi chạy ví dụ này như sau:

Giả lập Google Cloud Storage sử dụng fake-gcs-server

Các bạn có thể đọc thêm cuốn sách này Google Cloud Platform for Developers: Build highly scalable cloud solutions with the power of Google Cloud Platform để tìm hiểu về cách sử dụng các thư viện của Java để làm việc với Google Cloud Platform nhé!

Bài viết gốc được đăng tải tại huongdanjava.com

Có thể bạn quan tâm:

Xem thêm Việc làm IT hấp dẫn trên TopDev