Vô hiệu hoá bộ nhớ đệm của CloudFront với Java
Như bạn đã biết, Amazon CloudFront là mạng phân phối nội dung (Content Delivery Network - CDN) cung cấp khả năng phân phối nội dung web tĩnh và động nhanh chóng và an toàn cho người dùng trên toàn thế giới. CloudFront có một tính năng gọi là vô hiệu hóa bộ đệm (cache invalidation), cho phép bạn xóa nội dung được lưu trong bộ nhớ đệm khỏi CDN để có thể phân phối nội dung mới tới người dùng.
Trong bài viết giới thiệu về Amazon CloudFront tôi đã giải thích về kiến trúc và cách mà CloudFront hoạt động. Nó giúp bạn hiểu lý do tại sao chúng ta phải vô hiệu hoá (invalidate) bộ đệm của CloudFront mỗi khi máy chủ gốc (origin server) được cập nhập dữ liệu mới.
Về cơ bản, bạn có thể vô hiệu hoá (invalidate) bộ nhớ đệm của CloudFront một cách thủ công trên AWS Management Console.
Trong bài viết này tôi sẽ hướng dẫn bạn sử dụng Java Awssdk CloudFront để vô hiệu hoá (invalidate) bộ nhớ đệm của CloudFront, điều này giúp ứng dụng của bạn có tính tự động hoá cao hơn.
Đầu tiên bạn cần viết một lớp tiện ích để tạo đối tượng CloudFrontClient.
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.cloudfront.CloudFrontClient;
public class MyUtils {
public static CloudFrontClient createCloudFrontClient(Region region) {
AwsCredentials credentials = AwsBasicCredentials.create("accessKeyId", "secretAccessKey");
AwsCredentialsProvider credentialsProvider = StaticCredentialsProvider.create(credentials);
CloudFrontClient cloudFrontClient = CloudFrontClient.builder() //
.credentialsProvider(credentialsProvider) //
.region(region) //
.build();
return cloudFrontClient;
}
}
Để tạo đối tượng CloudFrontClient 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.
Thư viện
<!-- https://mvnrepository.com/artifact/software.amazon.awssdk/cloudfront -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>cloudfront</artifactId>
<version>2.21.14</version>
</dependency>
CloudFront Invalidation
Trên AWS Management Console bạn có thể tìm thấy "Distribution ID" tương ứng với bản phân phối nội dung (Content Distribution) của bạn.
Ví dụ, sử dụng Java Awssdk CloudFront để vô hiệu hoá bộ nhớ đệm trên một CloudFront Distribution.
CloudFrontInvalidationUtils.java
package org.o7planning.java_14203_awssdk_cloudfront;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import org.o7planning.awssdkcloudfront.MyUtils;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.cloudfront.CloudFrontClient;
import software.amazon.awssdk.services.cloudfront.model.CreateInvalidationRequest;
import software.amazon.awssdk.services.cloudfront.model.CreateInvalidationResponse;
import software.amazon.awssdk.services.cloudfront.model.InvalidationBatch;
import software.amazon.awssdk.services.cloudfront.model.Paths;
public class CloudFrontInvalidationUtils {
// @invalidationPaths: /thing.txt, /foo/bar/*
public static void sendInvalidation(Region region, //
String cloudFrontDistributionId, String... invalidationPaths) {
CloudFrontClient cloudFrontClient = MyUtils.createCloudFrontClient(region);
Paths paths = Paths.builder() //
.items(invalidationPaths) //
.quantity(invalidationPaths.length) //
.build();
// Unique ID like a date: "20201001090000"
LocalDateTime now = LocalDateTime.now();
String referenceUniqueId = now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
System.out.println("Invalidation referenceUniqueId: " + referenceUniqueId);
//
InvalidationBatch invalidationBatch = InvalidationBatch.builder() //
.paths(paths) //
.callerReference(referenceUniqueId) //
.build();
CreateInvalidationRequest createInvalidationRequest = CreateInvalidationRequest.builder()
.distributionId(cloudFrontDistributionId) //
.invalidationBatch(invalidationBatch) //
.build();
CreateInvalidationResponse response = cloudFrontClient.createInvalidation(createInvalidationRequest);
System.out.println("Invalidation Result: " + response);
System.out.println("Invalidation Done!");
}
}
InvalidationExample1.java
package org.o7planning.java_14203_awssdk_cloudfront;
import software.amazon.awssdk.regions.Region;
public class InvalidationExample1 {
// EU (Frankfurt) - Germany
private static final Region myCloudFrontRegion = Region.EU_CENTRAL_1;
private static final String myDistributionId = "Your-Distribution-ID";
public static void main(String[] args) {
String[] invalidationPaths = new String[] { //
"/*" // All Paths
};
CloudFrontInvalidationUtils.sendInvalidation( //
myCloudFrontRegion, // Distribution Regions
myDistributionId, // Distribution ID
invalidationPaths // Invalidation Paths
);
}
}
Các hướng dẫn Amazon Web Services
- Giới thiệu về Amazon Web Services (AWS)
- Giới thiệu về Amazon S3
- Giới thiệu về Amazon Cloudfront và kiến trúc của nó
- Làm sao để giảm chi phí Amazon Cloudfront?
- Vô hiệu hoá bộ nhớ đệm CloudFront
- Giới thiệu về DigitalOcean Spaces
- Hướng dẫn tạo DigitalOcean Spaces Bucket
- Giới thiệu về Amazon ACM
- Java Awssdk S3 Tải tệp lên S3 Bucket với S3Client
- Tạo AWS accessKeyId/secretAccessKey
- Java Awssdk S3 Liệt kê các đối tượng trong S3 Bucket
- Lưu trữ (host) một Website tĩnh trên Amazon S3
- Vô hiệu hoá bộ nhớ đệm của CloudFront với Java
- Tạo DigitalOcean Spaces Access Key
- Java Awssdk Các Credentials Provider thông dụng
- Java Awssdk Tạo và sử dụng ProfileCredentialsProvider
- Java Awssdk Tạo và sử dụng EnvironmentVariableCredentialsProvider
- Java Awssdk Tạo và sử dụng SystemPropertyCredentialsProvider
- Java Awssdk S3 Tải object lên với S3TransferManager
- Java Awssdk S3 Tải object xuống với S3TransferManager
- Java thao tác với DigitalOcean Spaces sử dụng S3TransferManager
- Java tạo, liệt kê và xoá S3 Bucket
- Aws Console Tạo tài khoản người dùng IAM
- Tạo một vùng chứa Amazon S3 (S3 Bucket)
- Các quy tắc chuyển hướng cho S3 Static Website
- Cấu hình tên miền tuỳ chỉnh cho website tĩnh Amazon S3
- Tạo bản phân phối CloudFront cho S3 Bucket
- Cấu hình các trang phản hồi lỗi cho CloudFront
- Tạo các chính sách S3 Bucket
- Công cụ tạo các chính sách cho AWS - policygen
- So sánh Amazon S3 Rest API Endpoint và S3 Web Endpoint
- Chuyển hướng trong S3 Website với x-amz-website-redirect-location
- Di chuyển (migrate) dịch vụ DNS tới Amazon Route 53
- Chuyển (transfer) đăng ký tên miền tới Amazon Route 53
- Yêu cầu chứng chỉ SSL từ Amazon ACM
Show More