@quiltdata/benchling-webhook 0.8.8 → 0.9.0-20251126T014959Z
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/bin/xdg-launch.js +3 -3
- package/dist/lib/benchling-webhook-stack.d.ts +0 -1
- package/dist/lib/benchling-webhook-stack.d.ts.map +1 -1
- package/dist/lib/benchling-webhook-stack.js +6 -7
- package/dist/lib/benchling-webhook-stack.js.map +1 -1
- package/dist/lib/fargate-service.d.ts +2 -4
- package/dist/lib/fargate-service.d.ts.map +1 -1
- package/dist/lib/fargate-service.js +20 -55
- package/dist/lib/fargate-service.js.map +1 -1
- package/dist/lib/http-api-gateway.d.ts +19 -0
- package/dist/lib/http-api-gateway.d.ts.map +1 -0
- package/dist/lib/http-api-gateway.js +79 -0
- package/dist/lib/http-api-gateway.js.map +1 -0
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +3 -3
- package/dist/lib/index.js.map +1 -1
- package/dist/package.json +1 -1
- package/package.json +1 -1
- package/dist/lib/alb-api-gateway.d.ts +0 -23
- package/dist/lib/alb-api-gateway.d.ts.map +0 -1
- package/dist/lib/alb-api-gateway.js +0 -211
- package/dist/lib/alb-api-gateway.js.map +0 -1
package/README.md
CHANGED
|
@@ -65,6 +65,13 @@ If the App Canvas is not already part of your standard notebook template, Benchl
|
|
|
65
65
|
|
|
66
66
|

|
|
67
67
|
|
|
68
|
+
## Architecture (v0.9.0)
|
|
69
|
+
|
|
70
|
+
- **API Gateway HTTP API** terminates TLS and forwards requests through a **VPC Link** to **Cloud Map** service discovery
|
|
71
|
+
- **ECS Fargate** tasks register in `benchling.local` and serve Flask on port **8080** (no ALB hop)
|
|
72
|
+
- **S3 + SQS** remain the storage and queue backends for package creation
|
|
73
|
+
- **CloudWatch Logs** capture API access logs (`/aws/apigateway/benchling-webhook-http`) and container logs (stack name)
|
|
74
|
+
|
|
68
75
|
## Installation
|
|
69
76
|
|
|
70
77
|
### 1. Installing the Benchling App
|
package/dist/bin/xdg-launch.js
CHANGED
|
@@ -338,7 +338,7 @@ async function runTests(url, profile) {
|
|
|
338
338
|
* @param options - Launch options
|
|
339
339
|
*/
|
|
340
340
|
async function launchNative(envVars, options) {
|
|
341
|
-
const port = options.port ||
|
|
341
|
+
const port = options.port || 8080;
|
|
342
342
|
envVars.PORT = String(port);
|
|
343
343
|
console.log(`🚀 Launching native Flask (port ${port})...`);
|
|
344
344
|
if (options.verbose) {
|
|
@@ -412,7 +412,7 @@ async function launchNative(envVars, options) {
|
|
|
412
412
|
* @param options - Launch options
|
|
413
413
|
*/
|
|
414
414
|
async function launchDocker(envVars, options) {
|
|
415
|
-
const port = options.port ||
|
|
415
|
+
const port = options.port || 8083;
|
|
416
416
|
envVars.PORT = String(port);
|
|
417
417
|
console.log(`🐳 Launching Docker production (port ${port})...`);
|
|
418
418
|
if (options.verbose) {
|
|
@@ -484,7 +484,7 @@ async function launchDocker(envVars, options) {
|
|
|
484
484
|
* @param options - Launch options
|
|
485
485
|
*/
|
|
486
486
|
async function launchDockerDev(envVars, options) {
|
|
487
|
-
const port = options.port ||
|
|
487
|
+
const port = options.port || 8082;
|
|
488
488
|
envVars.PORT = String(port);
|
|
489
489
|
console.log(`🐳 Launching Docker development (port ${port}, hot-reload enabled)...`);
|
|
490
490
|
if (options.verbose) {
|
|
@@ -15,7 +15,6 @@ export interface BenchlingWebhookStackProps extends cdk.StackProps {
|
|
|
15
15
|
readonly config: ProfileConfig;
|
|
16
16
|
}
|
|
17
17
|
export declare class BenchlingWebhookStack extends cdk.Stack {
|
|
18
|
-
private readonly bucket;
|
|
19
18
|
private readonly fargateService;
|
|
20
19
|
private readonly api;
|
|
21
20
|
readonly webhookEndpoint: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchling-webhook-stack.d.ts","sourceRoot":"","sources":["../../lib/benchling-webhook-stack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"benchling-webhook-stack.d.ts","sourceRoot":"","sources":["../../lib/benchling-webhook-stack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AAGnC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C;;;;;GAKG;AACH,MAAM,WAAW,0BAA2B,SAAQ,GAAG,CAAC,UAAU;IAC9D;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAClC;AAED,qBAAa,qBAAsB,SAAQ,GAAG,CAAC,KAAK;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;IACrC,SAAgB,eAAe,EAAE,MAAM,CAAC;gBAGpC,KAAK,EAAE,SAAS,EAChB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,0BAA0B;CAuNxC"}
|
|
@@ -38,11 +38,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.BenchlingWebhookStack = void 0;
|
|
40
40
|
const cdk = __importStar(require("aws-cdk-lib"));
|
|
41
|
-
const s3 = __importStar(require("aws-cdk-lib/aws-s3"));
|
|
42
41
|
const ec2 = __importStar(require("aws-cdk-lib/aws-ec2"));
|
|
43
42
|
const ecr = __importStar(require("aws-cdk-lib/aws-ecr"));
|
|
44
43
|
const fargate_service_1 = require("./fargate-service");
|
|
45
|
-
const
|
|
44
|
+
const http_api_gateway_1 = require("./http-api-gateway");
|
|
46
45
|
const package_json_1 = __importDefault(require("../package.json"));
|
|
47
46
|
class BenchlingWebhookStack extends cdk.Stack {
|
|
48
47
|
constructor(scope, id, props) {
|
|
@@ -141,7 +140,6 @@ class BenchlingWebhookStack extends cdk.Stack {
|
|
|
141
140
|
const quiltDatabaseValue = quiltDatabaseParam.valueAsString;
|
|
142
141
|
// Bucket name will be resolved at runtime from CloudFormation outputs
|
|
143
142
|
// For CDK purposes, we use a placeholder for IAM permissions
|
|
144
|
-
this.bucket = s3.Bucket.fromBucketName(this, "BWBucket", "placeholder-bucket-resolved-at-runtime");
|
|
145
143
|
// Get the default VPC or create a new one
|
|
146
144
|
const vpc = ec2.Vpc.fromLookup(this, "DefaultVPC", {
|
|
147
145
|
isDefault: true,
|
|
@@ -161,7 +159,6 @@ class BenchlingWebhookStack extends cdk.Stack {
|
|
|
161
159
|
// Build Fargate Service props using new config structure
|
|
162
160
|
this.fargateService = new fargate_service_1.FargateService(this, "FargateService", {
|
|
163
161
|
vpc,
|
|
164
|
-
bucket: this.bucket,
|
|
165
162
|
config: config,
|
|
166
163
|
ecrRepository: ecrRepo,
|
|
167
164
|
imageTag: imageTagValue,
|
|
@@ -184,9 +181,11 @@ class BenchlingWebhookStack extends cdk.Stack {
|
|
|
184
181
|
quiltDatabase: quiltDatabaseValue,
|
|
185
182
|
logLevel: logLevelValue,
|
|
186
183
|
});
|
|
187
|
-
// Create API
|
|
188
|
-
this.api = new
|
|
189
|
-
|
|
184
|
+
// Create HTTP API that routes through VPC Link to the service
|
|
185
|
+
this.api = new http_api_gateway_1.HttpApiGateway(this, "HttpApiGateway", {
|
|
186
|
+
vpc: vpc,
|
|
187
|
+
cloudMapService: this.fargateService.cloudMapService,
|
|
188
|
+
serviceSecurityGroup: this.fargateService.service.connections.securityGroups[0],
|
|
190
189
|
config: config,
|
|
191
190
|
});
|
|
192
191
|
// Store webhook endpoint for easy access
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchling-webhook-stack.js","sourceRoot":"","sources":["../../lib/benchling-webhook-stack.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmC;AACnC,
|
|
1
|
+
{"version":3,"file":"benchling-webhook-stack.js","sourceRoot":"","sources":["../../lib/benchling-webhook-stack.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import * as ec2 from "aws-cdk-lib/aws-ec2";
|
|
2
2
|
import * as ecr from "aws-cdk-lib/aws-ecr";
|
|
3
3
|
import * as ecs from "aws-cdk-lib/aws-ecs";
|
|
4
|
-
import * as
|
|
4
|
+
import * as servicediscovery from "aws-cdk-lib/aws-servicediscovery";
|
|
5
5
|
import * as logs from "aws-cdk-lib/aws-logs";
|
|
6
|
-
import * as s3 from "aws-cdk-lib/aws-s3";
|
|
7
6
|
import { Construct } from "constructs";
|
|
8
7
|
import { ProfileConfig } from "./types/config";
|
|
9
8
|
/**
|
|
@@ -18,7 +17,6 @@ import { ProfileConfig } from "./types/config";
|
|
|
18
17
|
*/
|
|
19
18
|
export interface FargateServiceProps {
|
|
20
19
|
readonly vpc: ec2.IVpc;
|
|
21
|
-
readonly bucket: s3.IBucket;
|
|
22
20
|
readonly config: ProfileConfig;
|
|
23
21
|
readonly ecrRepository: ecr.IRepository;
|
|
24
22
|
readonly imageTag?: string;
|
|
@@ -38,7 +36,7 @@ export interface FargateServiceProps {
|
|
|
38
36
|
}
|
|
39
37
|
export declare class FargateService extends Construct {
|
|
40
38
|
readonly service: ecs.FargateService;
|
|
41
|
-
readonly
|
|
39
|
+
readonly cloudMapService: servicediscovery.IService;
|
|
42
40
|
readonly cluster: ecs.Cluster;
|
|
43
41
|
readonly logGroup: logs.ILogGroup;
|
|
44
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fargate-service.d.ts","sourceRoot":"","sources":["../../lib/fargate-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"fargate-service.d.ts","sourceRoot":"","sources":["../../lib/fargate-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,gBAAgB,MAAM,kCAAkC,CAAC;AAErE,OAAO,KAAK,IAAI,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;;;;;;;GASG;AACH,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,WAAW,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAI/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAGjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAGtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAG/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,cAAe,SAAQ,SAAS;IACzC,SAAgB,OAAO,EAAE,GAAG,CAAC,cAAc,CAAC;IAC5C,SAAgB,eAAe,EAAE,gBAAgB,CAAC,QAAQ,CAAC;IAC3D,SAAgB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;IACrC,SAAgB,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;IAEzC;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;gBAoBb,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB;CAqVvE"}
|
|
@@ -37,10 +37,9 @@ exports.FargateService = void 0;
|
|
|
37
37
|
const cdk = __importStar(require("aws-cdk-lib"));
|
|
38
38
|
const ec2 = __importStar(require("aws-cdk-lib/aws-ec2"));
|
|
39
39
|
const ecs = __importStar(require("aws-cdk-lib/aws-ecs"));
|
|
40
|
-
const
|
|
40
|
+
const servicediscovery = __importStar(require("aws-cdk-lib/aws-servicediscovery"));
|
|
41
41
|
const iam = __importStar(require("aws-cdk-lib/aws-iam"));
|
|
42
42
|
const logs = __importStar(require("aws-cdk-lib/aws-logs"));
|
|
43
|
-
const s3 = __importStar(require("aws-cdk-lib/aws-s3"));
|
|
44
43
|
const constructs_1 = require("constructs");
|
|
45
44
|
class FargateService extends constructs_1.Construct {
|
|
46
45
|
/**
|
|
@@ -248,6 +247,7 @@ class FargateService extends constructs_1.Construct {
|
|
|
248
247
|
// AWS Configuration
|
|
249
248
|
AWS_REGION: region,
|
|
250
249
|
AWS_DEFAULT_REGION: region,
|
|
250
|
+
PORT: "8080",
|
|
251
251
|
// Quilt Services (v0.8.0+ service-specific - NO MORE STACK ARN!)
|
|
252
252
|
QUILT_WEB_HOST: props.quiltWebHost,
|
|
253
253
|
ATHENA_USER_DATABASE: props.athenaUserDatabase,
|
|
@@ -276,7 +276,7 @@ class FargateService extends constructs_1.Construct {
|
|
|
276
276
|
}),
|
|
277
277
|
environment: environmentVars,
|
|
278
278
|
healthCheck: {
|
|
279
|
-
command: ["CMD-SHELL", "curl -f http://localhost:
|
|
279
|
+
command: ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"],
|
|
280
280
|
interval: cdk.Duration.seconds(30),
|
|
281
281
|
timeout: cdk.Duration.seconds(10),
|
|
282
282
|
retries: 3,
|
|
@@ -285,65 +285,24 @@ class FargateService extends constructs_1.Construct {
|
|
|
285
285
|
});
|
|
286
286
|
// Map container port
|
|
287
287
|
container.addPortMappings({
|
|
288
|
-
containerPort:
|
|
288
|
+
containerPort: 8080,
|
|
289
289
|
protocol: ecs.Protocol.TCP,
|
|
290
290
|
});
|
|
291
|
-
// Create S3 bucket for ALB access logs
|
|
292
|
-
const albLogsBucket = new s3.Bucket(this, "AlbLogsBucket", {
|
|
293
|
-
bucketName: `benchling-webhook-alb-logs-${account}`,
|
|
294
|
-
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
|
295
|
-
autoDeleteObjects: true,
|
|
296
|
-
lifecycleRules: [
|
|
297
|
-
{
|
|
298
|
-
expiration: cdk.Duration.days(7),
|
|
299
|
-
},
|
|
300
|
-
],
|
|
301
|
-
});
|
|
302
|
-
// Create Application Load Balancer
|
|
303
|
-
this.loadBalancer = new elbv2.ApplicationLoadBalancer(this, "ALB", {
|
|
304
|
-
vpc: props.vpc,
|
|
305
|
-
internetFacing: true,
|
|
306
|
-
loadBalancerName: "benchling-webhook-alb",
|
|
307
|
-
});
|
|
308
|
-
// Enable ALB access logs
|
|
309
|
-
this.loadBalancer.logAccessLogs(albLogsBucket, "alb-access-logs");
|
|
310
|
-
// Create ALB Target Group
|
|
311
|
-
const targetGroup = new elbv2.ApplicationTargetGroup(this, "TargetGroup", {
|
|
312
|
-
vpc: props.vpc,
|
|
313
|
-
port: 5000,
|
|
314
|
-
protocol: elbv2.ApplicationProtocol.HTTP,
|
|
315
|
-
targetType: elbv2.TargetType.IP,
|
|
316
|
-
healthCheck: {
|
|
317
|
-
path: "/health/ready",
|
|
318
|
-
interval: cdk.Duration.seconds(30),
|
|
319
|
-
timeout: cdk.Duration.seconds(10),
|
|
320
|
-
healthyThresholdCount: 2,
|
|
321
|
-
unhealthyThresholdCount: 3,
|
|
322
|
-
healthyHttpCodes: "200",
|
|
323
|
-
},
|
|
324
|
-
deregistrationDelay: cdk.Duration.seconds(30),
|
|
325
|
-
});
|
|
326
|
-
// Add HTTP listener
|
|
327
|
-
this.loadBalancer.addListener("HttpListener", {
|
|
328
|
-
port: 80,
|
|
329
|
-
protocol: elbv2.ApplicationProtocol.HTTP,
|
|
330
|
-
defaultAction: elbv2.ListenerAction.forward([targetGroup]),
|
|
331
|
-
});
|
|
332
291
|
// Create Security Group for Fargate tasks
|
|
333
292
|
const fargateSecurityGroup = new ec2.SecurityGroup(this, "FargateSecurityGroup", {
|
|
334
293
|
vpc: props.vpc,
|
|
335
294
|
description: "Security group for Benchling webhook Fargate tasks",
|
|
336
295
|
allowAllOutbound: true,
|
|
337
296
|
});
|
|
338
|
-
// Allow
|
|
339
|
-
fargateSecurityGroup.addIngressRule(ec2.Peer.
|
|
297
|
+
// Allow VPC traffic to reach the service on 8080 (for VPC Link)
|
|
298
|
+
fargateSecurityGroup.addIngressRule(ec2.Peer.ipv4(props.vpc.vpcCidrBlock), ec2.Port.tcp(8080), "Allow VPC traffic to service");
|
|
340
299
|
// Create Fargate Service
|
|
341
300
|
this.service = new ecs.FargateService(this, "Service", {
|
|
342
301
|
cluster: this.cluster,
|
|
343
302
|
taskDefinition: taskDefinition,
|
|
344
303
|
desiredCount: 2,
|
|
345
304
|
serviceName: "benchling-webhook-service",
|
|
346
|
-
assignPublicIp:
|
|
305
|
+
assignPublicIp: false,
|
|
347
306
|
securityGroups: [fargateSecurityGroup],
|
|
348
307
|
healthCheckGracePeriod: cdk.Duration.seconds(60),
|
|
349
308
|
minHealthyPercent: 50,
|
|
@@ -351,9 +310,20 @@ class FargateService extends constructs_1.Construct {
|
|
|
351
310
|
circuitBreaker: {
|
|
352
311
|
rollback: true,
|
|
353
312
|
},
|
|
313
|
+
cloudMapOptions: {
|
|
314
|
+
name: "benchling-webhook",
|
|
315
|
+
cloudMapNamespace: new servicediscovery.PrivateDnsNamespace(this, "ServiceDiscoveryNamespace", {
|
|
316
|
+
name: "benchling.local",
|
|
317
|
+
vpc: props.vpc,
|
|
318
|
+
description: "Service discovery namespace for Benchling webhook",
|
|
319
|
+
}),
|
|
320
|
+
dnsRecordType: servicediscovery.DnsRecordType.A,
|
|
321
|
+
dnsTtl: cdk.Duration.seconds(30),
|
|
322
|
+
container,
|
|
323
|
+
containerPort: 8080,
|
|
324
|
+
},
|
|
354
325
|
});
|
|
355
|
-
|
|
356
|
-
this.service.attachToApplicationTargetGroup(targetGroup);
|
|
326
|
+
this.cloudMapService = this.service.cloudMapService;
|
|
357
327
|
// Configure auto-scaling
|
|
358
328
|
const scaling = this.service.autoScaleTaskCount({
|
|
359
329
|
minCapacity: 2,
|
|
@@ -372,11 +342,6 @@ class FargateService extends constructs_1.Construct {
|
|
|
372
342
|
scaleOutCooldown: cdk.Duration.seconds(60),
|
|
373
343
|
});
|
|
374
344
|
// Outputs
|
|
375
|
-
new cdk.CfnOutput(this, "LoadBalancerDNS", {
|
|
376
|
-
value: this.loadBalancer.loadBalancerDnsName,
|
|
377
|
-
description: "Load Balancer DNS Name",
|
|
378
|
-
exportName: "BenchlingWebhookALBDNS",
|
|
379
|
-
});
|
|
380
345
|
new cdk.CfnOutput(this, "ServiceName", {
|
|
381
346
|
value: this.service.serviceName,
|
|
382
347
|
description: "ECS Service Name",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fargate-service.js","sourceRoot":"","sources":["../../lib/fargate-service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmC;AACnC,yDAA2C;AAE3C,yDAA2C;AAC3C,
|
|
1
|
+
{"version":3,"file":"fargate-service.js","sourceRoot":"","sources":["../../lib/fargate-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as apigatewayv2 from "aws-cdk-lib/aws-apigatewayv2";
|
|
2
|
+
import * as ec2 from "aws-cdk-lib/aws-ec2";
|
|
3
|
+
import * as servicediscovery from "aws-cdk-lib/aws-servicediscovery";
|
|
4
|
+
import * as logs from "aws-cdk-lib/aws-logs";
|
|
5
|
+
import { Construct } from "constructs";
|
|
6
|
+
import { ProfileConfig } from "./types/config";
|
|
7
|
+
export interface HttpApiGatewayProps {
|
|
8
|
+
readonly vpc: ec2.IVpc;
|
|
9
|
+
readonly cloudMapService: servicediscovery.IService;
|
|
10
|
+
readonly serviceSecurityGroup: ec2.ISecurityGroup;
|
|
11
|
+
readonly config: ProfileConfig;
|
|
12
|
+
}
|
|
13
|
+
export declare class HttpApiGateway {
|
|
14
|
+
readonly api: apigatewayv2.HttpApi;
|
|
15
|
+
readonly vpcLink: apigatewayv2.VpcLink;
|
|
16
|
+
readonly logGroup: logs.ILogGroup;
|
|
17
|
+
constructor(scope: Construct, id: string, props: HttpApiGatewayProps);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=http-api-gateway.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-api-gateway.d.ts","sourceRoot":"","sources":["../../lib/http-api-gateway.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,YAAY,MAAM,8BAA8B,CAAC;AAE7D,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,gBAAgB,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,IAAI,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC;IACvB,QAAQ,CAAC,eAAe,EAAE,gBAAgB,CAAC,QAAQ,CAAC;IACpD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,CAAC,cAAc,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAClC;AAED,qBAAa,cAAc;IACvB,SAAgB,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC;IAC1C,SAAgB,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC;IAC9C,SAAgB,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;gBAE7B,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB;CA6CvE"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.HttpApiGateway = void 0;
|
|
37
|
+
const cdk = __importStar(require("aws-cdk-lib"));
|
|
38
|
+
const apigatewayv2 = __importStar(require("aws-cdk-lib/aws-apigatewayv2"));
|
|
39
|
+
const apigatewayv2Integrations = __importStar(require("aws-cdk-lib/aws-apigatewayv2-integrations"));
|
|
40
|
+
const logs = __importStar(require("aws-cdk-lib/aws-logs"));
|
|
41
|
+
class HttpApiGateway {
|
|
42
|
+
constructor(scope, id, props) {
|
|
43
|
+
// Access logs for HTTP API
|
|
44
|
+
this.logGroup = new logs.LogGroup(scope, "ApiGatewayAccessLogs", {
|
|
45
|
+
logGroupName: "/aws/apigateway/benchling-webhook-http",
|
|
46
|
+
retention: logs.RetentionDays.ONE_WEEK,
|
|
47
|
+
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
|
48
|
+
});
|
|
49
|
+
this.vpcLink = new apigatewayv2.VpcLink(scope, "VpcLink", {
|
|
50
|
+
vpc: props.vpc,
|
|
51
|
+
securityGroups: [props.serviceSecurityGroup],
|
|
52
|
+
vpcLinkName: "benchling-webhook-vpclink",
|
|
53
|
+
});
|
|
54
|
+
this.api = new apigatewayv2.HttpApi(scope, "BenchlingWebhookHttpAPI", {
|
|
55
|
+
apiName: "BenchlingWebhookHttpAPI",
|
|
56
|
+
description: "HTTP API for Benchling webhook integration (v0.9.0+)",
|
|
57
|
+
});
|
|
58
|
+
const integration = new apigatewayv2Integrations.HttpServiceDiscoveryIntegration("CloudMapIntegration", props.cloudMapService, { vpcLink: this.vpcLink });
|
|
59
|
+
this.api.addRoutes({
|
|
60
|
+
path: "/{proxy+}",
|
|
61
|
+
methods: [apigatewayv2.HttpMethod.ANY],
|
|
62
|
+
integration,
|
|
63
|
+
});
|
|
64
|
+
this.api.addRoutes({
|
|
65
|
+
path: "/",
|
|
66
|
+
methods: [apigatewayv2.HttpMethod.ANY],
|
|
67
|
+
integration,
|
|
68
|
+
});
|
|
69
|
+
const stage = this.api.defaultStage?.node.defaultChild;
|
|
70
|
+
if (stage) {
|
|
71
|
+
stage.accessLogSettings = {
|
|
72
|
+
destinationArn: this.logGroup.logGroupArn,
|
|
73
|
+
format: "$context.requestId $context.routeKey $context.status",
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.HttpApiGateway = HttpApiGateway;
|
|
79
|
+
//# sourceMappingURL=http-api-gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-api-gateway.js","sourceRoot":"","sources":["../../lib/http-api-gateway.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmC;AACnC,2EAA6D;AAC7D,oGAAsF;AAGtF,2DAA6C;AAW7C,MAAa,cAAc;IAKvB,YAAY,KAAgB,EAAE,EAAU,EAAE,KAA0B;QAChE,2BAA2B;QAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,sBAAsB,EAAE;YAC7D,YAAY,EAAE,wCAAwC;YACtD,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ;YACtC,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,OAAO;SAC3C,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE;YACtD,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,cAAc,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC;YAC5C,WAAW,EAAE,2BAA2B;SAC3C,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,yBAAyB,EAAE;YAClE,OAAO,EAAE,yBAAyB;YAClC,WAAW,EAAE,sDAAsD;SACtE,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,IAAI,wBAAwB,CAAC,+BAA+B,CAC5E,qBAAqB,EACrB,KAAK,CAAC,eAAe,EACrB,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAC5B,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;YACtC,WAAW;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YACf,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;YACtC,WAAW;SACd,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,YAAiD,CAAC;QAC5F,IAAI,KAAK,EAAE,CAAC;YACR,KAAK,CAAC,iBAAiB,GAAG;gBACtB,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;gBACzC,MAAM,EAAE,sDAAsD;aACjE,CAAC;QACN,CAAC;IACL,CAAC;CACJ;AAlDD,wCAkDC"}
|
package/dist/lib/index.d.ts
CHANGED
|
@@ -26,6 +26,6 @@
|
|
|
26
26
|
*/
|
|
27
27
|
export { BenchlingWebhookStack, type BenchlingWebhookStackProps } from "./benchling-webhook-stack";
|
|
28
28
|
export { FargateService } from "./fargate-service";
|
|
29
|
-
export {
|
|
29
|
+
export { HttpApiGateway } from "./http-api-gateway";
|
|
30
30
|
export { EcrRepository } from "./ecr-repository";
|
|
31
31
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/lib/index.js
CHANGED
|
@@ -26,13 +26,13 @@
|
|
|
26
26
|
* @module quilt-benchling-webhook
|
|
27
27
|
*/
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.EcrRepository = exports.
|
|
29
|
+
exports.EcrRepository = exports.HttpApiGateway = exports.FargateService = exports.BenchlingWebhookStack = void 0;
|
|
30
30
|
var benchling_webhook_stack_1 = require("./benchling-webhook-stack");
|
|
31
31
|
Object.defineProperty(exports, "BenchlingWebhookStack", { enumerable: true, get: function () { return benchling_webhook_stack_1.BenchlingWebhookStack; } });
|
|
32
32
|
var fargate_service_1 = require("./fargate-service");
|
|
33
33
|
Object.defineProperty(exports, "FargateService", { enumerable: true, get: function () { return fargate_service_1.FargateService; } });
|
|
34
|
-
var
|
|
35
|
-
Object.defineProperty(exports, "
|
|
34
|
+
var http_api_gateway_1 = require("./http-api-gateway");
|
|
35
|
+
Object.defineProperty(exports, "HttpApiGateway", { enumerable: true, get: function () { return http_api_gateway_1.HttpApiGateway; } });
|
|
36
36
|
var ecr_repository_1 = require("./ecr-repository");
|
|
37
37
|
Object.defineProperty(exports, "EcrRepository", { enumerable: true, get: function () { return ecr_repository_1.EcrRepository; } });
|
|
38
38
|
//# sourceMappingURL=index.js.map
|
package/dist/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;;AAEH,qEAAmG;AAA1F,gIAAA,qBAAqB,OAAA;AAC9B,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;;AAEH,qEAAmG;AAA1F,gIAAA,qBAAqB,OAAA;AAC9B,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,uDAAoD;AAA3C,kHAAA,cAAc,OAAA;AACvB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA"}
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quiltdata/benchling-webhook",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0-20251126T014959Z",
|
|
4
4
|
"description": "AWS CDK deployment for Benchling webhook processing using Fargate - Deploy directly with npx",
|
|
5
5
|
"main": "dist/lib/index.js",
|
|
6
6
|
"types": "dist/lib/index.d.ts",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quiltdata/benchling-webhook",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0-20251126T014959Z",
|
|
4
4
|
"description": "AWS CDK deployment for Benchling webhook processing using Fargate - Deploy directly with npx",
|
|
5
5
|
"main": "dist/lib/index.js",
|
|
6
6
|
"types": "dist/lib/index.d.ts",
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import * as apigateway from "aws-cdk-lib/aws-apigateway";
|
|
2
|
-
import * as logs from "aws-cdk-lib/aws-logs";
|
|
3
|
-
import * as elbv2 from "aws-cdk-lib/aws-elasticloadbalancingv2";
|
|
4
|
-
import { Construct } from "constructs";
|
|
5
|
-
import { ProfileConfig } from "./types/config";
|
|
6
|
-
/**
|
|
7
|
-
* Properties for AlbApiGateway construct (v0.7.0+)
|
|
8
|
-
*
|
|
9
|
-
* Uses ProfileConfig to access security settings like webhook allow list.
|
|
10
|
-
*/
|
|
11
|
-
export interface AlbApiGatewayProps {
|
|
12
|
-
readonly loadBalancer: elbv2.ApplicationLoadBalancer;
|
|
13
|
-
readonly config: ProfileConfig;
|
|
14
|
-
}
|
|
15
|
-
export declare class AlbApiGateway {
|
|
16
|
-
readonly api: apigateway.RestApi;
|
|
17
|
-
readonly logGroup: logs.ILogGroup;
|
|
18
|
-
constructor(scope: Construct, id: string, props: AlbApiGatewayProps);
|
|
19
|
-
private createResourcePolicy;
|
|
20
|
-
private createCloudWatchRole;
|
|
21
|
-
private addWebhookEndpoints;
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=alb-api-gateway.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"alb-api-gateway.d.ts","sourceRoot":"","sources":["../../lib/alb-api-gateway.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,UAAU,MAAM,4BAA4B,CAAC;AAEzD,OAAO,KAAK,IAAI,MAAM,sBAAsB,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,wCAAwC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,uBAAuB,CAAC;IACrD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAClC;AAED,qBAAa,aAAa;IACtB,SAAgB,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC;IACxC,SAAgB,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;gBAGrC,KAAK,EAAE,SAAS,EAChB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,kBAAkB;IA0E7B,OAAO,CAAC,oBAAoB;IAwC5B,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,mBAAmB;CAqE9B"}
|
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.AlbApiGateway = void 0;
|
|
37
|
-
const cdk = __importStar(require("aws-cdk-lib"));
|
|
38
|
-
const apigateway = __importStar(require("aws-cdk-lib/aws-apigateway"));
|
|
39
|
-
const iam = __importStar(require("aws-cdk-lib/aws-iam"));
|
|
40
|
-
const logs = __importStar(require("aws-cdk-lib/aws-logs"));
|
|
41
|
-
class AlbApiGateway {
|
|
42
|
-
constructor(scope, id, props) {
|
|
43
|
-
const { config } = props;
|
|
44
|
-
this.logGroup = new logs.LogGroup(scope, "ApiGatewayAccessLogs", {
|
|
45
|
-
logGroupName: "/aws/apigateway/benchling-webhook",
|
|
46
|
-
retention: logs.RetentionDays.ONE_WEEK,
|
|
47
|
-
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
|
48
|
-
});
|
|
49
|
-
this.createCloudWatchRole(scope);
|
|
50
|
-
// Get webhook allow list from config
|
|
51
|
-
const webhookAllowList = config.security?.webhookAllowList || "";
|
|
52
|
-
// Parse IP allowlist for resource policy
|
|
53
|
-
let allowedIps = undefined;
|
|
54
|
-
if (webhookAllowList) {
|
|
55
|
-
if (cdk.Token.isUnresolved(webhookAllowList)) {
|
|
56
|
-
// For CDK tokens (parameters), we can't evaluate at synth time
|
|
57
|
-
// Split and let CloudFormation handle it
|
|
58
|
-
allowedIps = cdk.Fn.split(",", webhookAllowList);
|
|
59
|
-
}
|
|
60
|
-
else if (webhookAllowList.trim() !== "") {
|
|
61
|
-
// For concrete values, parse and filter
|
|
62
|
-
const parsed = webhookAllowList
|
|
63
|
-
.split(",")
|
|
64
|
-
.map(ip => ip.trim())
|
|
65
|
-
.filter(ip => ip.length > 0);
|
|
66
|
-
if (parsed.length > 0) {
|
|
67
|
-
allowedIps = parsed;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
// Create resource policy for IP filtering at the edge
|
|
72
|
-
// Only create policy if we have IPs and they're not from an empty parameter
|
|
73
|
-
const policyDocument = this.createResourcePolicy(allowedIps, webhookAllowList);
|
|
74
|
-
this.api = new apigateway.RestApi(scope, "BenchlingWebhookAPI", {
|
|
75
|
-
restApiName: "BenchlingWebhookAPI",
|
|
76
|
-
policy: policyDocument,
|
|
77
|
-
deployOptions: {
|
|
78
|
-
stageName: "prod",
|
|
79
|
-
accessLogDestination: new apigateway.LogGroupLogDestination(this.logGroup),
|
|
80
|
-
methodOptions: {
|
|
81
|
-
"/*/*": {
|
|
82
|
-
loggingLevel: apigateway.MethodLoggingLevel.INFO,
|
|
83
|
-
dataTraceEnabled: true,
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
});
|
|
88
|
-
this.addWebhookEndpoints(props.loadBalancer);
|
|
89
|
-
// Output API Gateway ID for execution logs
|
|
90
|
-
new cdk.CfnOutput(scope, "ApiGatewayId", {
|
|
91
|
-
value: this.api.restApiId,
|
|
92
|
-
description: "API Gateway REST API ID",
|
|
93
|
-
});
|
|
94
|
-
// Output execution log group name
|
|
95
|
-
new cdk.CfnOutput(scope, "ApiGatewayExecutionLogGroup", {
|
|
96
|
-
value: `API-Gateway-Execution-Logs_${this.api.restApiId}/prod`,
|
|
97
|
-
description: "API Gateway execution log group for detailed request/response logs",
|
|
98
|
-
});
|
|
99
|
-
// Output ALB DNS for direct testing
|
|
100
|
-
new cdk.CfnOutput(scope, "LoadBalancerDNS", {
|
|
101
|
-
value: props.loadBalancer.loadBalancerDnsName,
|
|
102
|
-
description: "Application Load Balancer DNS name for direct testing",
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
createResourcePolicy(allowedIps, rawParameter) {
|
|
106
|
-
// Don't create policy if no IPs provided
|
|
107
|
-
if (!allowedIps) {
|
|
108
|
-
return undefined;
|
|
109
|
-
}
|
|
110
|
-
// Don't create policy for empty arrays
|
|
111
|
-
if (Array.isArray(allowedIps) && allowedIps.length === 0) {
|
|
112
|
-
return undefined;
|
|
113
|
-
}
|
|
114
|
-
// For CDK tokens (CloudFormation parameters), we can't evaluate at synth time
|
|
115
|
-
// Don't create policy for parameters since we can't conditionally apply them
|
|
116
|
-
// API Gateway doesn't support conditional policies, so we skip the policy entirely
|
|
117
|
-
// when using parameters. This means WebhookAllowList parameter won't work for
|
|
118
|
-
// runtime IP filtering - IPs must be set at deployment time.
|
|
119
|
-
if (rawParameter && cdk.Token.isUnresolved(rawParameter)) {
|
|
120
|
-
return undefined;
|
|
121
|
-
}
|
|
122
|
-
return new iam.PolicyDocument({
|
|
123
|
-
statements: [
|
|
124
|
-
new iam.PolicyStatement({
|
|
125
|
-
effect: iam.Effect.ALLOW,
|
|
126
|
-
principals: [new iam.AnyPrincipal()],
|
|
127
|
-
actions: ["execute-api:Invoke"],
|
|
128
|
-
resources: ["execute-api:/*"],
|
|
129
|
-
conditions: {
|
|
130
|
-
IpAddress: {
|
|
131
|
-
"aws:SourceIp": allowedIps,
|
|
132
|
-
},
|
|
133
|
-
},
|
|
134
|
-
}),
|
|
135
|
-
],
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
createCloudWatchRole(scope) {
|
|
139
|
-
const cloudWatchRole = new iam.Role(scope, "ApiGatewayCloudWatchRole", {
|
|
140
|
-
assumedBy: new iam.ServicePrincipal("apigateway.amazonaws.com"),
|
|
141
|
-
managedPolicies: [
|
|
142
|
-
iam.ManagedPolicy.fromAwsManagedPolicyName("service-role/AmazonAPIGatewayPushToCloudWatchLogs"),
|
|
143
|
-
],
|
|
144
|
-
});
|
|
145
|
-
new apigateway.CfnAccount(scope, "ApiGatewayAccount", {
|
|
146
|
-
cloudWatchRoleArn: cloudWatchRole.roleArn,
|
|
147
|
-
});
|
|
148
|
-
return cloudWatchRole;
|
|
149
|
-
}
|
|
150
|
-
addWebhookEndpoints(loadBalancer) {
|
|
151
|
-
// Create HTTP integration to ALB
|
|
152
|
-
const albIntegration = new apigateway.HttpIntegration(`http://${loadBalancer.loadBalancerDnsName}/{proxy}`, {
|
|
153
|
-
httpMethod: "ANY",
|
|
154
|
-
options: {
|
|
155
|
-
requestParameters: {
|
|
156
|
-
"integration.request.path.proxy": "method.request.path.proxy",
|
|
157
|
-
},
|
|
158
|
-
integrationResponses: [
|
|
159
|
-
{
|
|
160
|
-
statusCode: "200",
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
statusCode: "400",
|
|
164
|
-
selectionPattern: "4\\d{2}",
|
|
165
|
-
},
|
|
166
|
-
{
|
|
167
|
-
statusCode: "500",
|
|
168
|
-
selectionPattern: "5\\d{2}",
|
|
169
|
-
},
|
|
170
|
-
],
|
|
171
|
-
},
|
|
172
|
-
});
|
|
173
|
-
// Create proxy resource to forward all requests to ALB
|
|
174
|
-
const proxyResource = this.api.root.addResource("{proxy+}");
|
|
175
|
-
proxyResource.addMethod("ANY", albIntegration, {
|
|
176
|
-
requestParameters: {
|
|
177
|
-
"method.request.path.proxy": true,
|
|
178
|
-
},
|
|
179
|
-
methodResponses: [
|
|
180
|
-
{ statusCode: "200" },
|
|
181
|
-
{ statusCode: "400" },
|
|
182
|
-
{ statusCode: "500" },
|
|
183
|
-
],
|
|
184
|
-
});
|
|
185
|
-
// Also handle root path
|
|
186
|
-
this.api.root.addMethod("ANY", new apigateway.HttpIntegration(`http://${loadBalancer.loadBalancerDnsName}/`, {
|
|
187
|
-
httpMethod: "ANY",
|
|
188
|
-
options: {
|
|
189
|
-
integrationResponses: [
|
|
190
|
-
{ statusCode: "200" },
|
|
191
|
-
{
|
|
192
|
-
statusCode: "400",
|
|
193
|
-
selectionPattern: "4\\d{2}",
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
statusCode: "500",
|
|
197
|
-
selectionPattern: "5\\d{2}",
|
|
198
|
-
},
|
|
199
|
-
],
|
|
200
|
-
},
|
|
201
|
-
}), {
|
|
202
|
-
methodResponses: [
|
|
203
|
-
{ statusCode: "200" },
|
|
204
|
-
{ statusCode: "400" },
|
|
205
|
-
{ statusCode: "500" },
|
|
206
|
-
],
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
exports.AlbApiGateway = AlbApiGateway;
|
|
211
|
-
//# sourceMappingURL=alb-api-gateway.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"alb-api-gateway.js","sourceRoot":"","sources":["../../lib/alb-api-gateway.ts"],"names":[],"mappings":"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"}
|