【问题标题】:How to invalidate a file(to be refreshed) served from Cloudfront CDN via Java AWS SDK?如何使通过 Java AWS SDK 从 Cloudfront CDN 提供的文件(要刷新)无效?
【发布时间】:2015-04-16 02:57:47
【问题描述】:

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

【问题讨论】:

    标签: java amazon-web-services amazon-cloudfront


    【解决方案1】:

    新的更新:

    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);
    

    【讨论】:

      【解决方案2】:

      使用新的 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 时,您会注意到失效已完成) .

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:
          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 分钟。

          【讨论】:

          • 查看我对失效限制的回答。
          【解决方案5】:

          来自 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

          【讨论】:

            猜你喜欢
            • 2019-12-06
            • 2018-04-09
            • 2021-02-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-11-05
            • 2017-10-01
            • 2016-10-12
            相关资源
            最近更新 更多