-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathapplication.ts
79 lines (68 loc) · 2.49 KB
/
application.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import * as cdk from "aws-cdk-lib";
import * as ec2 from "aws-cdk-lib/aws-ec2";
import { DatabaseConnectionProps, PrismaFunction } from "./prisma-function";
import { Construct } from "constructs";
import { DockerPrismaFunction } from "./docker-prisma-function";
import { DockerImageCode, Function, Runtime } from "aws-cdk-lib/aws-lambda";
import { Platform } from "aws-cdk-lib/aws-ecr-assets";
import { InvocationType, Trigger } from "aws-cdk-lib/triggers";
interface ApplicationProps {
vpc: ec2.IVpc;
database: DatabaseConnectionProps;
}
export class Application extends Construct {
readonly lambdaSecurityGroup: ec2.ISecurityGroup;
readonly migrationHandler: Function;
constructor(scope: Construct, id: string, props: ApplicationProps) {
super(scope, id);
const { vpc, database } = props;
const securityGroup = new ec2.SecurityGroup(this, `SecurityGroup`, {
vpc: props.vpc,
});
// Zip bundle
const handler = new PrismaFunction(this, "Handler", {
entry: "./backend/handler.ts",
memorySize: 256,
runtime: Runtime.NODEJS_20_X,
timeout: cdk.Duration.seconds(15),
vpc,
securityGroups: [securityGroup],
database,
depsLockFilePath: "./backend/package-lock.json",
});
const migrationRunner = new PrismaFunction(this, "MigrationRunner", {
entry: "./backend/migration-runner.ts",
memorySize: 256,
runtime: Runtime.NODEJS_20_X,
timeout: cdk.Duration.minutes(1),
vpc,
securityGroups: [securityGroup],
database,
depsLockFilePath: "./backend/package-lock.json",
});
// Docker bundle
new DockerPrismaFunction(this, "DockerHandler", {
code: DockerImageCode.fromImageAsset("./backend", { platform: Platform.LINUX_AMD64 }),
memorySize: 256,
timeout: cdk.Duration.seconds(15),
vpc,
securityGroups: [securityGroup],
database,
});
new DockerPrismaFunction(this, "DockerMigrationRunner", {
code: DockerImageCode.fromImageAsset("./backend", {
cmd: ["migration-runner.handler"],
platform: Platform.LINUX_AMD64,
}),
memorySize: 256,
timeout: cdk.Duration.minutes(1),
vpc,
securityGroups: [securityGroup],
database,
});
new cdk.CfnOutput(this, `HandlerLambdaArn`, { value: handler.functionArn });
new cdk.CfnOutput(this, `MigrationRunnerLambdaArn`, { value: migrationRunner.functionArn });
this.lambdaSecurityGroup = securityGroup;
this.migrationHandler = migrationRunner;;
}
}