Skip to content

Instantly share code, notes, and snippets.

@netroy
Created August 20, 2018 12:47
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save netroy/84f6aac249b68355610c4b45d84878a5 to your computer and use it in GitHub Desktop.
Multi Origin Cloudfront (using Lambda@Edge)
"use strict";
const { promisify } = require('util');
const { resolveCname } = require('dns');
const resolveCnameAsync = promisify(resolveCname);
let resultCache = null;
const deferClearCache = () => setTimeout(() => { resultCache = null }, 1000);
const resolve = async () => {
if (resultCache) {
return resultCache;
}
const result = await resolveCnameAsync('blahblah.host.com');
if (result[0].includes('us-east-1')) {
resultCache = ['us-east-1', 'east-bucket'];
} else {
resultCache = ['us-west-2', 'west-bucket'];
}
deferClearCache();
return resultCache;
};
exports.handler = async event => {
const request = event.Records[0].cf.request;
const [region, bucket] = await resolve();
const domainName = `${bucket}.s3.${region}.amazonaws.com`;
request.origin = {
s3: {
domainName,
region,
authMethod: 'none',
path: '',
}
};
request.headers['host'] = [{ key: 'host', value: domainName }];
return request;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment