@aws/nx-plugin 0.79.0 → 0.80.0
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/LICENSE-THIRD-PARTY +69 -11
- package/package.json +27 -27
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +32 -8
- package/src/preset/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +298 -57
- package/src/py/fast-api/files/app/__name__/init.py.template +61 -16
- package/src/py/fast-api/files/app/__name__/main.py.template +6 -3
- package/src/py/fast-api/files/app/run.sh.template +2 -0
- package/src/py/fast-api/generator.js +10 -2
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/project/generator.js +9 -17
- package/src/py/project/generator.js.map +1 -1
- package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +23 -1
- package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +15 -0
- package/src/ts/lib/__snapshots__/generator.spec.ts.snap +42 -14
- package/src/ts/lib/eslint.js +15 -13
- package/src/ts/lib/eslint.js.map +1 -1
- package/src/ts/lib/generator.js +0 -17
- package/src/ts/lib/generator.js.map +1 -1
- package/src/ts/lib/vitest.js +6 -2
- package/src/ts/lib/vitest.js.map +1 -1
- package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +82 -58
- package/src/utils/api-constructs/files/cdk/app/apis/http/__apiNameKebabCase__.ts.template +28 -2
- package/src/utils/api-constructs/files/cdk/app/apis/rest/__apiNameKebabCase__.ts.template +30 -4
- package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +44 -2
- package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +62 -2
- package/src/utils/versions.d.ts +4 -5
- package/src/utils/versions.js +3 -4
- package/src/utils/versions.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/lib/generator.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAYoB;AAEpB,+BAA0C;AAC1C,qDAA0D;AAC1D,yDAAwD;AACxD,6CAAgD;AAChD,+CAA0D;AAC1D,+CAAoD;AACpD,uCAIwB;AACxB,iDAAsE;AACtE,yCAA0C;AAC1C,2CAA6D;AAEhD,QAAA,qBAAqB,GAChC,IAAA,qBAAgB,EAAC,UAAU,CAAC,CAAC;AAa/B;;GAEG;AACI,MAAM,eAAe,GAAG,CAC7B,IAAU,EACV,MAAgC,EAClB,EAAE;IAChB,MAAM,KAAK,GAAG,IAAA,6BAAiB,EAAC,IAAI,CAAC,CAAC;IACtC,MAAM,cAAc,GAAG,IAAA,mBAAW,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,kBAAkB,GAAG,GAAG,KAAK,GAAG,cAAc,EAAE,CAAC;IACvD,yDAAyD;IACzD,MAAM,GAAG,GAAG,IAAA,0BAAiB,EAC3B,MAAM,CAAC,SAAS,IAAI,GAAG,EACvB,MAAM,CAAC,YAAY,IAAI,cAAc,CACtC,CAAC;IACF,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC;AACrC,CAAC,CAAC;AAbW,QAAA,eAAe,mBAa1B;AAEF;;GAEG;AACI,MAAM,kBAAkB,GAAG,CAChC,IAAU,EACV,MAAgC,EACJ,EAAE;IAC9B,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG,IAAA,uBAAe,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClE,MAAM,IAAA,qBAAgB,EAAC,IAAI,kCACtB,MAAM,KACT,IAAI,EAAE,kBAAkB,EACxB,SAAS,EAAE,GAAG,EACd,eAAe,EAAE,IAAI,EACrB,OAAO,EAAE,KAAK,EACd,MAAM,EAAE,QAAQ,EAChB,cAAc,EAAE,QAAQ,IACxB,CAAC;IAEH,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/lib/generator.ts"],"names":[],"mappings":"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"}
|
package/src/ts/lib/vitest.js
CHANGED
|
@@ -12,8 +12,12 @@ const typescript_1 = tslib_1.__importStar(require("typescript"));
|
|
|
12
12
|
const ast_1 = require("../../utils/ast");
|
|
13
13
|
const configureVitest = (tree, options) => {
|
|
14
14
|
var _a;
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
// Find vitest.config.mts or vite.config.mts
|
|
16
|
+
const configPath = [
|
|
17
|
+
(0, path_1.join)(options.dir, 'vitest.config.mts'),
|
|
18
|
+
(0, path_1.join)(options.dir, 'vite.config.mts'),
|
|
19
|
+
].find((config) => tree.exists(config));
|
|
20
|
+
if (configPath) {
|
|
17
21
|
(0, ast_1.replaceIfExists)(tree, configPath, 'CallExpression:has(Identifier[name="defineConfig"]) PropertyAssignment:has(Identifier[name="test"]) ObjectLiteralExpression', (node) => {
|
|
18
22
|
// Check if passWithNoTests already exists
|
|
19
23
|
const hasPassWithNoTests = node.properties.some((p) => typescript_1.default.isPropertyAssignment(p) &&
|
package/src/ts/lib/vitest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/lib/vitest.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAA4D;AAC5D,+BAA4B;AAC5B,iEAAkE;AAElE,yCAAkD;AAE3C,MAAM,eAAe,GAAG,CAC7B,IAAU,EACV,OAAgC,EAChC,EAAE;;IACF,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/lib/vitest.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAA4D;AAC5D,+BAA4B;AAC5B,iEAAkE;AAElE,yCAAkD;AAE3C,MAAM,eAAe,GAAG,CAC7B,IAAU,EACV,OAAgC,EAChC,EAAE;;IACF,4CAA4C;IAC5C,MAAM,UAAU,GAAG;QACjB,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,mBAAmB,CAAC;QACtC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAC;KACrC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAExC,IAAI,UAAU,EAAE,CAAC;QACf,IAAA,qBAAe,EACb,IAAI,EACJ,UAAU,EACV,6HAA6H,EAC7H,CAAC,IAA6B,EAAE,EAAE;YAChC,0CAA0C;YAC1C,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAC7C,CAAC,CAAC,EAAE,EAAE,CACJ,oBAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAC1B,oBAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;gBACvB,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,iBAAiB,CACpC,CAAC;YACF,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxB,OAAO,oBAAO,CAAC,6BAA6B,CAAC;oBAC3C,GAAG,IAAI,CAAC,UAAU;oBAClB,oBAAO,CAAC,wBAAwB,CAC9B,iBAAiB,EACjB,oBAAO,CAAC,UAAU,EAAE,CACrB;iBACF,CAAC,CAAC;YACL,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CACF,CAAC;QAEF,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,CAAC;QAChC,IAAA,qBAAY,EAAC,IAAI,kCACZ,MAAM,KACT,cAAc,kCACT,CAAC,MAAA,MAAM,CAAC,cAAc,mCAAI,EAAE,CAAC,KAChC,iBAAiB,kBACf,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,EAClC,cAAc,EAAE;wBACd,iBAAiB,EAAE;4BACjB,IAAI,EAAE,UAAU;yBACjB;qBACF,IACE,MAAM,CAAC,cAAc,CAAC,iBAAiB,CAAC,QAG/C,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAtDW,QAAA,eAAe,mBAsD1B"}
|
|
@@ -248,7 +248,7 @@ export const registerCreateWorkspaceCommandTool = (server: McpServer) => {
|
|
|
248
248
|
text: \`Run the following command to create a workspace:
|
|
249
249
|
|
|
250
250
|
\\\`\\\`\\\`bash
|
|
251
|
-
npx create-nx-workspace@22.5.
|
|
251
|
+
npx create-nx-workspace@22.5.3 \${workspaceName} --pm=\${packageManager} --preset=@aws/nx-plugin --ci=skip --aiAgents
|
|
252
252
|
\\\`\\\`\\\`
|
|
253
253
|
|
|
254
254
|
This will create a new workspace within the \${workspaceName} directory.
|
|
@@ -961,17 +961,10 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
961
961
|
"cache": true,
|
|
962
962
|
"inputs": [
|
|
963
963
|
"default",
|
|
964
|
-
"{workspaceRoot}
|
|
965
|
-
"{
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
"fix": {
|
|
969
|
-
"fix": true
|
|
970
|
-
},
|
|
971
|
-
"skip-lint": {
|
|
972
|
-
"force": true
|
|
973
|
-
}
|
|
974
|
-
}
|
|
964
|
+
"{workspaceRoot}/.eslintrc.json",
|
|
965
|
+
"{workspaceRoot}/.eslintignore",
|
|
966
|
+
"{workspaceRoot}/eslint.config.mjs"
|
|
967
|
+
]
|
|
975
968
|
},
|
|
976
969
|
"@nx/vite:build": {
|
|
977
970
|
"cache": true,
|
|
@@ -1014,6 +1007,11 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
1014
1007
|
}
|
|
1015
1008
|
},
|
|
1016
1009
|
"namedInputs": {
|
|
1010
|
+
"eslint": [
|
|
1011
|
+
"default",
|
|
1012
|
+
"{workspaceRoot}/eslint.config.mjs",
|
|
1013
|
+
"{projectRoot}/eslint.config.mjs"
|
|
1014
|
+
],
|
|
1017
1015
|
"default": [
|
|
1018
1016
|
{
|
|
1019
1017
|
"dependentTasksOutputFiles": "**/*",
|
|
@@ -1056,13 +1054,13 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
1056
1054
|
},
|
|
1057
1055
|
"devDependencies": {
|
|
1058
1056
|
"@eslint/js": "^9.8.0",
|
|
1059
|
-
"@nx/eslint": "22.5.
|
|
1060
|
-
"@nx/eslint-plugin": "22.5.
|
|
1061
|
-
"@nx/js": "22.5.
|
|
1062
|
-
"@nx/react": "22.5.
|
|
1063
|
-
"@nx/vite": "22.5.
|
|
1064
|
-
"@nx/vitest": "22.5.
|
|
1065
|
-
"@nx/web": "22.5.
|
|
1057
|
+
"@nx/eslint": "22.5.3",
|
|
1058
|
+
"@nx/eslint-plugin": "22.5.3",
|
|
1059
|
+
"@nx/js": "22.5.3",
|
|
1060
|
+
"@nx/react": "22.5.3",
|
|
1061
|
+
"@nx/vite": "22.5.3",
|
|
1062
|
+
"@nx/vitest": "22.5.3",
|
|
1063
|
+
"@nx/web": "22.5.3",
|
|
1066
1064
|
"@swc-node/register": "~1.11.1",
|
|
1067
1065
|
"@swc/cli": "~0.8.0",
|
|
1068
1066
|
"@swc/core": "~1.15.5",
|
|
@@ -1183,7 +1181,17 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
1183
1181
|
}
|
|
1184
1182
|
},
|
|
1185
1183
|
"lint": {
|
|
1186
|
-
"executor": "@nx/eslint:lint"
|
|
1184
|
+
"executor": "@nx/eslint:lint",
|
|
1185
|
+
"cache": true,
|
|
1186
|
+
"inputs": ["eslint"],
|
|
1187
|
+
"configurations": {
|
|
1188
|
+
"fix": {
|
|
1189
|
+
"fix": true
|
|
1190
|
+
},
|
|
1191
|
+
"skip-lint": {
|
|
1192
|
+
"force": true
|
|
1193
|
+
}
|
|
1194
|
+
}
|
|
1187
1195
|
},
|
|
1188
1196
|
"test": {
|
|
1189
1197
|
"executor": "@nx/vitest:test",
|
|
@@ -1683,18 +1691,12 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
1683
1691
|
"
|
|
1684
1692
|
`;
|
|
1685
1693
|
|
|
1686
|
-
exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > packages/common/constructs/
|
|
1687
|
-
"
|
|
1688
|
-
import { defineConfig } from 'vite';
|
|
1694
|
+
exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > packages/common/constructs/vitest.config.mts 1`] = `
|
|
1695
|
+
"import { defineConfig } from 'vitest/config';
|
|
1689
1696
|
|
|
1690
1697
|
export default defineConfig(() => ({
|
|
1691
|
-
root:
|
|
1698
|
+
root: __dirname,
|
|
1692
1699
|
cacheDir: '../../../node_modules/.vite/packages/common/constructs',
|
|
1693
|
-
plugins: [],
|
|
1694
|
-
// Uncomment this if you are using workers.
|
|
1695
|
-
// worker: {
|
|
1696
|
-
// plugins: [],
|
|
1697
|
-
// },
|
|
1698
1700
|
test: {
|
|
1699
1701
|
name: '@proj/common-constructs',
|
|
1700
1702
|
watch: false,
|
|
@@ -1851,7 +1853,17 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
1851
1853
|
}
|
|
1852
1854
|
},
|
|
1853
1855
|
"lint": {
|
|
1854
|
-
"executor": "@nx/eslint:lint"
|
|
1856
|
+
"executor": "@nx/eslint:lint",
|
|
1857
|
+
"cache": true,
|
|
1858
|
+
"inputs": ["eslint"],
|
|
1859
|
+
"configurations": {
|
|
1860
|
+
"fix": {
|
|
1861
|
+
"fix": true
|
|
1862
|
+
},
|
|
1863
|
+
"skip-lint": {
|
|
1864
|
+
"force": true
|
|
1865
|
+
}
|
|
1866
|
+
}
|
|
1855
1867
|
},
|
|
1856
1868
|
"load:runtime-config": {
|
|
1857
1869
|
"executor": "nx:run-commands",
|
|
@@ -2376,17 +2388,10 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2376
2388
|
"cache": true,
|
|
2377
2389
|
"inputs": [
|
|
2378
2390
|
"default",
|
|
2379
|
-
"{workspaceRoot}
|
|
2380
|
-
"{
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
"fix": {
|
|
2384
|
-
"fix": true
|
|
2385
|
-
},
|
|
2386
|
-
"skip-lint": {
|
|
2387
|
-
"force": true
|
|
2388
|
-
}
|
|
2389
|
-
}
|
|
2391
|
+
"{workspaceRoot}/.eslintrc.json",
|
|
2392
|
+
"{workspaceRoot}/.eslintignore",
|
|
2393
|
+
"{workspaceRoot}/eslint.config.mjs"
|
|
2394
|
+
]
|
|
2390
2395
|
},
|
|
2391
2396
|
"@nx/vite:build": {
|
|
2392
2397
|
"cache": true,
|
|
@@ -2429,6 +2434,11 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2429
2434
|
}
|
|
2430
2435
|
},
|
|
2431
2436
|
"namedInputs": {
|
|
2437
|
+
"eslint": [
|
|
2438
|
+
"default",
|
|
2439
|
+
"{workspaceRoot}/eslint.config.mjs",
|
|
2440
|
+
"{projectRoot}/eslint.config.mjs"
|
|
2441
|
+
],
|
|
2432
2442
|
"default": [
|
|
2433
2443
|
{
|
|
2434
2444
|
"dependentTasksOutputFiles": "**/*",
|
|
@@ -2472,13 +2482,13 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2472
2482
|
},
|
|
2473
2483
|
"devDependencies": {
|
|
2474
2484
|
"@eslint/js": "^9.8.0",
|
|
2475
|
-
"@nx/eslint": "22.5.
|
|
2476
|
-
"@nx/eslint-plugin": "22.5.
|
|
2477
|
-
"@nx/js": "22.5.
|
|
2478
|
-
"@nx/react": "22.5.
|
|
2479
|
-
"@nx/vite": "22.5.
|
|
2480
|
-
"@nx/vitest": "22.5.
|
|
2481
|
-
"@nx/web": "22.5.
|
|
2485
|
+
"@nx/eslint": "22.5.3",
|
|
2486
|
+
"@nx/eslint-plugin": "22.5.3",
|
|
2487
|
+
"@nx/js": "22.5.3",
|
|
2488
|
+
"@nx/react": "22.5.3",
|
|
2489
|
+
"@nx/vite": "22.5.3",
|
|
2490
|
+
"@nx/vitest": "22.5.3",
|
|
2491
|
+
"@nx/web": "22.5.3",
|
|
2482
2492
|
"@swc-node/register": "~1.11.1",
|
|
2483
2493
|
"@swc/cli": "~0.8.0",
|
|
2484
2494
|
"@swc/core": "~1.15.5",
|
|
@@ -2603,7 +2613,17 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
2603
2613
|
}
|
|
2604
2614
|
},
|
|
2605
2615
|
"lint": {
|
|
2606
|
-
"executor": "@nx/eslint:lint"
|
|
2616
|
+
"executor": "@nx/eslint:lint",
|
|
2617
|
+
"cache": true,
|
|
2618
|
+
"inputs": ["eslint"],
|
|
2619
|
+
"configurations": {
|
|
2620
|
+
"fix": {
|
|
2621
|
+
"fix": true
|
|
2622
|
+
},
|
|
2623
|
+
"skip-lint": {
|
|
2624
|
+
"force": true
|
|
2625
|
+
}
|
|
2626
|
+
}
|
|
2607
2627
|
},
|
|
2608
2628
|
"test": {
|
|
2609
2629
|
"executor": "@nx/vitest:test",
|
|
@@ -3103,18 +3123,12 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
3103
3123
|
"
|
|
3104
3124
|
`;
|
|
3105
3125
|
|
|
3106
|
-
exports[`react-website generator > Tanstack router integration > should generate website with router correctly > packages/common/constructs/
|
|
3107
|
-
"
|
|
3108
|
-
import { defineConfig } from 'vite';
|
|
3126
|
+
exports[`react-website generator > Tanstack router integration > should generate website with router correctly > packages/common/constructs/vitest.config.mts 1`] = `
|
|
3127
|
+
"import { defineConfig } from 'vitest/config';
|
|
3109
3128
|
|
|
3110
3129
|
export default defineConfig(() => ({
|
|
3111
|
-
root:
|
|
3130
|
+
root: __dirname,
|
|
3112
3131
|
cacheDir: '../../../node_modules/.vite/packages/common/constructs',
|
|
3113
|
-
plugins: [],
|
|
3114
|
-
// Uncomment this if you are using workers.
|
|
3115
|
-
// worker: {
|
|
3116
|
-
// plugins: [],
|
|
3117
|
-
// },
|
|
3118
3132
|
test: {
|
|
3119
3133
|
name: '@proj/common-constructs',
|
|
3120
3134
|
watch: false,
|
|
@@ -3271,7 +3285,17 @@ exports[`react-website generator > Tanstack router integration > should generate
|
|
|
3271
3285
|
}
|
|
3272
3286
|
},
|
|
3273
3287
|
"lint": {
|
|
3274
|
-
"executor": "@nx/eslint:lint"
|
|
3288
|
+
"executor": "@nx/eslint:lint",
|
|
3289
|
+
"cache": true,
|
|
3290
|
+
"inputs": ["eslint"],
|
|
3291
|
+
"configurations": {
|
|
3292
|
+
"fix": {
|
|
3293
|
+
"fix": true
|
|
3294
|
+
},
|
|
3295
|
+
"skip-lint": {
|
|
3296
|
+
"force": true
|
|
3297
|
+
}
|
|
3298
|
+
}
|
|
3275
3299
|
},
|
|
3276
3300
|
"load:runtime-config": {
|
|
3277
3301
|
"executor": "nx:run-commands",
|
|
@@ -7,8 +7,12 @@ import {
|
|
|
7
7
|
Function,
|
|
8
8
|
FunctionProps,
|
|
9
9
|
Tracing,
|
|
10
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
11
|
+
LayerVersion,
|
|
12
|
+
SnapStartConf,
|
|
13
|
+
<%_ } _%>
|
|
10
14
|
} from 'aws-cdk-lib/aws-lambda';
|
|
11
|
-
import { Duration } from 'aws-cdk-lib';
|
|
15
|
+
import { Duration<%_ if (backend.type === 'fastapi') { _%>, Stack<%_ } _%> } from 'aws-cdk-lib';
|
|
12
16
|
import {
|
|
13
17
|
CorsHttpMethod,
|
|
14
18
|
CfnApi,
|
|
@@ -109,7 +113,7 @@ export class <%= apiNameClassName %><
|
|
|
109
113
|
),
|
|
110
114
|
<%_ } else if (backend.type === 'fastapi') { _%>
|
|
111
115
|
runtime: Runtime.PYTHON_3_12,
|
|
112
|
-
handler: '
|
|
116
|
+
handler: 'run.sh',
|
|
113
117
|
code: Code.fromAsset(
|
|
114
118
|
url.fileURLToPath(
|
|
115
119
|
new URL(
|
|
@@ -121,15 +125,37 @@ export class <%= apiNameClassName %><
|
|
|
121
125
|
<%_ } _%>
|
|
122
126
|
timeout: Duration.seconds(30),
|
|
123
127
|
tracing: Tracing.ACTIVE,
|
|
128
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
129
|
+
snapStart: SnapStartConf.ON_PUBLISHED_VERSIONS,
|
|
130
|
+
<%_ } _%>
|
|
124
131
|
environment: {
|
|
125
132
|
AWS_CONNECTION_REUSE_ENABLED: '1',
|
|
133
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
134
|
+
PORT: '8000',
|
|
135
|
+
AWS_LWA_INVOKE_MODE: 'buffered',
|
|
136
|
+
AWS_LAMBDA_EXEC_WRAPPER: '/opt/bootstrap',
|
|
137
|
+
<%_ } _%>
|
|
126
138
|
},
|
|
127
139
|
} satisfies FunctionProps,
|
|
128
140
|
buildDefaultIntegration: (op, props: FunctionProps) => {
|
|
129
141
|
const handler = new Function(scope, `<%= apiNameClassName %>${op}Handler`, props);
|
|
142
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
143
|
+
const stack = Stack.of(scope);
|
|
144
|
+
handler.addLayers(
|
|
145
|
+
LayerVersion.fromLayerVersionArn(
|
|
146
|
+
scope,
|
|
147
|
+
`<%= apiNameClassName %>${op}LWALayer`,
|
|
148
|
+
`arn:aws:lambda:${stack.region}:753240598075:layer:LambdaAdapterLayerX86:24`,
|
|
149
|
+
),
|
|
150
|
+
);
|
|
151
|
+
<%_ } _%>
|
|
130
152
|
return {
|
|
131
153
|
handler,
|
|
154
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
155
|
+
integration: new HttpLambdaIntegration(`<%= apiNameClassName %>${op}Integration`, handler.currentVersion),
|
|
156
|
+
<%_ } else { _%>
|
|
132
157
|
integration: new HttpLambdaIntegration(`<%= apiNameClassName %>${op}Integration`, handler),
|
|
158
|
+
<%_ } _%>
|
|
133
159
|
};
|
|
134
160
|
},
|
|
135
161
|
});
|
|
@@ -7,19 +7,23 @@ import {
|
|
|
7
7
|
Function,
|
|
8
8
|
FunctionProps,
|
|
9
9
|
Tracing,
|
|
10
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
11
|
+
LayerVersion,
|
|
12
|
+
SnapStartConf,
|
|
13
|
+
<%_ } _%>
|
|
10
14
|
} from 'aws-cdk-lib/aws-lambda';
|
|
11
15
|
import {
|
|
12
16
|
AuthorizationType,
|
|
13
17
|
Cors,
|
|
14
18
|
LambdaIntegration,
|
|
15
|
-
<%_ if (backend.type
|
|
19
|
+
<%_ if (['trpc', 'fastapi'].includes(backend.type)) { _%>
|
|
16
20
|
ResponseTransferMode,
|
|
17
21
|
<%_ } _%>
|
|
18
22
|
<%_ if (auth === 'Cognito') { _%>
|
|
19
23
|
CognitoUserPoolsAuthorizer,
|
|
20
24
|
<%_ } _%>
|
|
21
25
|
} from 'aws-cdk-lib/aws-apigateway';
|
|
22
|
-
import { Duration } from 'aws-cdk-lib';
|
|
26
|
+
import { Duration<%_ if (backend.type === 'fastapi') { _%>, Stack<%_ } _%> } from 'aws-cdk-lib';
|
|
23
27
|
import {
|
|
24
28
|
PolicyDocument,
|
|
25
29
|
PolicyStatement,
|
|
@@ -109,7 +113,7 @@ export class <%= apiNameClassName %><
|
|
|
109
113
|
),
|
|
110
114
|
<%_ } else if (backend.type === 'fastapi') { _%>
|
|
111
115
|
runtime: Runtime.PYTHON_3_12,
|
|
112
|
-
handler: '
|
|
116
|
+
handler: 'run.sh',
|
|
113
117
|
code: Code.fromAsset(
|
|
114
118
|
url.fileURLToPath(
|
|
115
119
|
new URL(
|
|
@@ -121,15 +125,37 @@ export class <%= apiNameClassName %><
|
|
|
121
125
|
<%_ } _%>
|
|
122
126
|
timeout: Duration.seconds(30),
|
|
123
127
|
tracing: Tracing.ACTIVE,
|
|
128
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
129
|
+
snapStart: SnapStartConf.ON_PUBLISHED_VERSIONS,
|
|
130
|
+
<%_ } _%>
|
|
124
131
|
environment: {
|
|
125
132
|
AWS_CONNECTION_REUSE_ENABLED: '1',
|
|
133
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
134
|
+
PORT: '8000',
|
|
135
|
+
AWS_LWA_INVOKE_MODE: 'response_stream',
|
|
136
|
+
AWS_LAMBDA_EXEC_WRAPPER: '/opt/bootstrap',
|
|
137
|
+
<%_ } _%>
|
|
126
138
|
},
|
|
127
139
|
} satisfies FunctionProps,
|
|
128
140
|
buildDefaultIntegration: (op, props: FunctionProps) => {
|
|
129
141
|
const handler = new Function(scope, `<%= apiNameClassName %>${op}Handler`, props);
|
|
142
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
143
|
+
const stack = Stack.of(scope);
|
|
144
|
+
handler.addLayers(
|
|
145
|
+
LayerVersion.fromLayerVersionArn(
|
|
146
|
+
scope,
|
|
147
|
+
`<%= apiNameClassName %>${op}LWALayer`,
|
|
148
|
+
`arn:aws:lambda:${stack.region}:753240598075:layer:LambdaAdapterLayerX86:24`,
|
|
149
|
+
),
|
|
150
|
+
);
|
|
151
|
+
<%_ } _%>
|
|
130
152
|
return {
|
|
131
153
|
handler,
|
|
132
|
-
<%_ if (backend.type === '
|
|
154
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
155
|
+
integration: new LambdaIntegration(handler.currentVersion, {
|
|
156
|
+
responseTransferMode: ResponseTransferMode.STREAM,
|
|
157
|
+
}),
|
|
158
|
+
<%_ } else if (backend.type === 'trpc') { _%>
|
|
133
159
|
integration: new LambdaIntegration(handler, {
|
|
134
160
|
responseTransferMode: ResponseTransferMode.STREAM,
|
|
135
161
|
}),
|
|
@@ -132,11 +132,15 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
132
132
|
handler = "index.handler"
|
|
133
133
|
runtime = "nodejs22.x"
|
|
134
134
|
<%_ } else if (backend.type === 'fastapi') { _%>
|
|
135
|
-
handler = "
|
|
135
|
+
handler = "run.sh"
|
|
136
136
|
runtime = "python3.12"
|
|
137
|
+
layers = ["arn:aws:lambda:${data.aws_region.current.name}:753240598075:layer:LambdaAdapterLayerX86:24"]
|
|
137
138
|
<%_ } _%>
|
|
138
139
|
timeout = 30
|
|
139
140
|
memory_size = 128
|
|
141
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
142
|
+
publish = true
|
|
143
|
+
<%_ } _%>
|
|
140
144
|
|
|
141
145
|
source_code_hash = data.archive_file.lambda_zip.output_base64sha256
|
|
142
146
|
|
|
@@ -145,9 +149,21 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
145
149
|
mode = "Active"
|
|
146
150
|
}
|
|
147
151
|
|
|
152
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
153
|
+
# Enable SnapStart for faster cold starts
|
|
154
|
+
snap_start {
|
|
155
|
+
apply_on = "PublishedVersions"
|
|
156
|
+
}
|
|
157
|
+
<%_ } _%>
|
|
158
|
+
|
|
148
159
|
environment {
|
|
149
160
|
variables = merge({
|
|
150
161
|
AWS_CONNECTION_REUSE_ENABLED = "1"
|
|
162
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
163
|
+
PORT = "8000"
|
|
164
|
+
AWS_LWA_INVOKE_MODE = "buffered"
|
|
165
|
+
AWS_LAMBDA_EXEC_WRAPPER = "/opt/bootstrap"
|
|
166
|
+
<%_ } _%>
|
|
151
167
|
}, var.env)
|
|
152
168
|
}
|
|
153
169
|
|
|
@@ -207,6 +223,17 @@ resource "aws_cloudwatch_log_group" "lambda_logs" {
|
|
|
207
223
|
tags = var.tags
|
|
208
224
|
}
|
|
209
225
|
|
|
226
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
227
|
+
# Lambda alias pointing to the latest published version for SnapStart
|
|
228
|
+
resource "aws_lambda_alias" "live" {
|
|
229
|
+
name = "live"
|
|
230
|
+
function_name = aws_lambda_function.api_lambda.function_name
|
|
231
|
+
function_version = aws_lambda_function.api_lambda.version
|
|
232
|
+
|
|
233
|
+
depends_on = [aws_lambda_function.api_lambda]
|
|
234
|
+
}
|
|
235
|
+
<%_ } _%>
|
|
236
|
+
|
|
210
237
|
<%_ if (auth === 'Cognito') { _%>
|
|
211
238
|
# Cognito User Pool Authorizer
|
|
212
239
|
resource "aws_apigatewayv2_authorizer" "cognito_authorizer" {
|
|
@@ -226,12 +253,20 @@ resource "aws_apigatewayv2_authorizer" "cognito_authorizer" {
|
|
|
226
253
|
resource "aws_apigatewayv2_integration" "lambda_integration" {
|
|
227
254
|
api_id = module.http_api.api_id
|
|
228
255
|
integration_type = "AWS_PROXY"
|
|
256
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
257
|
+
integration_uri = aws_lambda_alias.live.invoke_arn
|
|
258
|
+
<%_ } else { _%>
|
|
229
259
|
integration_uri = aws_lambda_function.api_lambda.invoke_arn
|
|
260
|
+
<%_ } _%>
|
|
230
261
|
|
|
231
262
|
payload_format_version = "2.0"
|
|
232
263
|
timeout_milliseconds = 30000
|
|
233
264
|
|
|
265
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
266
|
+
depends_on = [aws_lambda_alias.live]
|
|
267
|
+
<%_ } else { _%>
|
|
234
268
|
depends_on = [aws_lambda_function.api_lambda]
|
|
269
|
+
<%_ } _%>
|
|
235
270
|
}
|
|
236
271
|
|
|
237
272
|
# Route for proxy integration (catches all requests)
|
|
@@ -268,15 +303,22 @@ module "add_url_to_runtime_config" {
|
|
|
268
303
|
depends_on = [module.http_api]
|
|
269
304
|
}
|
|
270
305
|
|
|
271
|
-
# Lambda permission for API Gateway to invoke the function
|
|
306
|
+
# Lambda permission for API Gateway to invoke the function<% if (backend.type === 'fastapi') { %> via alias<% } %>
|
|
272
307
|
resource "aws_lambda_permission" "api_gateway_invoke" {
|
|
273
308
|
statement_id = "AllowExecutionFromAPIGateway"
|
|
274
309
|
action = "lambda:InvokeFunction"
|
|
275
310
|
function_name = aws_lambda_function.api_lambda.function_name
|
|
311
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
312
|
+
qualifier = aws_lambda_alias.live.name
|
|
313
|
+
<%_ } _%>
|
|
276
314
|
principal = "apigateway.amazonaws.com"
|
|
277
315
|
source_arn = "${module.http_api.api_execution_arn}/*/*"
|
|
278
316
|
|
|
317
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
318
|
+
depends_on = [module.http_api, aws_lambda_alias.live]
|
|
319
|
+
<%_ } else { _%>
|
|
279
320
|
depends_on = [module.http_api, aws_lambda_function.api_lambda]
|
|
321
|
+
<%_ } _%>
|
|
280
322
|
}
|
|
281
323
|
|
|
282
324
|
# Outputs
|
|
@@ -110,11 +110,15 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
110
110
|
handler = "index.handler"
|
|
111
111
|
runtime = "nodejs22.x"
|
|
112
112
|
<%_ } else if (backend.type === 'fastapi') { _%>
|
|
113
|
-
handler = "
|
|
113
|
+
handler = "run.sh"
|
|
114
114
|
runtime = "python3.12"
|
|
115
|
+
layers = ["arn:aws:lambda:${data.aws_region.current.name}:753240598075:layer:LambdaAdapterLayerX86:24"]
|
|
115
116
|
<%_ } _%>
|
|
116
117
|
timeout = 30
|
|
117
118
|
memory_size = 128
|
|
119
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
120
|
+
publish = true
|
|
121
|
+
<%_ } _%>
|
|
118
122
|
|
|
119
123
|
source_code_hash = data.archive_file.lambda_zip.output_base64sha256
|
|
120
124
|
|
|
@@ -123,9 +127,21 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
123
127
|
mode = "Active"
|
|
124
128
|
}
|
|
125
129
|
|
|
130
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
131
|
+
# Enable SnapStart for faster cold starts
|
|
132
|
+
snap_start {
|
|
133
|
+
apply_on = "PublishedVersions"
|
|
134
|
+
}
|
|
135
|
+
<%_ } _%>
|
|
136
|
+
|
|
126
137
|
environment {
|
|
127
138
|
variables = merge({
|
|
128
139
|
AWS_CONNECTION_REUSE_ENABLED = "1"
|
|
140
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
141
|
+
PORT = "8000"
|
|
142
|
+
AWS_LWA_INVOKE_MODE = "response_stream"
|
|
143
|
+
AWS_LAMBDA_EXEC_WRAPPER = "/opt/bootstrap"
|
|
144
|
+
<%_ } _%>
|
|
129
145
|
}, var.env)
|
|
130
146
|
}
|
|
131
147
|
|
|
@@ -185,6 +201,17 @@ resource "aws_cloudwatch_log_group" "lambda_logs" {
|
|
|
185
201
|
tags = var.tags
|
|
186
202
|
}
|
|
187
203
|
|
|
204
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
205
|
+
# Lambda alias pointing to the latest published version for SnapStart
|
|
206
|
+
resource "aws_lambda_alias" "live" {
|
|
207
|
+
name = "live"
|
|
208
|
+
function_name = aws_lambda_function.api_lambda.function_name
|
|
209
|
+
function_version = aws_lambda_function.api_lambda.version
|
|
210
|
+
|
|
211
|
+
depends_on = [aws_lambda_function.api_lambda]
|
|
212
|
+
}
|
|
213
|
+
<%_ } _%>
|
|
214
|
+
|
|
188
215
|
<%_ if (auth === 'Cognito') { _%>
|
|
189
216
|
# Cognito User Pool Authorizer
|
|
190
217
|
resource "aws_api_gateway_authorizer" "cognito_authorizer" {
|
|
@@ -211,14 +238,22 @@ resource "aws_api_gateway_integration" "lambda_integration" {
|
|
|
211
238
|
|
|
212
239
|
integration_http_method = "POST"
|
|
213
240
|
type = "AWS_PROXY"
|
|
214
|
-
<%_ if (backend.type === '
|
|
241
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
242
|
+
# Use the response streaming invocation path with the alias ARN for SnapStart
|
|
243
|
+
uri = "arn:aws:apigateway:${data.aws_region.current.name}:lambda:path/2021-11-15/functions/${aws_lambda_alias.live.arn}/response-streaming-invocations"
|
|
244
|
+
response_transfer_mode = "STREAM"
|
|
245
|
+
<%_ } else if (backend.type === 'trpc') { _%>
|
|
215
246
|
uri = aws_lambda_function.api_lambda.response_streaming_invoke_arn
|
|
216
247
|
response_transfer_mode = "STREAM"
|
|
217
248
|
<%_ } else { _%>
|
|
218
249
|
uri = aws_lambda_function.api_lambda.invoke_arn
|
|
219
250
|
<%_ } _%>
|
|
220
251
|
|
|
252
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
253
|
+
depends_on = [aws_lambda_alias.live]
|
|
254
|
+
<%_ } else { _%>
|
|
221
255
|
depends_on = [aws_lambda_function.api_lambda]
|
|
256
|
+
<%_ } _%>
|
|
222
257
|
}
|
|
223
258
|
|
|
224
259
|
# Method for proxy integration
|
|
@@ -379,16 +414,41 @@ resource "aws_api_gateway_rest_api_policy" "api_policy" {
|
|
|
379
414
|
})
|
|
380
415
|
}
|
|
381
416
|
|
|
417
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
418
|
+
# Lambda permission for API Gateway to invoke the function via alias
|
|
419
|
+
<%_ } else { _%>
|
|
382
420
|
# Lambda permission for API Gateway to invoke the function
|
|
421
|
+
<%_ } _%>
|
|
383
422
|
resource "aws_lambda_permission" "api_gateway_invoke" {
|
|
384
423
|
statement_id = "AllowExecutionFromAPIGateway"
|
|
385
424
|
action = "lambda:InvokeFunction"
|
|
386
425
|
function_name = aws_lambda_function.api_lambda.function_name
|
|
426
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
427
|
+
qualifier = aws_lambda_alias.live.name
|
|
428
|
+
<%_ } _%>
|
|
387
429
|
principal = "apigateway.amazonaws.com"
|
|
388
430
|
source_arn = "${module.rest_api.api_execution_arn}/*/*"
|
|
389
431
|
|
|
432
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
433
|
+
depends_on = [module.rest_api, aws_lambda_alias.live]
|
|
434
|
+
<%_ } else { _%>
|
|
390
435
|
depends_on = [module.rest_api, aws_lambda_function.api_lambda]
|
|
436
|
+
<%_ } _%>
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
<%_ if (backend.type === 'fastapi') { _%>
|
|
440
|
+
# Lambda permission for API Gateway to invoke with response streaming via alias
|
|
441
|
+
resource "aws_lambda_permission" "api_gateway_invoke_streaming" {
|
|
442
|
+
statement_id = "AllowStreamingFromAPIGateway"
|
|
443
|
+
action = "lambda:InvokeFunctionWithResponseStream"
|
|
444
|
+
function_name = aws_lambda_function.api_lambda.function_name
|
|
445
|
+
qualifier = aws_lambda_alias.live.name
|
|
446
|
+
principal = "apigateway.amazonaws.com"
|
|
447
|
+
source_arn = "${module.rest_api.api_execution_arn}/*/*"
|
|
448
|
+
|
|
449
|
+
depends_on = [module.rest_api, aws_lambda_alias.live]
|
|
391
450
|
}
|
|
451
|
+
<%_ } _%>
|
|
392
452
|
|
|
393
453
|
# Add API url to runtime config
|
|
394
454
|
module "add_url_to_runtime_config" {
|