cdk-turborepo-remote-cache
Version:
Deploy turborepo-remote-cache serverless on aws
66 lines • 9.37 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint-disable node/no-process-env */
const _1 = require(".");
const aws_cdk_lib_1 = require("aws-cdk-lib");
const fs = require("node:fs");
const path = require("node:path");
const zoneName = 'github.nimmervoll.work';
const domainName = 'cache.github.nimmervoll.work';
const app = new aws_cdk_lib_1.App();
class CertificatesStack extends aws_cdk_lib_1.Stack {
constructor(scope, id, props) {
super(scope, id, props);
const hostedZone = aws_cdk_lib_1.aws_route53.PublicHostedZone.fromLookup(this, 'HostedZone', {
domainName: zoneName,
});
this.certificate = new aws_cdk_lib_1.aws_certificatemanager.Certificate(this, 'Certificate', {
domainName,
validation: aws_cdk_lib_1.aws_certificatemanager.CertificateValidation.fromDns(hostedZone),
});
}
}
const { certificate } = new CertificatesStack(app, 'cdk-turborepo-remote-cache-certificate', {
env: {
account: process.env.CDK_DEFAULT_ACCOUNT,
region: 'us-east-1',
},
});
const stack = new aws_cdk_lib_1.Stack(app, 'cdk-turborepo-remote-cache', {
crossRegionReferences: true,
env: {
account: process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEFAULT_REGION,
},
});
const secretToken = fs
.readFileSync(path.join(__dirname, '../.env.local'), 'utf8')
.split('TURBO_TOKEN=')[1]
.split('\n')[0]
.trim();
const { functionUrl, bucket } = new _1.TurborepoRemoteCache(stack, 'TurborepoCache', {
secretToken,
});
bucket.addLifecycleRule({
expiration: aws_cdk_lib_1.Duration.days(7),
});
const zone = aws_cdk_lib_1.aws_route53.PublicHostedZone.fromLookup(stack, 'HostedZone', {
domainName: zoneName,
});
const functionUrlfqdn = aws_cdk_lib_1.Fn.select(2, aws_cdk_lib_1.Fn.split('/', functionUrl.url));
const distribution = new aws_cdk_lib_1.aws_cloudfront.Distribution(stack, 'Cache', {
certificate,
defaultBehavior: {
allowedMethods: aws_cdk_lib_1.aws_cloudfront.AllowedMethods.ALLOW_ALL,
origin: new aws_cdk_lib_1.aws_cloudfront_origins.HttpOrigin(functionUrlfqdn),
originRequestPolicy: aws_cdk_lib_1.aws_cloudfront.OriginRequestPolicy.ALL_VIEWER,
viewerProtocolPolicy: aws_cdk_lib_1.aws_cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
},
domainNames: [domainName],
});
new aws_cdk_lib_1.aws_route53.ARecord(stack, 'CacheRecord', {
recordName: `${domainName}.`,
target: aws_cdk_lib_1.aws_route53.RecordTarget.fromAlias(new aws_cdk_lib_1.aws_route53_targets.CloudFrontTarget(distribution)),
zone,
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuZGVmYXVsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnRlZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsd0NBQXdDO0FBQ3hDLHdCQUF3QztBQUV4Qyw2Q0FVb0I7QUFFcEIsOEJBQTZCO0FBQzdCLGtDQUFpQztBQUVqQyxNQUFNLFFBQVEsR0FBRyx3QkFBd0IsQ0FBQTtBQUN6QyxNQUFNLFVBQVUsR0FBRyw4QkFBOEIsQ0FBQTtBQUVqRCxNQUFNLEdBQUcsR0FBRyxJQUFJLGlCQUFHLEVBQUUsQ0FBQTtBQUVyQixNQUFNLGlCQUFrQixTQUFRLG1CQUFLO0lBR25DLFlBQW1CLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWlCO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBRXZCLE1BQU0sVUFBVSxHQUFHLHlCQUFXLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUN4RCxJQUFJLEVBQ0osWUFBWSxFQUNaO1lBQ0UsVUFBVSxFQUFFLFFBQVE7U0FDckIsQ0FDRixDQUFBO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLG9DQUFzQixDQUFDLFdBQVcsQ0FDdkQsSUFBSSxFQUNKLGFBQWEsRUFDYjtZQUNFLFVBQVU7WUFDVixVQUFVLEVBQ1Isb0NBQXNCLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztTQUNuRSxDQUNGLENBQUE7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxpQkFBaUIsQ0FDM0MsR0FBRyxFQUNILHdDQUF3QyxFQUN4QztJQUNFLEdBQUcsRUFBRTtRQUNILE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQjtRQUN4QyxNQUFNLEVBQUUsV0FBVztLQUNwQjtDQUNGLENBQ0YsQ0FBQTtBQUVELE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssQ0FBQyxHQUFHLEVBQUUsNEJBQTRCLEVBQUU7SUFDekQscUJBQXFCLEVBQUUsSUFBSTtJQUMzQixHQUFHLEVBQUU7UUFDSCxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUI7UUFDeEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCO0tBQ3ZDO0NBQ0YsQ0FBQyxDQUFBO0FBRUYsTUFBTSxXQUFXLEdBQUcsRUFBRTtLQUNuQixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLEVBQUUsTUFBTSxDQUFDO0tBQzNELEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNkLElBQUksRUFBRSxDQUFBO0FBRVQsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLHVCQUFvQixDQUN0RCxLQUFLLEVBQ0wsZ0JBQWdCLEVBQ2hCO0lBQ0UsV0FBVztDQUNaLENBQ0YsQ0FBQTtBQUVELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztJQUN0QixVQUFVLEVBQUUsc0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQzdCLENBQUMsQ0FBQTtBQUVGLE1BQU0sSUFBSSxHQUFHLHlCQUFXLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUU7SUFDeEUsVUFBVSxFQUFFLFFBQVE7Q0FDckIsQ0FBQyxDQUFBO0FBRUYsTUFBTSxlQUFlLEdBQUcsZ0JBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLGdCQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUVwRSxNQUFNLFlBQVksR0FBRyxJQUFJLDRCQUFjLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7SUFDbkUsV0FBVztJQUNYLGVBQWUsRUFBRTtRQUNmLGNBQWMsRUFBRSw0QkFBYyxDQUFDLGNBQWMsQ0FBQyxTQUFTO1FBQ3ZELE1BQU0sRUFBRSxJQUFJLG9DQUFzQixDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUM7UUFDOUQsbUJBQW1CLEVBQUUsNEJBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVO1FBQ2xFLG9CQUFvQixFQUFFLDRCQUFjLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCO0tBQzVFO0lBQ0QsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDO0NBQzFCLENBQUMsQ0FBQTtBQUVGLElBQUkseUJBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRTtJQUM1QyxVQUFVLEVBQUUsR0FBRyxVQUFVLEdBQUc7SUFDNUIsTUFBTSxFQUFFLHlCQUFXLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FDeEMsSUFBSSxpQ0FBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FDdkQ7SUFDRCxJQUFJO0NBQ0wsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm9kZS9uby1wcm9jZXNzLWVudiAqL1xuaW1wb3J0IHsgVHVyYm9yZXBvUmVtb3RlQ2FjaGUgfSBmcm9tICcuJ1xuaW1wb3J0IHR5cGUgeyBTdGFja1Byb3BzIH0gZnJvbSAnYXdzLWNkay1saWInXG5pbXBvcnQge1xuICBBcHAsXG4gIGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIsXG4gIGF3c19jbG91ZGZyb250LFxuICBhd3NfY2xvdWRmcm9udF9vcmlnaW5zLFxuICBhd3Nfcm91dGU1MyxcbiAgYXdzX3JvdXRlNTNfdGFyZ2V0cyxcbiAgRHVyYXRpb24sXG4gIEZuLFxuICBTdGFjayxcbn0gZnJvbSAnYXdzLWNkay1saWInXG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJ1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnXG5cbmNvbnN0IHpvbmVOYW1lID0gJ2dpdGh1Yi5uaW1tZXJ2b2xsLndvcmsnXG5jb25zdCBkb21haW5OYW1lID0gJ2NhY2hlLmdpdGh1Yi5uaW1tZXJ2b2xsLndvcmsnXG5cbmNvbnN0IGFwcCA9IG5ldyBBcHAoKVxuXG5jbGFzcyBDZXJ0aWZpY2F0ZXNTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgcHVibGljIHJlYWRvbmx5IGNlcnRpZmljYXRlOiBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyLkNlcnRpZmljYXRlXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcylcblxuICAgIGNvbnN0IGhvc3RlZFpvbmUgPSBhd3Nfcm91dGU1My5QdWJsaWNIb3N0ZWRab25lLmZyb21Mb29rdXAoXG4gICAgICB0aGlzLFxuICAgICAgJ0hvc3RlZFpvbmUnLFxuICAgICAge1xuICAgICAgICBkb21haW5OYW1lOiB6b25lTmFtZSxcbiAgICAgIH1cbiAgICApXG5cbiAgICB0aGlzLmNlcnRpZmljYXRlID0gbmV3IGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIuQ2VydGlmaWNhdGUoXG4gICAgICB0aGlzLFxuICAgICAgJ0NlcnRpZmljYXRlJyxcbiAgICAgIHtcbiAgICAgICAgZG9tYWluTmFtZSxcbiAgICAgICAgdmFsaWRhdGlvbjpcbiAgICAgICAgICBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyLkNlcnRpZmljYXRlVmFsaWRhdGlvbi5mcm9tRG5zKGhvc3RlZFpvbmUpLFxuICAgICAgfVxuICAgIClcbiAgfVxufVxuXG5jb25zdCB7IGNlcnRpZmljYXRlIH0gPSBuZXcgQ2VydGlmaWNhdGVzU3RhY2soXG4gIGFwcCxcbiAgJ2Nkay10dXJib3JlcG8tcmVtb3RlLWNhY2hlLWNlcnRpZmljYXRlJyxcbiAge1xuICAgIGVudjoge1xuICAgICAgYWNjb3VudDogcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfQUNDT1VOVCxcbiAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgfSxcbiAgfVxuKVxuXG5jb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdjZGstdHVyYm9yZXBvLXJlbW90ZS1jYWNoZScsIHtcbiAgY3Jvc3NSZWdpb25SZWZlcmVuY2VzOiB0cnVlLFxuICBlbnY6IHtcbiAgICBhY2NvdW50OiBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9BQ0NPVU5ULFxuICAgIHJlZ2lvbjogcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfUkVHSU9OLFxuICB9LFxufSlcblxuY29uc3Qgc2VjcmV0VG9rZW4gPSBmc1xuICAucmVhZEZpbGVTeW5jKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uZW52LmxvY2FsJyksICd1dGY4JylcbiAgLnNwbGl0KCdUVVJCT19UT0tFTj0nKVsxXVxuICAuc3BsaXQoJ1xcbicpWzBdXG4gIC50cmltKClcblxuY29uc3QgeyBmdW5jdGlvblVybCwgYnVja2V0IH0gPSBuZXcgVHVyYm9yZXBvUmVtb3RlQ2FjaGUoXG4gIHN0YWNrLFxuICAnVHVyYm9yZXBvQ2FjaGUnLFxuICB7XG4gICAgc2VjcmV0VG9rZW4sXG4gIH1cbilcblxuYnVja2V0LmFkZExpZmVjeWNsZVJ1bGUoe1xuICBleHBpcmF0aW9uOiBEdXJhdGlvbi5kYXlzKDcpLFxufSlcblxuY29uc3Qgem9uZSA9IGF3c19yb3V0ZTUzLlB1YmxpY0hvc3RlZFpvbmUuZnJvbUxvb2t1cChzdGFjaywgJ0hvc3RlZFpvbmUnLCB7XG4gIGRvbWFpbk5hbWU6IHpvbmVOYW1lLFxufSlcblxuY29uc3QgZnVuY3Rpb25VcmxmcWRuID0gRm4uc2VsZWN0KDIsIEZuLnNwbGl0KCcvJywgZnVuY3Rpb25VcmwudXJsKSlcblxuY29uc3QgZGlzdHJpYnV0aW9uID0gbmV3IGF3c19jbG91ZGZyb250LkRpc3RyaWJ1dGlvbihzdGFjaywgJ0NhY2hlJywge1xuICBjZXJ0aWZpY2F0ZSxcbiAgZGVmYXVsdEJlaGF2aW9yOiB7XG4gICAgYWxsb3dlZE1ldGhvZHM6IGF3c19jbG91ZGZyb250LkFsbG93ZWRNZXRob2RzLkFMTE9XX0FMTCxcbiAgICBvcmlnaW46IG5ldyBhd3NfY2xvdWRmcm9udF9vcmlnaW5zLkh0dHBPcmlnaW4oZnVuY3Rpb25VcmxmcWRuKSxcbiAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiBhd3NfY2xvdWRmcm9udC5PcmlnaW5SZXF1ZXN0UG9saWN5LkFMTF9WSUVXRVIsXG4gICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IGF3c19jbG91ZGZyb250LlZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICB9LFxuICBkb21haW5OYW1lczogW2RvbWFpbk5hbWVdLFxufSlcblxubmV3IGF3c19yb3V0ZTUzLkFSZWNvcmQoc3RhY2ssICdDYWNoZVJlY29yZCcsIHtcbiAgcmVjb3JkTmFtZTogYCR7ZG9tYWluTmFtZX0uYCxcbiAgdGFyZ2V0OiBhd3Nfcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgIG5ldyBhd3Nfcm91dGU1M190YXJnZXRzLkNsb3VkRnJvbnRUYXJnZXQoZGlzdHJpYnV0aW9uKVxuICApLFxuICB6b25lLFxufSlcbiJdfQ==