Created
November 14, 2017 18:33
-
-
Save kingkool68/26aa7a3641a3851dc70ce7f44f589350 to your computer and use it in GitHub Desktop.
AWS Lambda Function for Proxying Requests to S3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* This is a simple AWS Lambda function that will look for a given file on S3 and return it | |
* passing along all of the headers of the S3 file. To make this available via a URL use | |
* API Gateway with an AWS Lambda Proxy Integration. | |
* | |
* Set the S3_REGION and S3_BUCKET global parameters in AWS Lambda | |
* Make sure the Lambda function is passed an object with `{ pathParameters : { proxy: 'path/to/file.jpg' } }` set | |
*/ | |
var AWS = require('aws-sdk'); | |
exports.handler = function( event, context, callback ) { | |
var region = process.env.S3_REGION; | |
var bucket = process.env.S3_BUCKET; | |
var key = decodeURI( event.pathParameters.proxy ); | |
// Basic server response | |
/* | |
var response = { | |
statusCode: 200, | |
headers: { | |
'Content-Type': 'text/plain', | |
}, | |
body: "Hello world!", | |
}; | |
callback( null, response ); | |
*/ | |
// Fetch from S3 | |
var s3 = new AWS.S3( Object.assign({ region: region }) ); | |
return s3.makeUnauthenticatedRequest( | |
'getObject', | |
{ Bucket: bucket, Key: key }, | |
function(err, data) { | |
if (err) { | |
return err; | |
} | |
var isBase64Encoded = false; | |
if ( data.ContentType.indexOf('image/') > -1 ) { | |
isBase64Encoded = true; | |
} | |
var encoding = ''; | |
if ( isBase64Encoded ) { | |
encoding = 'base64' | |
} | |
var resp = { | |
statusCode: 200, | |
headers: { | |
'Content-Type': data.ContentType, | |
}, | |
body: new Buffer(data.Body).toString(encoding), | |
isBase64Encoded: isBase64Encoded | |
}; | |
callback(null, resp); | |
} | |
); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@apotox I was wondering if you managed to get Lambda to act as a proxy to serve S3 static website content? I tried your code above but I keep getting 404 body not found!