@scloud/cdk-patterns
Version:
Serverless CDK patterns for common infrastructure needs
114 lines • 12.8 kB
JavaScript
;
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==