繁体   English   中英

如何通过 Java AWS SDK 使 Cloudfront CDN 提供的文件(要刷新)无效?

[英]How to invalidate a file(to be refreshed) served from Cloudfront CDN via Java AWS SDK?

我正在使用 Java SDK 将图像上传到 S3,如何使 CloudFront 中的文件无效,以便从 s3 源重新获取它。 如何通过 Java SDK 做到这一点?

import com.amazonaws.services.cloudfront;
import com.amazonaws.services.cloudfront.model.CreateInvalidationRequest;
import com.amazonaws.services.cloudfront.model.Paths;
import com.amazonaws.services.cloudfront.model.InvalidationBatch;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;

AWSCredentials awsCredentials = new DefaultAWSCredentialsProviderChain().getCredentials();
AmazonCloudFrontClient client = new AmazonCloudFrontClient(awsCredentials);

Paths invalidation_paths = new Paths().withItems("/path/to/invalidate/foo.jpg", "/path/file2.txt").withQuantity(2);
InvalidationBatch invalidation_batch = new InvalidationBatch(invalidation_paths, "unique_id_like_a_date");
CreateInvalidationRequest invalidation = new CreateInvalidationRequest("distributionID", invalidation_batch);
CreateInvalidationResult ret = client.createInvalidation(invalidation);

请注意,您只能有三个并发失效; 失效似乎需要 10-30 分钟。

从 AWS 文档:

您一次最多可以对每个分发中的 3,000 个对象 URL 进行失效请求,并且每个失效请求最多可以包含 3,000 个对象 URL。 只要不超过此限制,您就可以根据需要发出任意数量的失效请求。 例如,您可以创建 30 个失效,每个失效 100 个对象,但只要所有 30 个失效仍在进行中,您就不能创建更多失效。 如果超出限制,CloudFront 将返回错误消息。

CloudFront 通常需要 10 到 15 分钟来完成您的失效请求,具体取决于您在请求中包含的对象 URL 的数量。

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html

使用新的 AWS Java SDK 2.x ,我已经成功地使一些路径无效:

        Paths invalidationPaths = Paths.builder()
                .items("/thing.txt", "/foo/bar/*")
                .quantity(2)
                .build();

        InvalidationBatch invalidationBatch = InvalidationBatch.builder()
                .paths(invalidationPaths)
                .callerReference("arcones")
                .build();

        CreateInvalidationRequest createInvalidationRequest = CreateInvalidationRequest.builder()
                .distributionId(distributionID)
                .invalidationBatch(invalidationBatch)
                .build();

        cloudFront.createInvalidation(createInvalidationRequest);

请记住,失效是异步的,因此当您运行它时,它将被发布到您的 CloudFront 分配,并且需要一段时间来处理(您可以注意到当状态变为Completed时失效已Completed )。

通过使用对象失效,我们实现了这一点。

对象无效 - 使分发中的对象无效以强制 CloudFront 从 S3 源获取最新的对象数据。

请参考此链接, http://jets3t.s3.amazonaws.com/toolkit/code-samples.html#cloudfront-invalidation

新更新:

import com.amazonaws.services.cloudfront;
import com.amazonaws.services.cloudfront.model.CreateInvalidationRequest;
import com.amazonaws.services.cloudfront.model.Paths;
import com.amazonaws.services.cloudfront.model.InvalidationBatch;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;

AWSCredentials awsCredentials = new DefaultAWSCredentialsProviderChain().getCredentials();

AmazonCloudFrontClient client =

                (AmazonCloudFrontClient) AmazonCloudFrontClientBuilder.standard()
                        .withCredentials(new AWSStaticCredentialsProvider(awsCredentials)).build();


Paths invalidation_paths = new Paths().withItems("/path/to/invalidate/foo.jpg", "/path/file2.txt").withQuantity(2);
// unique_id_like_a_date = "20201001090000".
InvalidationBatch invalidation_batch = new InvalidationBatch(invalidation_paths, "unique_id_like_a_date");
CreateInvalidationRequest invalidation = new CreateInvalidationRequest("distributionID", invalidation_batch);
CreateInvalidationResult ret = client.createInvalidation(invalidation);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM