openplanning

Java tạo, liệt kê và xoá S3 Bucket

  1. Thư viện
  2. Liệt kê các Bucket
  3. Tạo S3 Bucket
  4. Xoá S3 Bucket
MyUtils.java
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.AwsCredentials;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;

public class MyUtils {  

	public static S3Client createS3Client(Region region) {
		AwsCredentials credentials = AwsBasicCredentials.create("accessKeyId", "secretAccessKey");
		AwsCredentialsProvider credentialsProvider = StaticCredentialsProvider.create(credentials);

		S3Client client = S3Client.builder() //
				.credentialsProvider(credentialsProvider) //
				.region(region) //
				.build();

		return client;
	} 
}
Để tạo đối tượng S3Client bạn cần phải tạo một đối tượng AwsCredentialsProvider, đối tượng này cung cấp thông tin xác thực (Credentials) cho phép bạn tương tác với AWS. Xem thêm bài viết dưới đây để tạo một AwsCredentialsProvider phù hợp với mục đích sử dụng của bạn.

1. Thư viện

<!-- https://mvnrepository.com/artifact/software.amazon.awssdk/s3 -->
<dependency>
	<groupId>software.amazon.awssdk</groupId>
	<artifactId>s3</artifactId>
	<version>2.21.10</version>
</dependency>

<!-- https://mvnrepository.com/artifact/software.amazon.awssdk/s3-transfer-manager -->
<dependency>
	<groupId>software.amazon.awssdk</groupId>
	<artifactId>s3-transfer-manager</artifactId>
	<version>2.21.10</version>
</dependency>

<!-- https://mvnrepository.com/artifact/software.amazon.awssdk.crt/aws-crt -->
<dependency>
	<groupId>software.amazon.awssdk.crt</groupId>
	<artifactId>aws-crt</artifactId>
	<version>0.28.0</version>
</dependency>

<!-- Log Library -->
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-api</artifactId>
	<version>2.0.9</version>
</dependency>

<!-- Log Library -->
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-simple</artifactId>
	<version>2.0.9</version>
</dependency>

2. Liệt kê các Bucket

Ví dụ, sử dụng S3Client để liệt kê các Bucket của bạn trong một Region.
ListBucketExample.java
package org.o7planning.java_14257_awssdk_s3;

import org.o7planning.awssdks3.utils.MyUtils;

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.ListBucketsRequest;
import software.amazon.awssdk.services.s3.model.ListBucketsResponse;

public class ListBucketExample {
	private static Region myRegion = Region.EU_CENTRAL_1;

	private static void listBuckets(S3Client s3Client) {
		// List buckets
		ListBucketsRequest listBucketsRequest = ListBucketsRequest.builder().build();
		ListBucketsResponse listBucketsResponse = s3Client.listBuckets(listBucketsRequest);
		listBucketsResponse.buckets().stream().forEach(x -> System.out.println(x.name()));
	}

	public static void main(String[] args) {
		S3Client s3Client = MyUtils.createS3Client(myRegion);

		listBuckets(s3Client);
	}
}

3. Tạo S3 Bucket

Chú ý, tên của một Bucket là duy nhất đối với tất cả các người dùng, vì vậy bạn nên đặt tên cho Bucket theo gợi ý từ một tên miền website của bạn. Chẳng hạn như:
  • test1.yourdomain.com
  • test1-yourdomain-com
  • static.yourdomain.com
Ví dụ, sử dụng S3Client để tạo một Bucket
CreateBucketExample1.java
package org.o7planning.java_14257_awssdk_s3;

import org.o7planning.awssdks3.utils.MyUtils;

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.CreateBucketRequest;

public class CreateBucketExample1 {
	private static Region myRegion = Region.EU_CENTRAL_1;
	private static String bucketName = "test1.o7planning.org";

	// Create a bucket
	public static void createBucket(S3Client s3Client, String bucketName) {

		CreateBucketRequest createBucketRequest = CreateBucketRequest.builder() //
				.bucket(bucketName) //
				.build();

		s3Client.createBucket(createBucketRequest);
		System.out.println(bucketName + " is ready");
	}

