"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; };