2015-07-23 20 views
9

Tôi có một ứng dụng AngularJS được triển khai trong S3 & CloudFront. Quá trình xây dựng của tôi thông qua Grunt & Jenkins bao gồm một bước FileRev để đặt tên duy nhất cho mỗi phiên bản mới của tập lệnh JS của nhà cung cấp & của nhà cung cấp. Cuối cùng, FileRev cũng cập nhật các thẻ trang 'index.html' của tôi để tham khảo các phiên bản phiên bản mới nhất của tập lệnh nhà cung cấp & của tôi.Amazon CloudFront Versioning 'index.html'

Tất cả rất tốt, ngoại trừ ...

Làm thế nào để tôi nhận được CloudFront ngay lập tức vô hiệu hóa 'index.html' trong tất cả các địa điểm cạnh tôi, viết tắt của lập trình tạo ra một hiệu lực mới trên mỗi bản phát hành ??

Cảm ơn!

+0

Bạn có thể đã index.html phiên bản cũng cho mỗi bản phát hành nếu bạn không muốn làm mất hiệu lực. Trong những trường hợp như vậy trên mỗi bản phát hành, trình cân bằng hoặc proxy của bạn sẽ cần phải trỏ đến index.html mới Tôi sẽ gọi vô hiệu hóa trên index.html có cập nhật các phiên bản của tất cả các tài nguyên ui khác, thay vì làm tất cả các xiếc này. – Dhananjay

+1

Bạn có thể định cấu hình Jenkins để sử dụng AWS CLI để thực hiện cuộc gọi để làm mất hiệu lực tệp index.html trong CloudFront https://docs.aws.amazon.com/cli/latest/reference/cloudfront/create-invalidation.html – JaredHatfield

+0

@ EarlD bạn đã giải quyết nó như thế nào? –

Trả lời

2

Đây là cách bạn có thể thực hiện việc này theo lập trình. Điều này sẽ là một phần của kịch bản triển khai của bạn. Chúng tôi sẽ chỉ làm mất hiệu lực index.html vì chúng ta đã versioning các nguồn lực khác thông qua tên của chúng:

const aws = require('aws-sdk') 

function invalidateIndex() { 
    const client = new aws.CloudFront({ 
    accessKeyId: process.env.AWS_ACCESS_ID, 
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, 
    }) 
    const invalidation = client.createInvalidation({ 
    DistributionId: process.env.AWS_CLOUDFRONT_DISTRIBUTION_ID, /* required */ 
    InvalidationBatch: { 
     /* required */ 
     CallerReference: Date.now() + '', /* required - request ID given by you, any string is okay*/ 
     Paths: { 
     /* required */ 
     Quantity: 1, /* required */ 
     Items: [ 
      '/', 
      /* more items */ 
     ] 
     } 
    } 
    }, function (err, data) { 
    if (err) console.log(err, err.stack); // an error occurred 
    else  console.log('Index was invalidated with invalidation id: ', data.Invalidation.Id);   // successful response 
    }) 
} 

invalidateIndex() 

Bạn có thể đọc thêm trong tài liệu API ở đây: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudFront.html#createInvalidation-property

+0

Bạn không cần phải chỉ định /index.html làm mục? Bài đăng tuyệt vời cảm ơn. – Learner

+0

@Learner được xử lý bởi 'Items: ['/']' – amit

Các vấn đề liên quan