使用Lambda在S3上载时使CloudFront无效

时间:2018-02-08 16:18:13

标签: amazon-web-services amazon-s3 lambda amazon-cloudfront invalidation

我同时上传了10-50个文件。 Lambda为每个更新的文件触发一个事件(如果文件大小已更改)。

所以不要一个接一个地50x失效,而是希望在上传结束时运行一次通配符“*”字符。

任何人都可以阐明如何实现这一目标?谢谢!

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,您的lambda函数会知道CloudFront是否应该无效,但不知道该应该何时发生。

在这种情况下,您可以返回一个布尔标志(例如,mustInvalidate)作为响应的一部分,以指示应该创建无效请求。然后,您的应用程序(或任何启动批量上载请求的任何内容)可以在上载批次完成后立即创建/target-location/*无效请求。

答案 1 :(得分:0)

在您的Lambda函数中,使用AWS SDK for CloudFront使用sing通配符'/*'使分发无效。

var params = {
  DistributionId: 'STRING_VALUE', /* required */
  InvalidationBatch: { /* required */
    CallerReference: 'STRING_VALUE', /* required */
    Paths: { /* required */
      Quantity: 0, /* required */
      Items: [
        'STRING_VALUE',
        /* more items */
      ]
    }
  }
};
cloudfront.createInvalidation(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

注意:确保附加到Lambda函数的IAM角色具有执行无效操作所需的权限。