UNPKG

@scloud/cdk-patterns

Version:

Serverless CDK patterns for common infrastructure needs

114 lines 12.8 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.apiGateway = apiGateway; exports.apiGatewayContainer = apiGatewayContainer; const route53 = __importStar(require("aws-cdk-lib/aws-route53")); const apigateway = __importStar(require("aws-cdk-lib/aws-apigateway")); const aws_certificatemanager_1 = require("aws-cdk-lib/aws-certificatemanager"); const aws_route53_1 = require("aws-cdk-lib/aws-route53"); const aws_route53_targets_1 = require("aws-cdk-lib/aws-route53-targets"); const lambdaFunctionDeprecated_1 = require("./lambdaFunctionDeprecated"); /** * An API gateway backed by a Lambda function. * @param construct Parent CDK construct (typically 'this') * @param initialPass If the infrastructure is being built from scratch: true; * for incremental deployments: false * @param name The name for this gateway and associated resources * @param zone DNS zone to use for this API * @param environment Environment variables for the backing Lambda function * @param apiDomainName Domain name to use for this API. Defaults to `api.${zone.zoneName}` * @returns */ function apiGateway(construct, name, zone, environment, apiDomainName, memory = 128) { const domainName = apiDomainName || `api.${zone.zoneName}`; const lambda = (0, lambdaFunctionDeprecated_1.zipFunction)(construct, name, environment, { memorySize: memory }); const api = new apigateway.LambdaRestApi(construct, `${name}ApiGateway`, { handler: lambda, proxy: true, description: name, domainName: { domainName, certificate: new aws_certificatemanager_1.DnsValidatedCertificate(construct, `${name}Certificate`, { domainName, hostedZone: zone, }), }, }); // DNS record new route53.ARecord(construct, `${name}ARecord`, { zone, recordName: domainName, target: aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.ApiGateway(api)), comment: `A record for API gateway ${name} API gateway`, }); return { lambda, api }; } /** * An API gateway backed by a Lambda function. * @param construct Parent CDK construct (typically 'this') * @param initialPass If the infrastructure is being built from scratch: true; * for incremental deployments: false * @param name The name for this gateway and associated resources * @param zone DNS zone to use for this API * @param environment Environment variables for the backing Lambda function * @param domainName Domain name to use for this API. Defaults to `api.${zone.zoneName}` * @returns */ function apiGatewayContainer(construct, initialPass, name, zone, environment, apiDomainName) { const domainName = apiDomainName || `api.${zone.zoneName}`; const { lambda, repository } = (0, lambdaFunctionDeprecated_1.containerFunction)(construct, initialPass, name, environment, undefined, undefined, undefined); const api = new apigateway.LambdaRestApi(construct, `${name}ApiGateway`, { handler: lambda, proxy: true, description: name, domainName: { domainName, certificate: new aws_certificatemanager_1.DnsValidatedCertificate(construct, `${name}Certificate`, { domainName, hostedZone: zone, }), }, }); // DNS record new route53.ARecord(construct, `${name}ARecord`, { zone, recordName: domainName, target: aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.ApiGateway(api)), comment: `A record for API gateway ${name} API gateway`, }); return { lambda, api, repository }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpZ2F0ZXdheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZXByZWNhdGVkL2FwaWdhdGV3YXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQkEsZ0NBa0NDO0FBYUQsa0RBa0NDO0FBdkdELGlFQUFtRDtBQUVuRCx1RUFBeUQ7QUFJekQsK0VBQTZFO0FBQzdFLHlEQUF1RDtBQUN2RCx5RUFBNkQ7QUFDN0QseUVBQTRFO0FBRTVFOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixVQUFVLENBQ3hCLFNBQW9CLEVBQ3BCLElBQVksRUFDWixJQUF5QixFQUN6QixXQUF3QyxFQUN4QyxhQUFzQixFQUN0QixTQUFpQixHQUFHO0lBRXBCLE1BQU0sVUFBVSxHQUFHLGFBQWEsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUUzRCxNQUFNLE1BQU0sR0FBRyxJQUFBLHNDQUFXLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUVqRixNQUFNLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLEdBQUcsSUFBSSxZQUFZLEVBQUU7UUFDdkUsT0FBTyxFQUFFLE1BQU07UUFDZixLQUFLLEVBQUUsSUFBSTtRQUNYLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLFVBQVUsRUFBRTtZQUNWLFVBQVU7WUFDVixXQUFXLEVBQUUsSUFBSSxnREFBdUIsQ0FBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLGFBQWEsRUFBRTtnQkFDeEUsVUFBVTtnQkFDVixVQUFVLEVBQUUsSUFBSTthQUNqQixDQUFDO1NBQ0g7S0FDRixDQUFDLENBQUM7SUFFSCxhQUFhO0lBQ2IsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksU0FBUyxFQUFFO1FBQy9DLElBQUk7UUFDSixVQUFVLEVBQUUsVUFBVTtRQUN0QixNQUFNLEVBQUUsMEJBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxnQ0FBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sRUFBRSw0QkFBNEIsSUFBSSxjQUFjO0tBQ3hELENBQUMsQ0FBQztJQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FDakMsU0FBb0IsRUFDcEIsV0FBb0IsRUFDcEIsSUFBWSxFQUNaLElBQXlCLEVBQ3pCLFdBQXdDLEVBQ3hDLGFBQXNCO0lBRXRCLE1BQU0sVUFBVSxHQUFHLGFBQWEsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUUzRCxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUEsNENBQWlCLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFN0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksWUFBWSxFQUFFO1FBQ3ZFLE9BQU8sRUFBRSxNQUFNO1FBQ2YsS0FBSyxFQUFFLElBQUk7UUFDWCxXQUFXLEVBQUUsSUFBSTtRQUNqQixVQUFVLEVBQUU7WUFDVixVQUFVO1lBQ1YsV0FBVyxFQUFFLElBQUksZ0RBQXVCLENBQUMsU0FBUyxFQUFFLEdBQUcsSUFBSSxhQUFhLEVBQUU7Z0JBQ3hFLFVBQVU7Z0JBQ1YsVUFBVSxFQUFFLElBQUk7YUFDakIsQ0FBQztTQUNIO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsYUFBYTtJQUNiLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLFNBQVMsRUFBRTtRQUMvQyxJQUFJO1FBQ0osVUFBVSxFQUFFLFVBQVU7UUFDdEIsTUFBTSxFQUFFLDBCQUFZLENBQUMsU0FBUyxDQUFDLElBQUksZ0NBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxPQUFPLEVBQUUsNEJBQTRCLElBQUksY0FBYztLQUN4RCxDQUFDLENBQUM7SUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcm91dGU1MyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1Myc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGFwaWdhdGV3YXkgZnJvbSAnYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXknO1xuaW1wb3J0IHsgRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IElSZXBvc2l0b3J5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcic7XG5pbXBvcnQgeyBMYW1iZGFSZXN0QXBpIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXknO1xuaW1wb3J0IHsgRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCB7IFJlY29yZFRhcmdldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzJztcbmltcG9ydCB7IEFwaUdhdGV3YXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzJztcbmltcG9ydCB7IGNvbnRhaW5lckZ1bmN0aW9uLCB6aXBGdW5jdGlvbiB9IGZyb20gJy4vbGFtYmRhRnVuY3Rpb25EZXByZWNhdGVkJztcblxuLyoqXG4gKiBBbiBBUEkgZ2F0ZXdheSBiYWNrZWQgYnkgYSBMYW1iZGEgZnVuY3Rpb24uXG4gKiBAcGFyYW0gY29uc3RydWN0IFBhcmVudCBDREsgY29uc3RydWN0ICh0eXBpY2FsbHkgJ3RoaXMnKVxuICogQHBhcmFtIGluaXRpYWxQYXNzIElmIHRoZSBpbmZyYXN0cnVjdHVyZSBpcyBiZWluZyBidWlsdCBmcm9tIHNjcmF0Y2g6IHRydWU7XG4gKiBmb3IgaW5jcmVtZW50YWwgZGVwbG95bWVudHM6IGZhbHNlXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBmb3IgdGhpcyBnYXRld2F5IGFuZCBhc3NvY2lhdGVkIHJlc291cmNlc1xuICogQHBhcmFtIHpvbmUgRE5TIHpvbmUgdG8gdXNlIGZvciB0aGlzIEFQSVxuICogQHBhcmFtIGVudmlyb25tZW50IEVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGJhY2tpbmcgTGFtYmRhIGZ1bmN0aW9uXG4gKiBAcGFyYW0gYXBpRG9tYWluTmFtZSBEb21haW4gbmFtZSB0byB1c2UgZm9yIHRoaXMgQVBJLiBEZWZhdWx0cyB0byBgYXBpLiR7em9uZS56b25lTmFtZX1gXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBpR2F0ZXdheShcbiAgY29uc3RydWN0OiBDb25zdHJ1Y3QsXG4gIG5hbWU6IHN0cmluZyxcbiAgem9uZTogcm91dGU1My5JSG9zdGVkWm9uZSxcbiAgZW52aXJvbm1lbnQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZzsgfSxcbiAgYXBpRG9tYWluTmFtZT86IHN0cmluZyxcbiAgbWVtb3J5OiBudW1iZXIgPSAxMjgsXG4pOiB7IGxhbWJkYTogRnVuY3Rpb24sIGFwaTogTGFtYmRhUmVzdEFwaTsgfSB7XG4gIGNvbnN0IGRvbWFpbk5hbWUgPSBhcGlEb21haW5OYW1lIHx8IGBhcGkuJHt6b25lLnpvbmVOYW1lfWA7XG5cbiAgY29uc3QgbGFtYmRhID0gemlwRnVuY3Rpb24oY29uc3RydWN0LCBuYW1lLCBlbnZpcm9ubWVudCwgeyBtZW1vcnlTaXplOiBtZW1vcnkgfSk7XG5cbiAgY29uc3QgYXBpID0gbmV3IGFwaWdhdGV3YXkuTGFtYmRhUmVzdEFwaShjb25zdHJ1Y3QsIGAke25hbWV9QXBpR2F0ZXdheWAsIHtcbiAgICBoYW5kbGVyOiBsYW1iZGEsXG4gICAgcHJveHk6IHRydWUsXG4gICAgZGVzY3JpcHRpb246IG5hbWUsXG4gICAgZG9tYWluTmFtZToge1xuICAgICAgZG9tYWluTmFtZSxcbiAgICAgIGNlcnRpZmljYXRlOiBuZXcgRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUoY29uc3RydWN0LCBgJHtuYW1lfUNlcnRpZmljYXRlYCwge1xuICAgICAgICBkb21haW5OYW1lLFxuICAgICAgICBob3N0ZWRab25lOiB6b25lLFxuICAgICAgfSksXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gRE5TIHJlY29yZFxuICBuZXcgcm91dGU1My5BUmVjb3JkKGNvbnN0cnVjdCwgYCR7bmFtZX1BUmVjb3JkYCwge1xuICAgIHpvbmUsXG4gICAgcmVjb3JkTmFtZTogZG9tYWluTmFtZSxcbiAgICB0YXJnZXQ6IFJlY29yZFRhcmdldC5mcm9tQWxpYXMobmV3IEFwaUdhdGV3YXkoYXBpKSksXG4gICAgY29tbWVudDogYEEgcmVjb3JkIGZvciBBUEkgZ2F0ZXdheSAke25hbWV9IEFQSSBnYXRld2F5YCxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgbGFtYmRhLCBhcGkgfTtcbn1cblxuLyoqXG4gKiBBbiBBUEkgZ2F0ZXdheSBiYWNrZWQgYnkgYSBMYW1iZGEgZnVuY3Rpb24uXG4gKiBAcGFyYW0gY29uc3RydWN0IFBhcmVudCBDREsgY29uc3RydWN0ICh0eXBpY2FsbHkgJ3RoaXMnKVxuICogQHBhcmFtIGluaXRpYWxQYXNzIElmIHRoZSBpbmZyYXN0cnVjdHVyZSBpcyBiZWluZyBidWlsdCBmcm9tIHNjcmF0Y2g6IHRydWU7XG4gKiBmb3IgaW5jcmVtZW50YWwgZGVwbG95bWVudHM6IGZhbHNlXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBmb3IgdGhpcyBnYXRld2F5IGFuZCBhc3NvY2lhdGVkIHJlc291cmNlc1xuICogQHBhcmFtIHpvbmUgRE5TIHpvbmUgdG8gdXNlIGZvciB0aGlzIEFQSVxuICogQHBhcmFtIGVudmlyb25tZW50IEVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGJhY2tpbmcgTGFtYmRhIGZ1bmN0aW9uXG4gKiBAcGFyYW0gZG9tYWluTmFtZSBEb21haW4gbmFtZSB0byB1c2UgZm9yIHRoaXMgQVBJLiBEZWZhdWx0cyB0byBgYXBpLiR7em9uZS56b25lTmFtZX1gXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBpR2F0ZXdheUNvbnRhaW5lcihcbiAgY29uc3RydWN0OiBDb25zdHJ1Y3QsXG4gIGluaXRpYWxQYXNzOiBib29sZWFuLFxuICBuYW1lOiBzdHJpbmcsXG4gIHpvbmU6IHJvdXRlNTMuSUhvc3RlZFpvbmUsXG4gIGVudmlyb25tZW50PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmc7IH0sXG4gIGFwaURvbWFpbk5hbWU/OiBzdHJpbmcsXG4pOiB7IGxhbWJkYTogRnVuY3Rpb24sIGFwaTogTGFtYmRhUmVzdEFwaSwgcmVwb3NpdG9yeTogSVJlcG9zaXRvcnk7IH0ge1xuICBjb25zdCBkb21haW5OYW1lID0gYXBpRG9tYWluTmFtZSB8fCBgYXBpLiR7em9uZS56b25lTmFtZX1gO1xuXG4gIGNvbnN0IHsgbGFtYmRhLCByZXBvc2l0b3J5IH0gPSBjb250YWluZXJGdW5jdGlvbihjb25zdHJ1Y3QsIGluaXRpYWxQYXNzLCBuYW1lLCBlbnZpcm9ubWVudCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG5cbiAgY29uc3QgYXBpID0gbmV3IGFwaWdhdGV3YXkuTGFtYmRhUmVzdEFwaShjb25zdHJ1Y3QsIGAke25hbWV9QXBpR2F0ZXdheWAsIHtcbiAgICBoYW5kbGVyOiBsYW1iZGEsXG4gICAgcHJveHk6IHRydWUsXG4gICAgZGVzY3JpcHRpb246IG5hbWUsXG4gICAgZG9tYWluTmFtZToge1xuICAgICAgZG9tYWluTmFtZSxcbiAgICAgIGNlcnRpZmljYXRlOiBuZXcgRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUoY29uc3RydWN0LCBgJHtuYW1lfUNlcnRpZmljYXRlYCwge1xuICAgICAgICBkb21haW5OYW1lLFxuICAgICAgICBob3N0ZWRab25lOiB6b25lLFxuICAgICAgfSksXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gRE5TIHJlY29yZFxuICBuZXcgcm91dGU1My5BUmVjb3JkKGNvbnN0cnVjdCwgYCR7bmFtZX1BUmVjb3JkYCwge1xuICAgIHpvbmUsXG4gICAgcmVjb3JkTmFtZTogZG9tYWluTmFtZSxcbiAgICB0YXJnZXQ6IFJlY29yZFRhcmdldC5mcm9tQWxpYXMobmV3IEFwaUdhdGV3YXkoYXBpKSksXG4gICAgY29tbWVudDogYEEgcmVjb3JkIGZvciBBUEkgZ2F0ZXdheSAke25hbWV9IEFQSSBnYXRld2F5YCxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgbGFtYmRhLCBhcGksIHJlcG9zaXRvcnkgfTtcbn1cbiJdfQ==