	public static void main(String[] args) {
		S3Client s3Client = MyUtils.createS3Client(myRegion);

		createBucket(s3Client, bucketName);
	}
}
Ví dụ trên chúng ta đã tạo ra một Bucket riêng tư hoàn toàn, điều này có nghĩa là tất cả các đối tượng trong Bucket sẽ không thể được truy cập công khai. Vì vậy tuỳ thuộc vào mục đích sử dụng bạn cần thêm một vài thiết lập nhỏ.
  • Java Awssdk config Bucket
S3Waiter Example:
Nếu bạn đang tạo một S3 Bucket trên Thread-1, và Thread-2 đang chờ đợi Bucket này được tạo ra để thực hiện tiếp một hành động nào đó. Hãy sử dụng S3Waiter trong Thread-2.
CreateBucketExample2.java
package org.o7planning.java_14257_awssdk_s3;

import org.o7planning.awssdks3.utils.MyUtils;

import software.amazon.awssdk.core.waiters.WaiterResponse;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
import software.amazon.awssdk.services.s3.model.HeadBucketRequest;
import software.amazon.awssdk.services.s3.model.HeadBucketResponse;
import software.amazon.awssdk.services.s3.waiters.S3Waiter;

public class CreateBucketExample2 {
	private static Region myRegion = Region.EU_CENTRAL_1;
	private static String bucketName = "test5.o7planning.org";

	public static void main(String[] args) {
		new PubThread().start();

		new SubThread().start();
	}

	static class PubThread extends Thread {

		@Override
		public void run() {
			S3Client s3Client = MyUtils.createS3Client(myRegion);
			System.out.println("PubThread: Creating " + bucketName + " ...");

			CreateBucketRequest bucketRequest = CreateBucketRequest.builder() //
					.bucket(bucketName).build();

			s3Client.createBucket(bucketRequest);
			System.out.println("PubThread: " + bucketName + " is ready!");
		}
	}

	static class SubThread extends Thread {

		@Override
		public void run() {
			S3Client s3Client = MyUtils.createS3Client(myRegion);
			System.out.println("SubThread: Wait for bucket " + bucketName);

			//
			// Create S3Waiter
			//
			S3Waiter s3Waiter = s3Client.waiter();

			HeadBucketRequest bucketRequestWait = HeadBucketRequest.builder() //
					.bucket(bucketName) //
					.build();

			//
			// Wait until the bucket is created and print out the response.
			//
			WaiterResponse<HeadBucketResponse> waiterResponse //
					= s3Waiter.waitUntilBucketExists(bucketRequestWait);
			waiterResponse.matched().response().ifPresent(System.out::println);
			System.out.println("SubThread: " + bucketName + " is ready");
		}
	}
}
Output:
PubThread: Creating test5.o7planning.org ...
SubThread: Wait for bucket test5.o7planning.org
PubThread: test5.o7planning.org is ready!
HeadBucketResponse()
SubThread: test5.o7planning.org is ready

4. Xoá S3 Bucket

Trước khi xoá một Bucket bạn cần phải đảm bảo rằng nó là một Bucket rỗng nếu không dịch vụ sẽ trả về lỗi. Điều này có nghĩa là bạn cần xoá hết tất cả các đối tượng trên Bucket cũng như các phiên bản của mỗi đối tượng này nếu có.
Xem thêm cách xoá các đối tượng trên Bucket, bài viết này cũng bao gồm ví dụ xóa tất cả các đối tượng.
  • Java Awssdk S3 delete object
Đoạn code dưới đây sẽ xoá một S3 Bucket với giả định rằng nó là một Bucket rỗng.
DeleteBucketExample.java
package org.o7planning.java_14257_awssdk_s3;

import org.o7planning.awssdks3.utils.MyUtils;

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.DeleteBucketRequest;

public class DeleteBucketExample {
	private static Region myRegion = Region.EU_CENTRAL_1;
	private static String bucketName = "test1.o7planning.org";

	private static void deleteBucket(S3Client s3Client, String bucketName) {
		DeleteBucketRequest deleteBucketRequest = DeleteBucketRequest.builder() //
				.bucket(bucketName) //
				.build();

		s3Client.deleteBucket(deleteBucketRequest);
		s3Client.close();
		System.out.println("Done!");
	}

	public static void main(String[] args) {
		S3Client s3Client = MyUtils.createS3Client(myRegion);

		deleteBucket(s3Client, bucketName);
	}
}

Các hướng dẫn Amazon Web Services

Show More