Skip to content

Instantly share code, notes, and snippets.

@wokamoto
Last active October 20, 2016 09:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wokamoto/a7c8b4e0493b1188fe9b465142b61234 to your computer and use it in GitHub Desktop.
Save wokamoto/a7c8b4e0493b1188fe9b465142b61234 to your computer and use it in GitHub Desktop.
[AWS][Lambda] S3に put object されたら自動的に Lambda で Expires ヘッダを追加する ref: http://qiita.com/wokamoto/items/85506f44b16cd0dfea32
console.log('Loading event');
var aws = require('aws-sdk');
var s3 = new aws.S3({apiVersion: '2006-03-01'});
exports.handler = function(event, context) {
console.log('Received event:');
console.log(JSON.stringify(event, null, ' '));
// Get the object from the event and show its content type
var bucket = event.Records[0].s3.bucket.name;
var key = event.Records[0].s3.object.key;
s3.getObject({Bucket:bucket, Key:key},
function(err,data) {
if (err) {
console.log('error getting object ' + key + ' from bucket ' + bucket +
'. Make sure they exist and your bucket is in the same region as this function.');
context.done('error','error getting file'+err);
}
else {
console.log('logging Cache-Control : ',data.CacheControl);
if (typeof data.CacheControl != 'undefined'){
console.log('cache control was already exists.');
context.done(null,'skip execution.');
}else {
var Expires = new Date();
var ContentType = data.ContentType ? data.ContentType : 'application/octet-stream';
var CacheControl = 1;
// set expires date
switch( true ){
case /html/.test(ContentType):
CacheControl = 1; // 1day
break;
case /^(image|video|audio)\//.test(ContentType):
CacheControl = 365; // 1year
break;
case /(javascript|css|text)/.test(ContentType):
CacheControl = 30; // 1month
break;
case /^application/.test(ContentType):
CacheControl = 30; // 1month
break;
}
Expires.setDate(Expires.getDate() + CacheControl);
var params = {
Bucket: bucket, /* required */
CopySource: bucket + "/" + key,
Key: key, /* required */
ContentType: ContentType,
Expires: Expires,
CacheControl: "max-age="+(86400 * CacheControl).toString(),
MetadataDirective: "REPLACE"
};
console.log('replace object.');
console.log('bucket : ' + bucket);
console.log('CopySource : ' + bucket + "/" + key);
s3.copyObject(params, function(err2, data2){
if (err2){
context.done('error','error2 getting file'+err2);
}else{
console.log('replace done! Cache-Control : ',data2.CacheControl);
}
context.done(null,'object meta-data changed.');
});
}
}
}
);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment