Skip to content

Instantly share code, notes, and snippets.

@netroy
Created August 20, 2018 12:47
Show Gist options
  • Save netroy/84f6aac249b68355610c4b45d84878a5 to your computer and use it in GitHub Desktop.
Save netroy/84f6aac249b68355610c4b45d84878a5 to your computer and use it in GitHub Desktop.

Revisions

  1. netroy created this gist Aug 20, 2018.
    39 changes: 39 additions & 0 deletions lambda.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,39 @@
    "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;
    };