我正在使用Java SDK将图像上传到S3,如何使CloudFront中的文件无效,以便从s3原点重新获取该文件。如何通过Java SDK实现?
答案 0 :(得分:9)
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分钟。
答案 1 :(得分:2)
来自AWS文档:
您可以同时为每个正在进行的分发提供最多3,000个对象网址的无效请求,每个无效请求最多可包含3,000个对象网址。只要不超过此限制,您就可以根据需要制作尽可能多的失效请求。例如,您可以创建30个失效,每个失效使100个对象无效,但只要所有30个失效仍在进行中,您就不能再创建失效。如果超出限制,CloudFront将返回错误消息。
CloudFront通常需要10到15分钟才能完成您的失效请求,具体取决于您在请求中包含的对象网址数量。
http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html
答案 2 :(得分:0)
通过使用对象无效,我们实现了这一点。
对象失效 - 使分发中的对象无效以强制CloudFront从S3源获取最新的对象数据。
请参阅此链接, http://jets3t.s3.amazonaws.com/toolkit/code-samples.html#cloudfront-invalidation
答案 3 :(得分:0)
使用新的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发行版中,并且将需要一段时间来处理(您可以注意到,失效状态为{{1}时,失效已完成) }。
答案 4 :(得分:0)
新更新:
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);