cdk-internal-gateway
Version:
CDK construct to create to create internal serverless applications.
81 lines • 12.3 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.InternalApiGateway = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const aws_cdk_lib_1 = require("aws-cdk-lib");
const constructs_1 = require("constructs");
class InternalApiGateway extends constructs_1.Construct {
constructor(scope, id, props) {
super(scope, id);
let apiResourcePolicy = props.policy;
if (!apiResourcePolicy) {
apiResourcePolicy = new aws_cdk_lib_1.aws_iam.PolicyDocument({
statements: [
new aws_cdk_lib_1.aws_iam.PolicyStatement({
effect: aws_cdk_lib_1.aws_iam.Effect.DENY,
principals: [new aws_cdk_lib_1.aws_iam.AnyPrincipal()],
actions: ["execute-api:Invoke"],
resources: ["execute-api:/*/*/*"],
conditions: {
StringNotEquals: {
"aws:sourceVpce": props.vpcEndpoint.vpcEndpointId,
},
},
}),
new aws_cdk_lib_1.aws_iam.PolicyStatement({
effect: aws_cdk_lib_1.aws_iam.Effect.ALLOW,
principals: [new aws_cdk_lib_1.aws_iam.AnyPrincipal()],
actions: ["execute-api:Invoke"],
resources: ["execute-api:/*/*/*"],
conditions: {
StringEquals: {
"aws:sourceVpce": props.vpcEndpoint.vpcEndpointId,
},
},
}),
],
});
}
if (props.endpointConfiguration &&
props.endpointConfiguration.types &&
!props.endpointConfiguration.types.includes(aws_cdk_lib_1.aws_apigateway.EndpointType.PRIVATE)) {
throw new Error("InternalApiGateway: endpointConfiguration.types must be EndpointType.PRIVATE");
}
if (props.endpointConfiguration &&
props.endpointConfiguration.vpcEndpoints &&
props.endpointConfiguration.vpcEndpoints.length === 0) {
throw new Error("InternalApiGateway: endpointConfiguration.vpcEndpoints must be set");
}
this.apiGateway = new aws_cdk_lib_1.aws_apigateway.RestApi(this, `Gateway-${id}`, {
description: "This service serves an internal api gateway",
endpointConfiguration: {
types: [aws_cdk_lib_1.aws_apigateway.EndpointType.PRIVATE],
vpcEndpoints: [props.vpcEndpoint],
},
deployOptions: props.deployOptions
? props.deployOptions
: props.stage
? {
stageName: props.stage,
}
: undefined,
policy: apiResourcePolicy,
...props,
});
for (const domainItem of props.domains) {
new aws_cdk_lib_1.aws_apigateway.BasePathMapping(this, `-${domainItem}`, {
domainName: domainItem,
restApi: this.apiGateway,
stage: this.apiGateway.deploymentStage,
basePath: props.apiBasePathMappingPath
? props.apiBasePathMappingPath
: "",
});
}
}
}
exports.InternalApiGateway = InternalApiGateway;
_a = JSII_RTTI_SYMBOL_1;
InternalApiGateway[_a] = { fqn: "cdk-internal-gateway.InternalApiGateway", version: "1.5.1" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwtYXBpZ2F0ZXdheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnRlcm5hbC1hcGlnYXRld2F5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQTJFO0FBRTNFLDJDQUF1QztBQThCdkMsTUFBc0Isa0JBQW1CLFNBQVEsc0JBQVM7SUFTeEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE4QjtRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNyQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN2QixpQkFBaUIsR0FBRyxJQUFJLHFCQUFHLENBQUMsY0FBYyxDQUFDO2dCQUN6QyxVQUFVLEVBQUU7b0JBQ1YsSUFBSSxxQkFBRyxDQUFDLGVBQWUsQ0FBQzt3QkFDdEIsTUFBTSxFQUFFLHFCQUFHLENBQUMsTUFBTSxDQUFDLElBQUk7d0JBQ3ZCLFVBQVUsRUFBRSxDQUFDLElBQUkscUJBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDcEMsT0FBTyxFQUFFLENBQUMsb0JBQW9CLENBQUM7d0JBQy9CLFNBQVMsRUFBRSxDQUFDLG9CQUFvQixDQUFDO3dCQUNqQyxVQUFVLEVBQUU7NEJBQ1YsZUFBZSxFQUFFO2dDQUNmLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYTs2QkFDbEQ7eUJBQ0Y7cUJBQ0YsQ0FBQztvQkFDRixJQUFJLHFCQUFHLENBQUMsZUFBZSxDQUFDO3dCQUN0QixNQUFNLEVBQUUscUJBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSzt3QkFDeEIsVUFBVSxFQUFFLENBQUMsSUFBSSxxQkFBRyxDQUFDLFlBQVksRUFBRSxDQUFDO3dCQUNwQyxPQUFPLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzt3QkFDL0IsU0FBUyxFQUFFLENBQUMsb0JBQW9CLENBQUM7d0JBQ2pDLFVBQVUsRUFBRTs0QkFDVixZQUFZLEVBQUU7Z0NBQ1osZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhOzZCQUNsRDt5QkFDRjtxQkFDRixDQUFDO2lCQUNIO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQ0UsS0FBSyxDQUFDLHFCQUFxQjtZQUMzQixLQUFLLENBQUMscUJBQXNCLENBQUMsS0FBSztZQUNsQyxDQUFDLEtBQUssQ0FBQyxxQkFBc0IsQ0FBQyxLQUFNLENBQUMsUUFBUSxDQUMzQyw0QkFBVSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ2hDLEVBQ0QsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsOEVBQThFLENBQy9FLENBQUM7UUFDSixDQUFDO1FBRUQsSUFDRSxLQUFLLENBQUMscUJBQXFCO1lBQzNCLEtBQUssQ0FBQyxxQkFBc0IsQ0FBQyxZQUFZO1lBQ3pDLEtBQUssQ0FBQyxxQkFBc0IsQ0FBQyxZQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDdkQsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQ2Isb0VBQW9FLENBQ3JFLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLDRCQUFVLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1lBQzlELFdBQVcsRUFBRSw2Q0FBNkM7WUFDMUQscUJBQXFCLEVBQUU7Z0JBQ3JCLEtBQUssRUFBRSxDQUFDLDRCQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztnQkFDeEMsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQzthQUNsQztZQUNELGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtnQkFDaEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhO2dCQUNyQixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUs7b0JBQ2IsQ0FBQyxDQUFDO3dCQUNFLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSztxQkFDdkI7b0JBQ0gsQ0FBQyxDQUFDLFNBQVM7WUFDYixNQUFNLEVBQUUsaUJBQWlCO1lBQ3pCLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztRQUVILEtBQUssTUFBTSxVQUFVLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLElBQUksNEJBQVUsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksVUFBVSxFQUFFLEVBQUU7Z0JBQ3JELFVBQVUsRUFBRSxVQUFVO2dCQUN0QixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWU7Z0JBQ3RDLFFBQVEsRUFBRSxLQUFLLENBQUMsc0JBQXNCO29CQUNwQyxDQUFDLENBQUMsS0FBSyxDQUFDLHNCQUFzQjtvQkFDOUIsQ0FBQyxDQUFDLEVBQUU7YUFDUCxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs7QUExRkgsZ0RBMkZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXdzX2FwaWdhdGV3YXkgYXMgYXBpZ2F0ZXdheSwgYXdzX2lhbSBhcyBpYW0gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElJbnRlcmZhY2VWcGNFbmRwb2ludCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIEFwaUdhdGV3YXlcbiAqIEluY2x1ZGVzIGFsbCBwcm9wZXJ0aWVzIG9mIFJlc3RBcGlQcm9wcyBleGNlcHQ6IGVuZHBvaW50Q29uZmlndXJhdGlvbiwgcG9saWN5XG4gKiBUaGlzIGlzIGRvbmUgYnkgaW50ZW50aW9uIHRvIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBvdmVycmlkaW5nIHRoZSByZXF1aXJlZCBzZWN1cml0eSBzZXR0aW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlcm5hbEFwaUdhdGV3YXlQcm9wcyBleHRlbmRzIGFwaWdhdGV3YXkuUmVzdEFwaVByb3BzIHtcbiAgLyoqXG4gICAqIFN0YWdlIG5hbWUgIHVzZWQgZm9yIGFsbCBjbG91ZGZvcm1hdGlvbiByZXNvdXJjZSBuYW1lcyBhbmQgaW50ZXJuYWwgYXdzIHJlc291cmNlIG5hbWVzLlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgZGVwbG95T3B0aW9ucy5zdGFnZU5hbWUgaW5zdGVhZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgY3VzdG9tIGRvbWFpbnMgbmFtZXMgdG8gYmUgdXNlZCBmb3IgdGhlIEFQSSBHYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluczogYXBpZ2F0ZXdheS5JRG9tYWluTmFtZVtdO1xuXG4gIC8qKlxuICAgKiBWUEMgZW5kcG9pbnQgaWQgb2YgZXhlY3V0ZS1hcGkgdnBjIGVuZHBvaW50LiBUaGlzIGVuZHBvaW50IHdpbGwgYmUgdXNlZCB0byBmb3J3YXJkIHJlcXVlc3RzIGZyb20gdGhlIGxvYWQgYmFsYW5jZXJgcyB0YXJnZXQgZ3JvdXAgdG8gdGhlIGFwaSBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjRW5kcG9pbnQ6IElJbnRlcmZhY2VWcGNFbmRwb2ludDtcblxuICAvKipcbiAgICogUGF0aCBmb3IgY3VzdG9tIGRvbWFpbiBiYXNlIHBhdGggbWFwcGluZyB0aGF0IHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhlIGFwaSBnYXRld2F5XG4gICAqL1xuICByZWFkb25seSBhcGlCYXNlUGF0aE1hcHBpbmdQYXRoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSW50ZXJuYWxBcGlHYXRld2F5IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIEludGVybmFsIEFQSSBHYXRld2F5XG4gICAqIFRoaXMgcHJpdmF0ZSBhcGkgZ2F0ZXdheSBpcyB1c2VkIHRvIHNlcnZlIGludGVybmFsIHNvbHV0aW9ucyAod2Vic2l0ZXMsIGFwaXMsIGFwcGxpY2F0aW9ucykuXG4gICAqIEF0dGFjaCB5b3VyIG1ldGhvZHMgdG8gdGhpcyBhcGkgZ2F0ZXdheS5cbiAgICogSXQgaXMgbm90IGV4cG9zZWQgdG8gdGhlIGludGVybmV0LlxuICAgKiBJdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgbG9hZCBiYWxhbmNlcmBzIHRhcmdldCBncm91cC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcGlHYXRld2F5OiBhcGlnYXRld2F5LkxhbWJkYVJlc3RBcGk7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbnRlcm5hbEFwaUdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgbGV0IGFwaVJlc291cmNlUG9saWN5ID0gcHJvcHMucG9saWN5O1xuICAgIGlmICghYXBpUmVzb3VyY2VQb2xpY3kpIHtcbiAgICAgIGFwaVJlc291cmNlUG9saWN5ID0gbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuREVOWSxcbiAgICAgICAgICAgIHByaW5jaXBhbHM6IFtuZXcgaWFtLkFueVByaW5jaXBhbCgpXSxcbiAgICAgICAgICAgIGFjdGlvbnM6IFtcImV4ZWN1dGUtYXBpOkludm9rZVwiXSxcbiAgICAgICAgICAgIHJlc291cmNlczogW1wiZXhlY3V0ZS1hcGk6LyovKi8qXCJdLFxuICAgICAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgICAgICBTdHJpbmdOb3RFcXVhbHM6IHtcbiAgICAgICAgICAgICAgICBcImF3czpzb3VyY2VWcGNlXCI6IHByb3BzLnZwY0VuZHBvaW50LnZwY0VuZHBvaW50SWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgIHByaW5jaXBhbHM6IFtuZXcgaWFtLkFueVByaW5jaXBhbCgpXSxcbiAgICAgICAgICAgIGFjdGlvbnM6IFtcImV4ZWN1dGUtYXBpOkludm9rZVwiXSxcbiAgICAgICAgICAgIHJlc291cmNlczogW1wiZXhlY3V0ZS1hcGk6LyovKi8qXCJdLFxuICAgICAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICAgICBcImF3czpzb3VyY2VWcGNlXCI6IHByb3BzLnZwY0VuZHBvaW50LnZwY0VuZHBvaW50SWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcHJvcHMuZW5kcG9pbnRDb25maWd1cmF0aW9uICYmXG4gICAgICBwcm9wcy5lbmRwb2ludENvbmZpZ3VyYXRpb24hLnR5cGVzICYmXG4gICAgICAhcHJvcHMuZW5kcG9pbnRDb25maWd1cmF0aW9uIS50eXBlcyEuaW5jbHVkZXMoXG4gICAgICAgIGFwaWdhdGV3YXkuRW5kcG9pbnRUeXBlLlBSSVZBVEVcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJJbnRlcm5hbEFwaUdhdGV3YXk6IGVuZHBvaW50Q29uZmlndXJhdGlvbi50eXBlcyBtdXN0IGJlIEVuZHBvaW50VHlwZS5QUklWQVRFXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcHJvcHMuZW5kcG9pbnRDb25maWd1cmF0aW9uICYmXG4gICAgICBwcm9wcy5lbmRwb2ludENvbmZpZ3VyYXRpb24hLnZwY0VuZHBvaW50cyAmJlxuICAgICAgcHJvcHMuZW5kcG9pbnRDb25maWd1cmF0aW9uIS52cGNFbmRwb2ludHMhLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkludGVybmFsQXBpR2F0ZXdheTogZW5kcG9pbnRDb25maWd1cmF0aW9uLnZwY0VuZHBvaW50cyBtdXN0IGJlIHNldFwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuYXBpR2F0ZXdheSA9IG5ldyBhcGlnYXRld2F5LlJlc3RBcGkodGhpcywgYEdhdGV3YXktJHtpZH1gLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGlzIHNlcnZpY2Ugc2VydmVzIGFuIGludGVybmFsIGFwaSBnYXRld2F5XCIsXG4gICAgICBlbmRwb2ludENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgdHlwZXM6IFthcGlnYXRld2F5LkVuZHBvaW50VHlwZS5QUklWQVRFXSxcbiAgICAgICAgdnBjRW5kcG9pbnRzOiBbcHJvcHMudnBjRW5kcG9pbnRdLFxuICAgICAgfSxcbiAgICAgIGRlcGxveU9wdGlvbnM6IHByb3BzLmRlcGxveU9wdGlvbnNcbiAgICAgICAgPyBwcm9wcy5kZXBsb3lPcHRpb25zXG4gICAgICAgIDogcHJvcHMuc3RhZ2VcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBzdGFnZU5hbWU6IHByb3BzLnN0YWdlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBwb2xpY3k6IGFwaVJlc291cmNlUG9saWN5LFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGRvbWFpbkl0ZW0gb2YgcHJvcHMuZG9tYWlucykge1xuICAgICAgbmV3IGFwaWdhdGV3YXkuQmFzZVBhdGhNYXBwaW5nKHRoaXMsIGAtJHtkb21haW5JdGVtfWAsIHtcbiAgICAgICAgZG9tYWluTmFtZTogZG9tYWluSXRlbSxcbiAgICAgICAgcmVzdEFwaTogdGhpcy5hcGlHYXRld2F5LFxuICAgICAgICBzdGFnZTogdGhpcy5hcGlHYXRld2F5LmRlcGxveW1lbnRTdGFnZSxcbiAgICAgICAgYmFzZVBhdGg6IHByb3BzLmFwaUJhc2VQYXRoTWFwcGluZ1BhdGhcbiAgICAgICAgICA/IHByb3BzLmFwaUJhc2VQYXRoTWFwcGluZ1BhdGhcbiAgICAgICAgICA6IFwiXCIsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==