@webiny/pulumi-aws 5.42.4-beta.0 → 5.43.0-beta.1
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/apps/api/ApiGraphql.js +2 -2
- package/apps/api/ApiGraphql.js.map +1 -1
- package/apps/api/ApiMigration.js +2 -1
- package/apps/api/ApiMigration.js.map +1 -1
- package/apps/api/ApiOutput.js +2 -1
- package/apps/api/ApiOutput.js.map +1 -1
- package/apps/api/createApiPulumiApp.d.ts +9 -2
- package/apps/api/createApiPulumiApp.js +12 -14
- package/apps/api/createApiPulumiApp.js.map +1 -1
- package/apps/awsUtils.d.ts +1 -1
- package/apps/blueGreen/BlueGreenRouterApiGateway.d.ts +11 -0
- package/apps/blueGreen/BlueGreenRouterApiGateway.js +51 -0
- package/apps/blueGreen/BlueGreenRouterApiGateway.js.map +1 -0
- package/apps/blueGreen/BlueGreenRouterCloudFront.d.ts +17 -0
- package/apps/blueGreen/BlueGreenRouterCloudFront.js +106 -0
- package/apps/blueGreen/BlueGreenRouterCloudFront.js.map +1 -0
- package/apps/blueGreen/BlueGreenRouterCloudFrontStore.d.ts +10 -0
- package/apps/blueGreen/BlueGreenRouterCloudFrontStore.js +27 -0
- package/apps/blueGreen/BlueGreenRouterCloudFrontStore.js.map +1 -0
- package/apps/blueGreen/cloudfront/createCloudFrontDefaultCacheBehaviorPolicies.d.ts +7 -0
- package/apps/blueGreen/cloudfront/createCloudFrontDefaultCacheBehaviorPolicies.js +23 -0
- package/apps/blueGreen/cloudfront/createCloudFrontDefaultCacheBehaviorPolicies.js.map +1 -0
- package/apps/blueGreen/cloudfront/createCloudFrontFunctionDomainMap.d.ts +14 -0
- package/apps/blueGreen/cloudfront/createCloudFrontFunctionDomainMap.js +30 -0
- package/apps/blueGreen/cloudfront/createCloudFrontFunctionDomainMap.js.map +1 -0
- package/apps/blueGreen/cloudfront/createOriginId.d.ts +11 -0
- package/apps/blueGreen/cloudfront/createOriginId.js +18 -0
- package/apps/blueGreen/cloudfront/createOriginId.js.map +1 -0
- package/apps/blueGreen/constants.d.ts +3 -0
- package/apps/blueGreen/constants.js +11 -0
- package/apps/blueGreen/constants.js.map +1 -0
- package/apps/blueGreen/createBlueGreenPulumiApp.d.ts +73 -0
- package/apps/blueGreen/createBlueGreenPulumiApp.js +121 -0
- package/apps/blueGreen/createBlueGreenPulumiApp.js.map +1 -0
- package/apps/blueGreen/domains/attachDomainsToOutput.d.ts +9 -0
- package/apps/blueGreen/domains/attachDomainsToOutput.js +37 -0
- package/apps/blueGreen/domains/attachDomainsToOutput.js.map +1 -0
- package/apps/blueGreen/domains/convertApplicationDomains.d.ts +6 -0
- package/apps/blueGreen/domains/convertApplicationDomains.js +32 -0
- package/apps/blueGreen/domains/convertApplicationDomains.js.map +1 -0
- package/apps/blueGreen/domains/getApplicationDomains.d.ts +20 -0
- package/apps/blueGreen/domains/getApplicationDomains.js +107 -0
- package/apps/blueGreen/domains/getApplicationDomains.js.map +1 -0
- package/apps/blueGreen/domains/resolveDomains.d.ts +6 -0
- package/apps/blueGreen/domains/resolveDomains.js +48 -0
- package/apps/blueGreen/domains/resolveDomains.js.map +1 -0
- package/apps/blueGreen/functions/buildHandlerFunction.d.ts +15 -0
- package/apps/blueGreen/functions/buildHandlerFunction.js +25 -0
- package/apps/blueGreen/functions/buildHandlerFunction.js.map +1 -0
- package/apps/blueGreen/functions/handler.d.ts +1 -0
- package/apps/blueGreen/functions/handler.js +63 -0
- package/apps/blueGreen/functions/handler.js.map +1 -0
- package/apps/blueGreen/types.d.ts +78 -0
- package/apps/blueGreen/types.js +7 -0
- package/apps/blueGreen/types.js.map +1 -0
- package/apps/blueGreen/validation/validateDeployments.d.ts +2 -0
- package/apps/blueGreen/validation/validateDeployments.js +41 -0
- package/apps/blueGreen/validation/validateDeployments.js.map +1 -0
- package/apps/common/CoreOutput.js +3 -1
- package/apps/common/CoreOutput.js.map +1 -1
- package/apps/core/cognitoIdentityProviders/configure.js +2 -1
- package/apps/core/cognitoIdentityProviders/configure.js.map +1 -1
- package/apps/core/createCorePulumiApp.js +28 -6
- package/apps/core/createCorePulumiApp.js.map +1 -1
- package/apps/createAppBucket.js +2 -1
- package/apps/createAppBucket.js.map +1 -1
- package/apps/react/createReactPulumiApp.js +7 -3
- package/apps/react/createReactPulumiApp.js.map +1 -1
- package/apps/syncSystem/SyncSystemDynamo.d.ts +5 -0
- package/apps/syncSystem/SyncSystemDynamo.js +59 -0
- package/apps/syncSystem/SyncSystemDynamo.js.map +1 -0
- package/apps/syncSystem/SyncSystemLambda.d.ts +13 -0
- package/apps/syncSystem/SyncSystemLambda.js +104 -0
- package/apps/syncSystem/SyncSystemLambda.js.map +1 -0
- package/apps/syncSystem/SyncSystemSQS.d.ts +4 -0
- package/apps/syncSystem/SyncSystemSQS.js +40 -0
- package/apps/syncSystem/SyncSystemSQS.js.map +1 -0
- package/apps/syncSystem/addTableItems.d.ts +8 -0
- package/apps/syncSystem/addTableItems.js +59 -0
- package/apps/syncSystem/addTableItems.js.map +1 -0
- package/apps/syncSystem/createSyncSystemPulumiApp.d.ts +66 -0
- package/apps/syncSystem/createSyncSystemPulumiApp.js +63 -0
- package/apps/syncSystem/createSyncSystemPulumiApp.js.map +1 -0
- package/apps/tenantRouter.js +2 -1
- package/apps/tenantRouter.js.map +1 -1
- package/apps/website/WebsitePrerendering.js +1 -1
- package/apps/website/WebsitePrerendering.js.map +1 -1
- package/apps/website/createWebsitePulumiApp.d.ts +1 -1
- package/apps/website/createWebsitePulumiApp.js +6 -2
- package/apps/website/createWebsitePulumiApp.js.map +1 -1
- package/components/tenantRouter/WebsiteTenantRouter.d.ts +1 -0
- package/components/tenantRouter/WebsiteTenantRouter.js +6 -3
- package/components/tenantRouter/WebsiteTenantRouter.js.map +1 -1
- package/enterprise/createCorePulumiApp.d.ts +1 -0
- package/enterprise/createCorePulumiApp.js +10 -0
- package/enterprise/createCorePulumiApp.js.map +1 -1
- package/enterprise/createSyncSystemPulumiApp.d.ts +26 -0
- package/enterprise/createSyncSystemPulumiApp.js +71 -0
- package/enterprise/createSyncSystemPulumiApp.js.map +1 -0
- package/env/awsRegion.d.ts +1 -0
- package/env/awsRegion.js +12 -0
- package/env/awsRegion.js.map +1 -0
- package/env/base.d.ts +15 -0
- package/env/base.js +37 -0
- package/env/base.js.map +1 -0
- package/env/env.d.ts +1 -0
- package/env/env.js +12 -0
- package/env/env.js.map +1 -0
- package/env/projectName.d.ts +1 -0
- package/env/projectName.js +12 -0
- package/env/projectName.js.map +1 -0
- package/env/variant.d.ts +1 -0
- package/env/variant.js +13 -0
- package/env/variant.js.map +1 -0
- package/package.json +21 -18
- package/utils/addServiceManifestTableItem.js +1 -1
- package/utils/addServiceManifestTableItem.js.map +1 -1
- package/utils/dynamodb.d.ts +14 -0
- package/utils/dynamodb.js +36 -0
- package/utils/dynamodb.js.map +1 -0
- package/utils/lambdaEnvVariables.js +1 -2
- package/utils/lambdaEnvVariables.js.map +1 -1
- package/utils/uploadFolderToS3.js +2 -1
- package/utils/uploadFolderToS3.js.map +1 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.SyncSystemSQS = void 0;
|
|
8
|
+
var aws = _interopRequireWildcard(require("@pulumi/aws"));
|
|
9
|
+
var _pulumi = require("@webiny/pulumi");
|
|
10
|
+
const SyncSystemSQS = exports.SyncSystemSQS = (0, _pulumi.createAppModule)({
|
|
11
|
+
name: "SyncSystemSQS",
|
|
12
|
+
config: (app, params) => {
|
|
13
|
+
const config = {
|
|
14
|
+
delaySeconds: 0,
|
|
15
|
+
visibilityTimeoutSeconds: 900,
|
|
16
|
+
fifoQueue: true,
|
|
17
|
+
receiveWaitTimeSeconds: 0,
|
|
18
|
+
/**
|
|
19
|
+
* The maximum message size is 256 KB.
|
|
20
|
+
* Is it enough? If not, we can use S3 to store the message and only store the reference in the queue.
|
|
21
|
+
*/
|
|
22
|
+
maxMessageSize: 262144,
|
|
23
|
+
// max
|
|
24
|
+
/**
|
|
25
|
+
* How log do we keep the message in the queue?
|
|
26
|
+
* Something is very wrong if the message is not processed within 4 days... :/
|
|
27
|
+
*/
|
|
28
|
+
messageRetentionSeconds: 345600 // default - 4 days
|
|
29
|
+
};
|
|
30
|
+
return app.addResource(aws.sqs.Queue, {
|
|
31
|
+
name: "sync-sqs",
|
|
32
|
+
config,
|
|
33
|
+
opts: {
|
|
34
|
+
protect: params.protect
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=SyncSystemSQS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["aws","_interopRequireWildcard","require","_pulumi","SyncSystemSQS","exports","createAppModule","name","config","app","params","delaySeconds","visibilityTimeoutSeconds","fifoQueue","receiveWaitTimeSeconds","maxMessageSize","messageRetentionSeconds","addResource","sqs","Queue","opts","protect"],"sources":["SyncSystemSQS.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport type { QueueArgs } from \"@pulumi/aws/sqs\";\nimport type { PulumiApp } from \"@webiny/pulumi\";\nimport { createAppModule } from \"@webiny/pulumi\";\n\nexport interface ISyncSystemSQSParams {\n protect: boolean;\n}\n\nexport const SyncSystemSQS = createAppModule({\n name: \"SyncSystemSQS\",\n config: (app: PulumiApp, params: ISyncSystemSQSParams) => {\n const config: QueueArgs = {\n delaySeconds: 0,\n visibilityTimeoutSeconds: 900,\n fifoQueue: true,\n receiveWaitTimeSeconds: 0,\n /**\n * The maximum message size is 256 KB.\n * Is it enough? If not, we can use S3 to store the message and only store the reference in the queue.\n */\n maxMessageSize: 262144, // max\n /**\n * How log do we keep the message in the queue?\n * Something is very wrong if the message is not processed within 4 days... :/\n */\n messageRetentionSeconds: 345600 // default - 4 days\n };\n return app.addResource(aws.sqs.Queue, {\n name: \"sync-sqs\",\n config,\n opts: {\n protect: params.protect\n }\n });\n }\n});\n"],"mappings":";;;;;;;AAAA,IAAAA,GAAA,GAAAC,uBAAA,CAAAC,OAAA;AAGA,IAAAC,OAAA,GAAAD,OAAA;AAMO,MAAME,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAG,IAAAE,uBAAe,EAAC;EACzCC,IAAI,EAAE,eAAe;EACrBC,MAAM,EAAEA,CAACC,GAAc,EAAEC,MAA4B,KAAK;IACtD,MAAMF,MAAiB,GAAG;MACtBG,YAAY,EAAE,CAAC;MACfC,wBAAwB,EAAE,GAAG;MAC7BC,SAAS,EAAE,IAAI;MACfC,sBAAsB,EAAE,CAAC;MACzB;AACZ;AACA;AACA;MACYC,cAAc,EAAE,MAAM;MAAE;MACxB;AACZ;AACA;AACA;MACYC,uBAAuB,EAAE,MAAM,CAAC;IACpC,CAAC;IACD,OAAOP,GAAG,CAACQ,WAAW,CAACjB,GAAG,CAACkB,GAAG,CAACC,KAAK,EAAE;MAClCZ,IAAI,EAAE,UAAU;MAChBC,MAAM;MACNY,IAAI,EAAE;QACFC,OAAO,EAAEX,MAAM,CAACW;MACpB;IACJ,CAAC,CAAC;EACN;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PulumiApp } from "@webiny/pulumi";
|
|
2
|
+
import type { SyncSystemDynamo } from "./SyncSystemDynamo";
|
|
3
|
+
export interface IAddTableItemsParams {
|
|
4
|
+
app: PulumiApp;
|
|
5
|
+
table: SyncSystemDynamo;
|
|
6
|
+
items: Record<string, string | number | Record<string, string>>;
|
|
7
|
+
}
|
|
8
|
+
export declare const addTableItems: (params: IAddTableItemsParams) => void;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.addTableItems = void 0;
|
|
8
|
+
var aws = _interopRequireWildcard(require("@pulumi/aws"));
|
|
9
|
+
var pulumi = _interopRequireWildcard(require("@pulumi/pulumi"));
|
|
10
|
+
const addTableItems = params => {
|
|
11
|
+
const {
|
|
12
|
+
app,
|
|
13
|
+
table,
|
|
14
|
+
items
|
|
15
|
+
} = params;
|
|
16
|
+
/**
|
|
17
|
+
* Store some settings in the table.
|
|
18
|
+
*/
|
|
19
|
+
app.addResource(aws.dynamodb.TableItem, {
|
|
20
|
+
name: "syncSystemSettings",
|
|
21
|
+
config: {
|
|
22
|
+
tableName: table.output.arn,
|
|
23
|
+
hashKey: table.output.hashKey,
|
|
24
|
+
rangeKey: pulumi.output(table.output.rangeKey).apply(key => key || "SK"),
|
|
25
|
+
item: pulumi.interpolate`{
|
|
26
|
+
${buildTableItems({
|
|
27
|
+
PK: "syncSystem#SETTINGS",
|
|
28
|
+
SK: "default",
|
|
29
|
+
...items
|
|
30
|
+
})}
|
|
31
|
+
}`
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
exports.addTableItems = addTableItems;
|
|
36
|
+
const getTableItemType = value => {
|
|
37
|
+
if (value === null || value === undefined) {
|
|
38
|
+
return "S";
|
|
39
|
+
}
|
|
40
|
+
switch (typeof value) {
|
|
41
|
+
case "string":
|
|
42
|
+
return "S";
|
|
43
|
+
case "number":
|
|
44
|
+
return "N";
|
|
45
|
+
case "object":
|
|
46
|
+
return "M";
|
|
47
|
+
default:
|
|
48
|
+
throw new Error(`Unsupported type: ${typeof value}`);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const buildTableItems = items => {
|
|
52
|
+
return Object.keys(items).reduce((output, key) => {
|
|
53
|
+
const value = items[key];
|
|
54
|
+
output.push(`"${key}": {"${getTableItemType(value)}": "${value}"}`);
|
|
55
|
+
return output;
|
|
56
|
+
}, []).join(",");
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=addTableItems.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["aws","_interopRequireWildcard","require","pulumi","addTableItems","params","app","table","items","addResource","dynamodb","TableItem","name","config","tableName","output","arn","hashKey","rangeKey","apply","key","item","interpolate","buildTableItems","PK","SK","exports","getTableItemType","value","undefined","Error","Object","keys","reduce","push","join"],"sources":["addTableItems.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport type { PulumiApp } from \"@webiny/pulumi\";\nimport type { SyncSystemDynamo } from \"./SyncSystemDynamo\";\n\nexport interface IAddTableItemsParams {\n app: PulumiApp;\n table: SyncSystemDynamo;\n items: Record<string, string | number | Record<string, string>>;\n}\n\nexport const addTableItems = (params: IAddTableItemsParams): void => {\n const { app, table, items } = params;\n /**\n * Store some settings in the table.\n */\n app.addResource(aws.dynamodb.TableItem, {\n name: \"syncSystemSettings\",\n config: {\n tableName: table.output.arn,\n hashKey: table.output.hashKey,\n rangeKey: pulumi.output(table.output.rangeKey).apply(key => key || \"SK\"),\n item: pulumi.interpolate`{\n ${buildTableItems({\n PK: \"syncSystem#SETTINGS\",\n SK: \"default\",\n ...items\n })}\n }`\n }\n });\n};\n\nconst getTableItemType = (value: unknown) => {\n if (value === null || value === undefined) {\n return \"S\";\n }\n switch (typeof value) {\n case \"string\":\n return \"S\";\n case \"number\":\n return \"N\";\n case \"object\":\n return \"M\";\n default:\n throw new Error(`Unsupported type: ${typeof value}`);\n }\n};\n\nconst buildTableItems = (\n items: Record<string, string | number | Record<string, string>>\n): string => {\n return Object.keys(items)\n .reduce<string[]>((output, key) => {\n const value = items[key];\n output.push(`\"${key}\": {\"${getTableItemType(value)}\": \"${value}\"}`);\n return output;\n }, [])\n .join(\",\");\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,GAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,uBAAA,CAAAC,OAAA;AAUO,MAAME,aAAa,GAAIC,MAA4B,IAAW;EACjE,MAAM;IAAEC,GAAG;IAAEC,KAAK;IAAEC;EAAM,CAAC,GAAGH,MAAM;EACpC;AACJ;AACA;EACIC,GAAG,CAACG,WAAW,CAACT,GAAG,CAACU,QAAQ,CAACC,SAAS,EAAE;IACpCC,IAAI,EAAE,oBAAoB;IAC1BC,MAAM,EAAE;MACJC,SAAS,EAAEP,KAAK,CAACQ,MAAM,CAACC,GAAG;MAC3BC,OAAO,EAAEV,KAAK,CAACQ,MAAM,CAACE,OAAO;MAC7BC,QAAQ,EAAEf,MAAM,CAACY,MAAM,CAACR,KAAK,CAACQ,MAAM,CAACG,QAAQ,CAAC,CAACC,KAAK,CAACC,GAAG,IAAIA,GAAG,IAAI,IAAI,CAAC;MACxEC,IAAI,EAAElB,MAAM,CAACmB,WAAW;AACpC,gBAAgBC,eAAe,CAAC;QACdC,EAAE,EAAE,qBAAqB;QACzBC,EAAE,EAAE,SAAS;QACb,GAAGjB;MACP,CAAC,CAAC;AAChB;IACQ;EACJ,CAAC,CAAC;AACN,CAAC;AAACkB,OAAA,CAAAtB,aAAA,GAAAA,aAAA;AAEF,MAAMuB,gBAAgB,GAAIC,KAAc,IAAK;EACzC,IAAIA,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAKC,SAAS,EAAE;IACvC,OAAO,GAAG;EACd;EACA,QAAQ,OAAOD,KAAK;IAChB,KAAK,QAAQ;MACT,OAAO,GAAG;IACd,KAAK,QAAQ;MACT,OAAO,GAAG;IACd,KAAK,QAAQ;MACT,OAAO,GAAG;IACd;MACI,MAAM,IAAIE,KAAK,CAAC,qBAAqB,OAAOF,KAAK,EAAE,CAAC;EAC5D;AACJ,CAAC;AAED,MAAML,eAAe,GACjBf,KAA+D,IACtD;EACT,OAAOuB,MAAM,CAACC,IAAI,CAACxB,KAAK,CAAC,CACpByB,MAAM,CAAW,CAAClB,MAAM,EAAEK,GAAG,KAAK;IAC/B,MAAMQ,KAAK,GAAGpB,KAAK,CAACY,GAAG,CAAC;IACxBL,MAAM,CAACmB,IAAI,CAAC,IAAId,GAAG,QAAQO,gBAAgB,CAACC,KAAK,CAAC,OAAOA,KAAK,IAAI,CAAC;IACnE,OAAOb,MAAM;EACjB,CAAC,EAAE,EAAE,CAAC,CACLoB,IAAI,CAAC,GAAG,CAAC;AAClB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { PulumiAppParam } from "@webiny/pulumi";
|
|
2
|
+
export type SyncSystemPulumiApp = ReturnType<typeof createSyncSystemPulumiApp>;
|
|
3
|
+
export interface ElasticsearchConfig {
|
|
4
|
+
domainName: string;
|
|
5
|
+
indexPrefix: string;
|
|
6
|
+
sharedIndexes: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface OpenSearchConfig {
|
|
9
|
+
domainName: string;
|
|
10
|
+
indexPrefix: string;
|
|
11
|
+
sharedIndexes: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface CreateSyncSystemPulumiAppParams {
|
|
14
|
+
/**
|
|
15
|
+
* Secures against deleting database by accident.
|
|
16
|
+
* By default enabled in production environments.
|
|
17
|
+
*/
|
|
18
|
+
protect?: PulumiAppParam<boolean>;
|
|
19
|
+
/**
|
|
20
|
+
* Enables ElasticSearch infrastructure.
|
|
21
|
+
* Note that it requires also changes in application code.
|
|
22
|
+
*/
|
|
23
|
+
elasticSearch?: PulumiAppParam<boolean | Partial<ElasticsearchConfig>>;
|
|
24
|
+
/**
|
|
25
|
+
* Enables OpenSearch infrastructure.
|
|
26
|
+
* Note that it requires also changes in application code.
|
|
27
|
+
*/
|
|
28
|
+
openSearch?: PulumiAppParam<boolean | Partial<OpenSearchConfig>>;
|
|
29
|
+
/**
|
|
30
|
+
* Enables VPC for the application.
|
|
31
|
+
* By default enabled in production environments.
|
|
32
|
+
*/
|
|
33
|
+
vpc?: PulumiAppParam<boolean>;
|
|
34
|
+
/**
|
|
35
|
+
* Provides a way to adjust existing Pulumi code (cloud infrastructure resources)
|
|
36
|
+
* or add additional ones into the mix.
|
|
37
|
+
*/
|
|
38
|
+
pulumi?: (app: SyncSystemPulumiApp) => void | Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Prefixes names of all Pulumi cloud infrastructure resource with given prefix.
|
|
41
|
+
*/
|
|
42
|
+
pulumiResourceNamePrefix?: PulumiAppParam<string>;
|
|
43
|
+
/**
|
|
44
|
+
* Treats provided environments as production environments, which
|
|
45
|
+
* are deployed in production deployment mode.
|
|
46
|
+
* https://www.webiny.com/docs/architecture/deployment-modes/production
|
|
47
|
+
*/
|
|
48
|
+
productionEnvironments?: PulumiAppParam<string[]>;
|
|
49
|
+
}
|
|
50
|
+
export declare function createSyncSystemPulumiApp(projectAppParams?: CreateSyncSystemPulumiAppParams): import("@webiny/pulumi").PulumiApp<{
|
|
51
|
+
/**
|
|
52
|
+
* Sync System resources.
|
|
53
|
+
*/
|
|
54
|
+
dynamodbTable: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/dynamodb/table").Table>;
|
|
55
|
+
dynamodbTableArn: import("@pulumi/pulumi").Output<string>;
|
|
56
|
+
dynamodbTableName: import("@pulumi/pulumi").Output<string>;
|
|
57
|
+
dynamodbTableHashKey: import("@pulumi/pulumi").Output<string>;
|
|
58
|
+
dynamodbTableRangeKey: import("@pulumi/pulumi").Output<string | undefined>;
|
|
59
|
+
sqs: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/sqs/queue").Queue>;
|
|
60
|
+
sqsArn: import("@pulumi/pulumi").Output<string>;
|
|
61
|
+
/**
|
|
62
|
+
* Systems we are connecting together.
|
|
63
|
+
*/
|
|
64
|
+
primary: {};
|
|
65
|
+
secondary: {};
|
|
66
|
+
}>;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createSyncSystemPulumiApp = createSyncSystemPulumiApp;
|
|
7
|
+
var _pulumi = require("@webiny/pulumi");
|
|
8
|
+
var _SyncSystemDynamo = require("./SyncSystemDynamo");
|
|
9
|
+
var _constants = require("../../constants");
|
|
10
|
+
var _SyncSystemSQS = require("./SyncSystemSQS");
|
|
11
|
+
var _SyncSystemLambda = require("./SyncSystemLambda");
|
|
12
|
+
var _addTableItems = require("./addTableItems");
|
|
13
|
+
function createSyncSystemPulumiApp(projectAppParams = {}) {
|
|
14
|
+
return (0, _pulumi.createPulumiApp)({
|
|
15
|
+
name: "syncSystem",
|
|
16
|
+
path: "apps/syncSystem",
|
|
17
|
+
config: projectAppParams,
|
|
18
|
+
program: async app => {
|
|
19
|
+
const productionEnvironments = app.params.create.productionEnvironments || _constants.DEFAULT_PROD_ENV_NAMES;
|
|
20
|
+
const isProduction = productionEnvironments.includes(app.params.run.env);
|
|
21
|
+
const protect = app.getParam(projectAppParams.protect) ?? isProduction;
|
|
22
|
+
const dynamoDbTable = app.addModule(_SyncSystemDynamo.SyncSystemDynamo, {
|
|
23
|
+
protect
|
|
24
|
+
});
|
|
25
|
+
const sqs = app.addModule(_SyncSystemSQS.SyncSystemSQS, {
|
|
26
|
+
protect
|
|
27
|
+
});
|
|
28
|
+
app.addModule(_SyncSystemLambda.SyncSystemLambda, {
|
|
29
|
+
protect,
|
|
30
|
+
config: {
|
|
31
|
+
// TODO
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* Add
|
|
36
|
+
*/
|
|
37
|
+
(0, _addTableItems.addTableItems)({
|
|
38
|
+
app,
|
|
39
|
+
table: dynamoDbTable,
|
|
40
|
+
items: {}
|
|
41
|
+
});
|
|
42
|
+
return {
|
|
43
|
+
/**
|
|
44
|
+
* Sync System resources.
|
|
45
|
+
*/
|
|
46
|
+
dynamodbTable: dynamoDbTable,
|
|
47
|
+
dynamodbTableArn: dynamoDbTable.output.arn,
|
|
48
|
+
dynamodbTableName: dynamoDbTable.output.name,
|
|
49
|
+
dynamodbTableHashKey: dynamoDbTable.output.hashKey,
|
|
50
|
+
dynamodbTableRangeKey: dynamoDbTable.output.rangeKey,
|
|
51
|
+
sqs,
|
|
52
|
+
sqsArn: sqs.output.arn,
|
|
53
|
+
/**
|
|
54
|
+
* Systems we are connecting together.
|
|
55
|
+
*/
|
|
56
|
+
primary: {},
|
|
57
|
+
secondary: {}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=createSyncSystemPulumiApp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_pulumi","require","_SyncSystemDynamo","_constants","_SyncSystemSQS","_SyncSystemLambda","_addTableItems","createSyncSystemPulumiApp","projectAppParams","createPulumiApp","name","path","config","program","app","productionEnvironments","params","create","DEFAULT_PROD_ENV_NAMES","isProduction","includes","run","env","protect","getParam","dynamoDbTable","addModule","SyncSystemDynamo","sqs","SyncSystemSQS","SyncSystemLambda","addTableItems","table","items","dynamodbTable","dynamodbTableArn","output","arn","dynamodbTableName","dynamodbTableHashKey","hashKey","dynamodbTableRangeKey","rangeKey","sqsArn","primary","secondary"],"sources":["createSyncSystemPulumiApp.ts"],"sourcesContent":["import { createPulumiApp, PulumiAppParam } from \"@webiny/pulumi\";\nimport { SyncSystemDynamo } from \"./SyncSystemDynamo\";\nimport { DEFAULT_PROD_ENV_NAMES } from \"~/constants\";\nimport { SyncSystemSQS } from \"./SyncSystemSQS\";\nimport { SyncSystemLambda } from \"./SyncSystemLambda\";\nimport { addTableItems } from \"./addTableItems\";\n\nexport type SyncSystemPulumiApp = ReturnType<typeof createSyncSystemPulumiApp>;\n\nexport interface ElasticsearchConfig {\n domainName: string;\n indexPrefix: string;\n sharedIndexes: boolean;\n}\n\nexport interface OpenSearchConfig {\n domainName: string;\n indexPrefix: string;\n sharedIndexes: boolean;\n}\n\nexport interface CreateSyncSystemPulumiAppParams {\n /**\n * Secures against deleting database by accident.\n * By default enabled in production environments.\n */\n protect?: PulumiAppParam<boolean>;\n\n /**\n * Enables ElasticSearch infrastructure.\n * Note that it requires also changes in application code.\n */\n elasticSearch?: PulumiAppParam<boolean | Partial<ElasticsearchConfig>>;\n\n /**\n * Enables OpenSearch infrastructure.\n * Note that it requires also changes in application code.\n */\n openSearch?: PulumiAppParam<boolean | Partial<OpenSearchConfig>>;\n\n /**\n * Enables VPC for the application.\n * By default enabled in production environments.\n */\n vpc?: PulumiAppParam<boolean>;\n\n /**\n * Provides a way to adjust existing Pulumi code (cloud infrastructure resources)\n * or add additional ones into the mix.\n */\n pulumi?: (app: SyncSystemPulumiApp) => void | Promise<void>;\n\n /**\n * Prefixes names of all Pulumi cloud infrastructure resource with given prefix.\n */\n pulumiResourceNamePrefix?: PulumiAppParam<string>;\n\n /**\n * Treats provided environments as production environments, which\n * are deployed in production deployment mode.\n * https://www.webiny.com/docs/architecture/deployment-modes/production\n */\n productionEnvironments?: PulumiAppParam<string[]>;\n}\n\nexport function createSyncSystemPulumiApp(projectAppParams: CreateSyncSystemPulumiAppParams = {}) {\n return createPulumiApp({\n name: \"syncSystem\",\n path: \"apps/syncSystem\",\n config: projectAppParams,\n program: async app => {\n const productionEnvironments =\n app.params.create.productionEnvironments || DEFAULT_PROD_ENV_NAMES;\n const isProduction = productionEnvironments.includes(app.params.run.env);\n const protect = app.getParam(projectAppParams.protect) ?? isProduction;\n\n const dynamoDbTable = app.addModule(SyncSystemDynamo, {\n protect\n });\n\n const sqs = app.addModule(SyncSystemSQS, {\n protect\n });\n\n app.addModule(SyncSystemLambda, {\n protect,\n config: {\n // TODO\n }\n });\n /**\n * Add\n */\n addTableItems({\n app,\n table: dynamoDbTable,\n items: {}\n });\n\n return {\n /**\n * Sync System resources.\n */\n dynamodbTable: dynamoDbTable,\n dynamodbTableArn: dynamoDbTable.output.arn,\n dynamodbTableName: dynamoDbTable.output.name,\n dynamodbTableHashKey: dynamoDbTable.output.hashKey,\n dynamodbTableRangeKey: dynamoDbTable.output.rangeKey,\n sqs,\n sqsArn: sqs.output.arn,\n /**\n * Systems we are connecting together.\n */\n primary: {},\n secondary: {}\n };\n }\n });\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AACA,IAAAI,iBAAA,GAAAJ,OAAA;AACA,IAAAK,cAAA,GAAAL,OAAA;AA4DO,SAASM,yBAAyBA,CAACC,gBAAiD,GAAG,CAAC,CAAC,EAAE;EAC9F,OAAO,IAAAC,uBAAe,EAAC;IACnBC,IAAI,EAAE,YAAY;IAClBC,IAAI,EAAE,iBAAiB;IACvBC,MAAM,EAAEJ,gBAAgB;IACxBK,OAAO,EAAE,MAAMC,GAAG,IAAI;MAClB,MAAMC,sBAAsB,GACxBD,GAAG,CAACE,MAAM,CAACC,MAAM,CAACF,sBAAsB,IAAIG,iCAAsB;MACtE,MAAMC,YAAY,GAAGJ,sBAAsB,CAACK,QAAQ,CAACN,GAAG,CAACE,MAAM,CAACK,GAAG,CAACC,GAAG,CAAC;MACxE,MAAMC,OAAO,GAAGT,GAAG,CAACU,QAAQ,CAAChB,gBAAgB,CAACe,OAAO,CAAC,IAAIJ,YAAY;MAEtE,MAAMM,aAAa,GAAGX,GAAG,CAACY,SAAS,CAACC,kCAAgB,EAAE;QAClDJ;MACJ,CAAC,CAAC;MAEF,MAAMK,GAAG,GAAGd,GAAG,CAACY,SAAS,CAACG,4BAAa,EAAE;QACrCN;MACJ,CAAC,CAAC;MAEFT,GAAG,CAACY,SAAS,CAACI,kCAAgB,EAAE;QAC5BP,OAAO;QACPX,MAAM,EAAE;UACJ;QAAA;MAER,CAAC,CAAC;MACF;AACZ;AACA;MACY,IAAAmB,4BAAa,EAAC;QACVjB,GAAG;QACHkB,KAAK,EAAEP,aAAa;QACpBQ,KAAK,EAAE,CAAC;MACZ,CAAC,CAAC;MAEF,OAAO;QACH;AAChB;AACA;QACgBC,aAAa,EAAET,aAAa;QAC5BU,gBAAgB,EAAEV,aAAa,CAACW,MAAM,CAACC,GAAG;QAC1CC,iBAAiB,EAAEb,aAAa,CAACW,MAAM,CAAC1B,IAAI;QAC5C6B,oBAAoB,EAAEd,aAAa,CAACW,MAAM,CAACI,OAAO;QAClDC,qBAAqB,EAAEhB,aAAa,CAACW,MAAM,CAACM,QAAQ;QACpDd,GAAG;QACHe,MAAM,EAAEf,GAAG,CAACQ,MAAM,CAACC,GAAG;QACtB;AAChB;AACA;QACgBO,OAAO,EAAE,CAAC,CAAC;QACXC,SAAS,EAAE,CAAC;MAChB,CAAC;IACL;EACJ,CAAC,CAAC;AACN","ignoreList":[]}
|
package/apps/tenantRouter.js
CHANGED
|
@@ -10,6 +10,7 @@ var pulumi = _interopRequireWildcard(require("@pulumi/pulumi"));
|
|
|
10
10
|
var aws = _interopRequireWildcard(require("@pulumi/aws"));
|
|
11
11
|
var _common = require("./common");
|
|
12
12
|
var _constants = require("../constants");
|
|
13
|
+
var _awsRegion = require("../env/awsRegion");
|
|
13
14
|
function createFunctionArchive({
|
|
14
15
|
dynamoDbTable,
|
|
15
16
|
region
|
|
@@ -22,7 +23,7 @@ function createFunctionArchive({
|
|
|
22
23
|
}
|
|
23
24
|
const PREFIX = "website-router";
|
|
24
25
|
function applyTenantRouter(app, cloudfront) {
|
|
25
|
-
const region =
|
|
26
|
+
const region = (0, _awsRegion.getEnvVariableAwsRegion)();
|
|
26
27
|
|
|
27
28
|
// Get Core app output
|
|
28
29
|
const core = app.getModule(_common.CoreOutput);
|
package/apps/tenantRouter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_fs","require","pulumi","_interopRequireWildcard","aws","_common","_constants","createFunctionArchive","dynamoDbTable","region","handler","readFileSync","__dirname","source","replace","asset","AssetArchive","StringAsset","PREFIX","applyTenantRouter","app","cloudfront","
|
|
1
|
+
{"version":3,"names":["_fs","require","pulumi","_interopRequireWildcard","aws","_common","_constants","_awsRegion","createFunctionArchive","dynamoDbTable","region","handler","readFileSync","__dirname","source","replace","asset","AssetArchive","StringAsset","PREFIX","applyTenantRouter","app","cloudfront","getEnvVariableAwsRegion","core","getModule","CoreOutput","primaryDynamodbTableName","inlinePolicies","all","getCallerIdentity","apply","identity","name","policy","JSON","stringify","Version","Statement","Sid","Effect","Action","Resource","accountId","role","addResource","iam","Role","config","managedPolicyArns","ManagedPolicies","AWSLambdaBasicExecutionRole","assumeRolePolicy","Principal","Principals","LambdaPrincipal","EdgeLambdaPrincipal","awsUsEast1","Provider","originLambda","lambda","Function","publish","runtime","LAMBDA_RUNTIME","output","arn","timeout","memorySize","code","opts","provider","retainOnDelete","meta","canUseVpc","defaultCacheBehavior","value","forwardedValues","queryString","cookies","forward","headers","lambdaFunctionAssociations","eventType","includeBody","lambdaArn","qualifiedArn"],"sources":["tenantRouter.ts"],"sourcesContent":["import { readFileSync } from \"fs\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport { PulumiApp, PulumiAppResource } from \"@webiny/pulumi\";\nimport { CoreOutput } from \"./common\";\nimport { LAMBDA_RUNTIME } from \"~/constants\";\nimport { getEnvVariableAwsRegion } from \"~/env/awsRegion\";\n\ninterface Params {\n region: string;\n dynamoDbTable: string;\n}\n\nfunction createFunctionArchive({ dynamoDbTable, region }: Params) {\n const handler = readFileSync(\n __dirname + \"/../components/tenantRouter/functions/origin/request.js\",\n \"utf-8\"\n );\n\n const source = handler\n .replace(\"{DB_TABLE_NAME}\", dynamoDbTable)\n .replace(\"{DB_TABLE_REGION}\", region);\n\n return new pulumi.asset.AssetArchive({\n \"index.js\": new pulumi.asset.StringAsset(source)\n });\n}\n\nconst PREFIX = \"website-router\";\n\nexport function applyTenantRouter(\n app: PulumiApp,\n cloudfront: PulumiAppResource<typeof aws.cloudfront.Distribution>\n) {\n const region = getEnvVariableAwsRegion();\n\n // Get Core app output\n const core = app.getModule(CoreOutput);\n\n // `primaryDynamodbTableName` is a string, hence the type cast here.\n const dynamoDbTable = core.primaryDynamodbTableName;\n\n // Because of JSON.stringify, we need to resolve promises upfront.\n const inlinePolicies = pulumi\n .all([aws.getCallerIdentity({}), dynamoDbTable])\n .apply(([identity, dynamoDbTable]) => [\n {\n name: \"tenant-router-policy\",\n policy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [\n {\n Sid: \"PermissionForDynamodb\",\n Effect: \"Allow\",\n Action: [\"dynamodb:GetItem\", \"dynamodb:Query\"],\n Resource: [\n `arn:aws:dynamodb:${region}:${identity.accountId}:table/${dynamoDbTable}`,\n `arn:aws:dynamodb:${region}:${identity.accountId}:table/${dynamoDbTable}/*`\n ]\n }\n ]\n })\n }\n ]);\n\n const role = app.addResource(aws.iam.Role, {\n name: `${PREFIX}-role`,\n config: {\n inlinePolicies,\n managedPolicyArns: [aws.iam.ManagedPolicies.AWSLambdaBasicExecutionRole],\n assumeRolePolicy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Action: \"sts:AssumeRole\",\n Principal: aws.iam.Principals.LambdaPrincipal,\n Effect: \"Allow\"\n },\n {\n Action: \"sts:AssumeRole\",\n Principal: aws.iam.Principals.EdgeLambdaPrincipal,\n Effect: \"Allow\"\n }\n ]\n }\n }\n });\n\n const awsUsEast1 = new aws.Provider(\"us-east-1\", { region: \"us-east-1\" });\n\n const originLambda = app.addResource(aws.lambda.Function, {\n name: `${PREFIX}-origin-request`,\n config: {\n publish: true,\n runtime: LAMBDA_RUNTIME,\n handler: \"index.handler\",\n role: role.output.arn,\n timeout: 5,\n memorySize: 128,\n code: dynamoDbTable.apply(dynamoDbTable => {\n return createFunctionArchive({\n region,\n dynamoDbTable\n });\n })\n },\n // With the `retainOnDelete` option set to `true`, the Lambda function will not be deleted when\n // the environment is destroyed. Users need to delete the function manually. We decided to use\n // this option here because it enables us to avoid annoying AWS Lambda function replication\n // errors upon destroying the stack (see https://github.com/pulumi/pulumi-aws/issues/2178).\n opts: { provider: awsUsEast1, retainOnDelete: true },\n meta: {\n canUseVpc: false\n }\n });\n\n cloudfront.config.defaultCacheBehavior(value => {\n return {\n ...value,\n // We need to forward the `Host` header so the Lambda@Edge knows what custom domain was requested.\n forwardedValues: {\n ...value.forwardedValues,\n queryString: value.forwardedValues?.queryString || false,\n cookies: value.forwardedValues?.cookies || { forward: \"none\" },\n headers: [...(value.forwardedValues?.headers || []), \"Host\"]\n },\n lambdaFunctionAssociations: [\n ...(value.lambdaFunctionAssociations || []),\n {\n eventType: \"origin-request\",\n includeBody: false,\n lambdaArn: originLambda.output.qualifiedArn\n }\n ]\n };\n });\n\n return { originLambda };\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,GAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,uBAAA,CAAAF,OAAA;AACA,IAAAG,GAAA,GAAAD,uBAAA,CAAAF,OAAA;AAEA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,UAAA,GAAAL,OAAA;AACA,IAAAM,UAAA,GAAAN,OAAA;AAOA,SAASO,qBAAqBA,CAAC;EAAEC,aAAa;EAAEC;AAAe,CAAC,EAAE;EAC9D,MAAMC,OAAO,GAAG,IAAAC,gBAAY,EACxBC,SAAS,GAAG,yDAAyD,EACrE,OACJ,CAAC;EAED,MAAMC,MAAM,GAAGH,OAAO,CACjBI,OAAO,CAAC,iBAAiB,EAAEN,aAAa,CAAC,CACzCM,OAAO,CAAC,mBAAmB,EAAEL,MAAM,CAAC;EAEzC,OAAO,IAAIR,MAAM,CAACc,KAAK,CAACC,YAAY,CAAC;IACjC,UAAU,EAAE,IAAIf,MAAM,CAACc,KAAK,CAACE,WAAW,CAACJ,MAAM;EACnD,CAAC,CAAC;AACN;AAEA,MAAMK,MAAM,GAAG,gBAAgB;AAExB,SAASC,iBAAiBA,CAC7BC,GAAc,EACdC,UAAiE,EACnE;EACE,MAAMZ,MAAM,GAAG,IAAAa,kCAAuB,EAAC,CAAC;;EAExC;EACA,MAAMC,IAAI,GAAGH,GAAG,CAACI,SAAS,CAACC,kBAAU,CAAC;;EAEtC;EACA,MAAMjB,aAAa,GAAGe,IAAI,CAACG,wBAAwB;;EAEnD;EACA,MAAMC,cAAc,GAAG1B,MAAM,CACxB2B,GAAG,CAAC,CAACzB,GAAG,CAAC0B,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAErB,aAAa,CAAC,CAAC,CAC/CsB,KAAK,CAAC,CAAC,CAACC,QAAQ,EAAEvB,aAAa,CAAC,KAAK,CAClC;IACIwB,IAAI,EAAE,sBAAsB;IAC5BC,MAAM,EAAEC,IAAI,CAACC,SAAS,CAAC;MACnBC,OAAO,EAAE,YAAY;MACrBC,SAAS,EAAE,CACP;QACIC,GAAG,EAAE,uBAAuB;QAC5BC,MAAM,EAAE,OAAO;QACfC,MAAM,EAAE,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;QAC9CC,QAAQ,EAAE,CACN,oBAAoBhC,MAAM,IAAIsB,QAAQ,CAACW,SAAS,UAAUlC,aAAa,EAAE,EACzE,oBAAoBC,MAAM,IAAIsB,QAAQ,CAACW,SAAS,UAAUlC,aAAa,IAAI;MAEnF,CAAC;IAET,CAAC;EACL,CAAC,CACJ,CAAC;EAEN,MAAMmC,IAAI,GAAGvB,GAAG,CAACwB,WAAW,CAACzC,GAAG,CAAC0C,GAAG,CAACC,IAAI,EAAE;IACvCd,IAAI,EAAE,GAAGd,MAAM,OAAO;IACtB6B,MAAM,EAAE;MACJpB,cAAc;MACdqB,iBAAiB,EAAE,CAAC7C,GAAG,CAAC0C,GAAG,CAACI,eAAe,CAACC,2BAA2B,CAAC;MACxEC,gBAAgB,EAAE;QACdf,OAAO,EAAE,YAAY;QACrBC,SAAS,EAAE,CACP;UACIG,MAAM,EAAE,gBAAgB;UACxBY,SAAS,EAAEjD,GAAG,CAAC0C,GAAG,CAACQ,UAAU,CAACC,eAAe;UAC7Cf,MAAM,EAAE;QACZ,CAAC,EACD;UACIC,MAAM,EAAE,gBAAgB;UACxBY,SAAS,EAAEjD,GAAG,CAAC0C,GAAG,CAACQ,UAAU,CAACE,mBAAmB;UACjDhB,MAAM,EAAE;QACZ,CAAC;MAET;IACJ;EACJ,CAAC,CAAC;EAEF,MAAMiB,UAAU,GAAG,IAAIrD,GAAG,CAACsD,QAAQ,CAAC,WAAW,EAAE;IAAEhD,MAAM,EAAE;EAAY,CAAC,CAAC;EAEzE,MAAMiD,YAAY,GAAGtC,GAAG,CAACwB,WAAW,CAACzC,GAAG,CAACwD,MAAM,CAACC,QAAQ,EAAE;IACtD5B,IAAI,EAAE,GAAGd,MAAM,iBAAiB;IAChC6B,MAAM,EAAE;MACJc,OAAO,EAAE,IAAI;MACbC,OAAO,EAAEC,yBAAc;MACvBrD,OAAO,EAAE,eAAe;MACxBiC,IAAI,EAAEA,IAAI,CAACqB,MAAM,CAACC,GAAG;MACrBC,OAAO,EAAE,CAAC;MACVC,UAAU,EAAE,GAAG;MACfC,IAAI,EAAE5D,aAAa,CAACsB,KAAK,CAACtB,aAAa,IAAI;QACvC,OAAOD,qBAAqB,CAAC;UACzBE,MAAM;UACND;QACJ,CAAC,CAAC;MACN,CAAC;IACL,CAAC;IACD;IACA;IACA;IACA;IACA6D,IAAI,EAAE;MAAEC,QAAQ,EAAEd,UAAU;MAAEe,cAAc,EAAE;IAAK,CAAC;IACpDC,IAAI,EAAE;MACFC,SAAS,EAAE;IACf;EACJ,CAAC,CAAC;EAEFpD,UAAU,CAAC0B,MAAM,CAAC2B,oBAAoB,CAACC,KAAK,IAAI;IAC5C,OAAO;MACH,GAAGA,KAAK;MACR;MACAC,eAAe,EAAE;QACb,GAAGD,KAAK,CAACC,eAAe;QACxBC,WAAW,EAAEF,KAAK,CAACC,eAAe,EAAEC,WAAW,IAAI,KAAK;QACxDC,OAAO,EAAEH,KAAK,CAACC,eAAe,EAAEE,OAAO,IAAI;UAAEC,OAAO,EAAE;QAAO,CAAC;QAC9DC,OAAO,EAAE,CAAC,IAAIL,KAAK,CAACC,eAAe,EAAEI,OAAO,IAAI,EAAE,CAAC,EAAE,MAAM;MAC/D,CAAC;MACDC,0BAA0B,EAAE,CACxB,IAAIN,KAAK,CAACM,0BAA0B,IAAI,EAAE,CAAC,EAC3C;QACIC,SAAS,EAAE,gBAAgB;QAC3BC,WAAW,EAAE,KAAK;QAClBC,SAAS,EAAE1B,YAAY,CAACM,MAAM,CAACqB;MACnC,CAAC;IAET,CAAC;EACL,CAAC,CAAC;EAEF,OAAO;IAAE3B;EAAa,CAAC;AAC3B","ignoreList":[]}
|
|
@@ -50,7 +50,7 @@ function createPrerenderingSettingsDbItem(app, queue, params) {
|
|
|
50
50
|
rangeKey: params.dbTableRangeKey,
|
|
51
51
|
item: pulumi.interpolate`{
|
|
52
52
|
"PK": "PS#SETTINGS",
|
|
53
|
-
"SK": "
|
|
53
|
+
"SK": "default",
|
|
54
54
|
"data": {
|
|
55
55
|
"appUrl": "${params.appUrl}",
|
|
56
56
|
"deliveryUrl": "${params.deliveryUrl}",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["path","_interopRequireWildcard","require","pulumi","aws","_clientDynamodb","_awsLayers","_lambdaUtils","_common","_awsUtils","_constants","createPrerenderingService","app","params","queue","addResource","sqs","Queue","name","config","visibilityTimeoutSeconds","fifoQueue","policy","createLambdaPolicy","output","renderer","createRenderer","subscriber","createRenderSubscriber","flush","createFlushService","settings","createPrerenderingSettingsDbItem","tableItem","dynamodb","TableItem","tableName","dbTableName","hashKey","dbTableHashKey","rangeKey","dbTableRangeKey","item","interpolate","run","variant","appUrl","deliveryUrl","bucket","cloudfrontId","url","apply","v","JSON","stringify","marshall","parse","core","getModule","CoreOutput","role","createLambdaRole","lambda","Function","arn","runtime","LAMBDA_RUNTIME","handler","timeout","memorySize","environment","variables","getCommonLambdaEnvVariables","value","DB_TABLE","DB_TABLE_LOG","logDbTableName","description","code","asset","AssetArchive","FileArchive","join","paths","workspace","vpcConfig","VpcConfig","functionVpcConfig","eventRule","cloudwatch","EventRule","eventBusName","eventBusArn","eventPattern","eventPermission","Permission","action","function","principal","sourceArn","eventTarget","EventTarget","rule","executionRole","iam","ManagedPolicy","AWSLambdaSQSQueueExecutionRole","layers","getLayerArn","eventSourceMapping","EventSourceMapping","functionName","eventSourceArn","batchSize","awsAccountId","getAwsAccountId","Policy","Version","Statement","Sid","Effect","Action","Resource","s","resources","primaryDynamodbTableArn","logDynamodbTableArn","elasticsearchDynamodbTableArn","push"],"sources":["WebsitePrerendering.ts"],"sourcesContent":["import * as path from \"path\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport { marshall } from \"@webiny/aws-sdk/client-dynamodb\";\n\nimport { PulumiApp } from \"@webiny/pulumi\";\nimport { getLayerArn } from \"@webiny/aws-layers\";\n\nimport { createLambdaRole, getCommonLambdaEnvVariables } from \"../lambdaUtils\";\nimport { CoreOutput, VpcConfig } from \"../common\";\nimport { getAwsAccountId } from \"../awsUtils\";\nimport { LAMBDA_RUNTIME } from \"~/constants\";\n\ninterface PreRenderingServiceParams {\n dbTableName: pulumi.Output<string>;\n dbTableHashKey: pulumi.Output<string>;\n dbTableRangeKey: pulumi.Output<string>;\n logDbTableName: pulumi.Output<string>;\n appUrl: pulumi.Output<string>;\n deliveryUrl: pulumi.Output<string>;\n bucket: pulumi.Output<string>;\n cloudfrontId: pulumi.Output<string>;\n}\n\nexport function createPrerenderingService(app: PulumiApp, params: PreRenderingServiceParams) {\n const queue = app.addResource(aws.sqs.Queue, {\n name: \"ps-render-queue\",\n config: {\n visibilityTimeoutSeconds: 300,\n fifoQueue: true\n }\n });\n\n const policy = createLambdaPolicy(app, queue.output, params);\n const renderer = createRenderer(app, queue.output, policy.output, params);\n const subscriber = createRenderSubscriber(app, policy.output, params);\n const flush = createFlushService(app, policy.output, params);\n const settings = createPrerenderingSettingsDbItem(app, queue.output, params);\n\n return {\n subscriber,\n renderer,\n flush,\n settings\n };\n}\n\nfunction createPrerenderingSettingsDbItem(\n app: PulumiApp,\n queue: pulumi.Output<aws.sqs.Queue>,\n params: PreRenderingServiceParams\n) {\n /**\n * To handle everything related to prerendering, we need the following information:\n * - appUrl - SPA URL used to prerender HTML\n * - bucket - name of the S3 bucket used for storage of HTML snapshots\n * - cloudfrontId - for cache invalidation\n * - sqsQueueUrl - an SQS queue for prerendering tasks (messages)\n */\n const tableItem = app.addResource(aws.dynamodb.TableItem, {\n name: \"psSettings\",\n config: {\n tableName: params.dbTableName,\n hashKey: params.dbTableHashKey,\n rangeKey: params.dbTableRangeKey,\n item: pulumi.interpolate`{\n \"PK\": \"PS#SETTINGS\",\n \"SK\": \"${app.params.run.variant || \"default\"}\",\n \"data\": {\n \"appUrl\": \"${params.appUrl}\",\n \"deliveryUrl\": \"${params.deliveryUrl}\",\n \"bucket\": \"${params.bucket}\",\n \"cloudfrontId\": \"${params.cloudfrontId}\",\n \"sqsQueueUrl\": \"${queue.url}\"\n }\n }`\n // We're using the native DynamoDB converter to avoid building those nested objects ourselves.\n .apply(v => JSON.stringify(marshall(JSON.parse(v))))\n }\n });\n\n return { tableItem };\n}\n\nfunction createRenderSubscriber(\n app: PulumiApp,\n policy: pulumi.Output<aws.iam.Policy>,\n params: PreRenderingServiceParams\n) {\n const core = app.getModule(CoreOutput);\n\n const role = createLambdaRole(app, {\n name: \"ps-render-subscriber-role\",\n policy: policy\n });\n\n const lambda = app.addResource(aws.lambda.Function, {\n name: \"ps-render-subscriber-lambda\",\n config: {\n role: role.output.arn,\n runtime: LAMBDA_RUNTIME,\n handler: \"handler.handler\",\n timeout: 30,\n memorySize: 1024,\n environment: {\n variables: getCommonLambdaEnvVariables().apply(value => ({\n ...value,\n DB_TABLE: params.dbTableName,\n DB_TABLE_LOG: params.logDbTableName\n }))\n },\n description: \"Subscribes to render events on event bus\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.paths.workspace, \"prerendering/subscribe/build\")\n )\n }),\n vpcConfig: app.getModule(VpcConfig).functionVpcConfig\n }\n });\n\n /**\n * TODO: when we get to staged rollouts and variants, maybe we can create per-variant event rules,\n * to avoid invocation of all variant lambdas just to do a `detail-type` check and exit early.\n * That way, we would be publishing events scoped to a variant, like \"RenderPages-{variant}\".\n */\n\n const eventRule = app.addResource(aws.cloudwatch.EventRule, {\n name: \"ps-render-subscriber-event-rule\",\n config: {\n eventBusName: core.eventBusArn,\n eventPattern: JSON.stringify({\n \"detail-type\": [\"RenderPages\"]\n })\n }\n });\n\n const eventPermission = app.addResource(aws.lambda.Permission, {\n name: \"ps-render-subscriber-event-permission\",\n config: {\n action: \"lambda:InvokeFunction\",\n function: lambda.output.arn,\n principal: \"events.amazonaws.com\",\n sourceArn: eventRule.output.arn\n }\n });\n\n const eventTarget = app.addResource(aws.cloudwatch.EventTarget, {\n name: \"ps-render-subscriber-event-target\",\n config: {\n rule: eventRule.output.name,\n eventBusName: core.eventBusArn,\n arn: lambda.output.arn\n }\n });\n\n return {\n policy,\n role,\n lambda,\n eventRule,\n eventPermission,\n eventTarget\n };\n}\n\nfunction createRenderer(\n app: PulumiApp,\n queue: pulumi.Output<aws.sqs.Queue>,\n policy: pulumi.Output<aws.iam.Policy>,\n params: PreRenderingServiceParams\n) {\n const role = createLambdaRole(app, {\n name: \"ps-render-lambda-role\",\n policy: policy,\n executionRole: aws.iam.ManagedPolicy.AWSLambdaSQSQueueExecutionRole\n });\n\n const lambda = app.addResource(aws.lambda.Function, {\n name: \"ps-render-lambda\",\n config: {\n role: role.output.arn,\n runtime: LAMBDA_RUNTIME,\n handler: \"handler.handler\",\n timeout: 300,\n memorySize: 2048,\n layers: [getLayerArn(\"chromium\")],\n environment: {\n variables: getCommonLambdaEnvVariables().apply(value => ({\n ...value,\n DB_TABLE: params.dbTableName,\n DB_TABLE_LOG: params.logDbTableName\n }))\n },\n description: \"Renders pages and stores output in an S3 bucket of choice.\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.paths.workspace, \"prerendering/render/build\")\n )\n }),\n vpcConfig: app.getModule(VpcConfig).functionVpcConfig\n }\n });\n\n const eventSourceMapping = app.addResource(aws.lambda.EventSourceMapping, {\n name: \"ps-render-event-source-mapping\",\n config: {\n functionName: lambda.output.arn,\n eventSourceArn: queue.arn,\n batchSize: 1\n }\n });\n\n return {\n policy,\n role,\n lambda,\n eventSourceMapping\n };\n}\n\nfunction createFlushService(\n app: PulumiApp,\n policy: pulumi.Output<aws.iam.Policy>,\n params: PreRenderingServiceParams\n) {\n const core = app.getModule(CoreOutput);\n\n const role = createLambdaRole(app, {\n name: \"ps-flush-lambda-role\",\n policy: policy\n });\n\n const lambda = app.addResource(aws.lambda.Function, {\n name: \"ps-flush-lambda\",\n config: {\n role: role.output.arn,\n runtime: LAMBDA_RUNTIME,\n handler: \"handler.handler\",\n timeout: 30,\n memorySize: 1024,\n environment: {\n variables: getCommonLambdaEnvVariables().apply(value => ({\n ...value,\n DB_TABLE: params.dbTableName,\n DB_TABLE_LOG: params.logDbTableName\n }))\n },\n description: \"Subscribes to flush events on event bus\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.paths.workspace, \"prerendering/flush/build\")\n )\n }),\n vpcConfig: app.getModule(VpcConfig).functionVpcConfig\n }\n });\n\n const eventRule = app.addResource(aws.cloudwatch.EventRule, {\n name: \"ps-flush-event-rule\",\n config: {\n eventBusName: core.eventBusArn,\n eventPattern: JSON.stringify({\n \"detail-type\": [\"FlushPages\"]\n })\n }\n });\n\n const eventPermission = app.addResource(aws.lambda.Permission, {\n name: \"ps-flush-event-permission\",\n config: {\n action: \"lambda:InvokeFunction\",\n function: lambda.output.arn,\n principal: \"events.amazonaws.com\",\n sourceArn: eventRule.output.arn\n }\n });\n\n const eventTarget = app.addResource(aws.cloudwatch.EventTarget, {\n name: \"ps-flush-event-target\",\n config: {\n rule: eventRule.output.name,\n eventBusName: core.eventBusArn,\n arn: lambda.output.arn\n }\n });\n\n return {\n policy,\n role,\n lambda,\n eventRule,\n eventPermission,\n eventTarget\n };\n}\n\nfunction createLambdaPolicy(\n app: PulumiApp,\n queue: pulumi.Output<aws.sqs.Queue>,\n params: PreRenderingServiceParams\n) {\n const core = app.getModule(CoreOutput);\n const awsAccountId = getAwsAccountId(app);\n\n return app.addResource(aws.iam.Policy, {\n name: \"ps-lambda-policy\",\n config: {\n description: \"This policy enables access to Lambda, S3, Cloudfront, SQS and Dynamodb\",\n policy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Sid: \"PermissionForDynamodb\",\n Effect: \"Allow\",\n Action: [\n \"dynamodb:BatchGetItem\",\n \"dynamodb:BatchWriteItem\",\n \"dynamodb:DeleteItem\",\n \"dynamodb:GetItem\",\n \"dynamodb:PutItem\",\n \"dynamodb:Query\",\n \"dynamodb:Scan\",\n \"dynamodb:UpdateItem\"\n ],\n Resource: core.apply(s => {\n // Add permissions to DynamoDB table\n const resources = [\n `${s.primaryDynamodbTableArn}`,\n `${s.primaryDynamodbTableArn}/*`,\n `${s.logDynamodbTableArn}`,\n `${s.logDynamodbTableArn}/*`\n ];\n\n // Attach permissions for elastic search dynamo as well (if ES is enabled).\n if (s.elasticsearchDynamodbTableArn) {\n resources.push(\n `${s.elasticsearchDynamodbTableArn}`,\n `${s.elasticsearchDynamodbTableArn}/*`\n );\n }\n\n return resources;\n })\n },\n {\n Sid: \"PermissionForS3\",\n Effect: \"Allow\",\n Action: [\"s3:DeleteObject\", \"s3:GetObject\", \"s3:PutObject\"],\n Resource: [pulumi.interpolate`arn:aws:s3:::${params.bucket}/*`]\n },\n {\n Sid: \"PermissionForCloudfront\",\n Effect: \"Allow\",\n Action: \"cloudfront:CreateInvalidation\",\n Resource: pulumi.interpolate`arn:aws:cloudfront::${awsAccountId}:distribution/*`\n },\n {\n Sid: \"PermissionForSQS\",\n Effect: \"Allow\",\n Action: [\"sqs:SendMessage\", \"sqs:SendMessageBatch\"],\n Resource: queue.arn\n }\n ]\n }\n }\n });\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["path","_interopRequireWildcard","require","pulumi","aws","_clientDynamodb","_awsLayers","_lambdaUtils","_common","_awsUtils","_constants","createPrerenderingService","app","params","queue","addResource","sqs","Queue","name","config","visibilityTimeoutSeconds","fifoQueue","policy","createLambdaPolicy","output","renderer","createRenderer","subscriber","createRenderSubscriber","flush","createFlushService","settings","createPrerenderingSettingsDbItem","tableItem","dynamodb","TableItem","tableName","dbTableName","hashKey","dbTableHashKey","rangeKey","dbTableRangeKey","item","interpolate","appUrl","deliveryUrl","bucket","cloudfrontId","url","apply","v","JSON","stringify","marshall","parse","core","getModule","CoreOutput","role","createLambdaRole","lambda","Function","arn","runtime","LAMBDA_RUNTIME","handler","timeout","memorySize","environment","variables","getCommonLambdaEnvVariables","value","DB_TABLE","DB_TABLE_LOG","logDbTableName","description","code","asset","AssetArchive","FileArchive","join","paths","workspace","vpcConfig","VpcConfig","functionVpcConfig","eventRule","cloudwatch","EventRule","eventBusName","eventBusArn","eventPattern","eventPermission","Permission","action","function","principal","sourceArn","eventTarget","EventTarget","rule","executionRole","iam","ManagedPolicy","AWSLambdaSQSQueueExecutionRole","layers","getLayerArn","eventSourceMapping","EventSourceMapping","functionName","eventSourceArn","batchSize","awsAccountId","getAwsAccountId","Policy","Version","Statement","Sid","Effect","Action","Resource","s","resources","primaryDynamodbTableArn","logDynamodbTableArn","elasticsearchDynamodbTableArn","push"],"sources":["WebsitePrerendering.ts"],"sourcesContent":["import * as path from \"path\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport { marshall } from \"@webiny/aws-sdk/client-dynamodb\";\n\nimport { PulumiApp } from \"@webiny/pulumi\";\nimport { getLayerArn } from \"@webiny/aws-layers\";\n\nimport { createLambdaRole, getCommonLambdaEnvVariables } from \"../lambdaUtils\";\nimport { CoreOutput, VpcConfig } from \"../common\";\nimport { getAwsAccountId } from \"../awsUtils\";\nimport { LAMBDA_RUNTIME } from \"~/constants\";\n\ninterface PreRenderingServiceParams {\n dbTableName: pulumi.Output<string>;\n dbTableHashKey: pulumi.Output<string>;\n dbTableRangeKey: pulumi.Output<string>;\n logDbTableName: pulumi.Output<string>;\n appUrl: pulumi.Output<string>;\n deliveryUrl: pulumi.Output<string>;\n bucket: pulumi.Output<string>;\n cloudfrontId: pulumi.Output<string>;\n}\n\nexport function createPrerenderingService(app: PulumiApp, params: PreRenderingServiceParams) {\n const queue = app.addResource(aws.sqs.Queue, {\n name: \"ps-render-queue\",\n config: {\n visibilityTimeoutSeconds: 300,\n fifoQueue: true\n }\n });\n\n const policy = createLambdaPolicy(app, queue.output, params);\n const renderer = createRenderer(app, queue.output, policy.output, params);\n const subscriber = createRenderSubscriber(app, policy.output, params);\n const flush = createFlushService(app, policy.output, params);\n const settings = createPrerenderingSettingsDbItem(app, queue.output, params);\n\n return {\n subscriber,\n renderer,\n flush,\n settings\n };\n}\n\nfunction createPrerenderingSettingsDbItem(\n app: PulumiApp,\n queue: pulumi.Output<aws.sqs.Queue>,\n params: PreRenderingServiceParams\n) {\n /**\n * To handle everything related to prerendering, we need the following information:\n * - appUrl - SPA URL used to prerender HTML\n * - bucket - name of the S3 bucket used for storage of HTML snapshots\n * - cloudfrontId - for cache invalidation\n * - sqsQueueUrl - an SQS queue for prerendering tasks (messages)\n */\n const tableItem = app.addResource(aws.dynamodb.TableItem, {\n name: \"psSettings\",\n config: {\n tableName: params.dbTableName,\n hashKey: params.dbTableHashKey,\n rangeKey: params.dbTableRangeKey,\n item: pulumi.interpolate`{\n \"PK\": \"PS#SETTINGS\",\n \"SK\": \"default\",\n \"data\": {\n \"appUrl\": \"${params.appUrl}\",\n \"deliveryUrl\": \"${params.deliveryUrl}\",\n \"bucket\": \"${params.bucket}\",\n \"cloudfrontId\": \"${params.cloudfrontId}\",\n \"sqsQueueUrl\": \"${queue.url}\"\n }\n }`\n // We're using the native DynamoDB converter to avoid building those nested objects ourselves.\n .apply(v => JSON.stringify(marshall(JSON.parse(v))))\n }\n });\n\n return { tableItem };\n}\n\nfunction createRenderSubscriber(\n app: PulumiApp,\n policy: pulumi.Output<aws.iam.Policy>,\n params: PreRenderingServiceParams\n) {\n const core = app.getModule(CoreOutput);\n\n const role = createLambdaRole(app, {\n name: \"ps-render-subscriber-role\",\n policy: policy\n });\n\n const lambda = app.addResource(aws.lambda.Function, {\n name: \"ps-render-subscriber-lambda\",\n config: {\n role: role.output.arn,\n runtime: LAMBDA_RUNTIME,\n handler: \"handler.handler\",\n timeout: 30,\n memorySize: 1024,\n environment: {\n variables: getCommonLambdaEnvVariables().apply(value => ({\n ...value,\n DB_TABLE: params.dbTableName,\n DB_TABLE_LOG: params.logDbTableName\n }))\n },\n description: \"Subscribes to render events on event bus\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.paths.workspace, \"prerendering/subscribe/build\")\n )\n }),\n vpcConfig: app.getModule(VpcConfig).functionVpcConfig\n }\n });\n\n /**\n * TODO: when we get to staged rollouts and variants, maybe we can create per-variant event rules,\n * to avoid invocation of all variant lambdas just to do a `detail-type` check and exit early.\n * That way, we would be publishing events scoped to a variant, like \"RenderPages-{variant}\".\n */\n\n const eventRule = app.addResource(aws.cloudwatch.EventRule, {\n name: \"ps-render-subscriber-event-rule\",\n config: {\n eventBusName: core.eventBusArn,\n eventPattern: JSON.stringify({\n \"detail-type\": [\"RenderPages\"]\n })\n }\n });\n\n const eventPermission = app.addResource(aws.lambda.Permission, {\n name: \"ps-render-subscriber-event-permission\",\n config: {\n action: \"lambda:InvokeFunction\",\n function: lambda.output.arn,\n principal: \"events.amazonaws.com\",\n sourceArn: eventRule.output.arn\n }\n });\n\n const eventTarget = app.addResource(aws.cloudwatch.EventTarget, {\n name: \"ps-render-subscriber-event-target\",\n config: {\n rule: eventRule.output.name,\n eventBusName: core.eventBusArn,\n arn: lambda.output.arn\n }\n });\n\n return {\n policy,\n role,\n lambda,\n eventRule,\n eventPermission,\n eventTarget\n };\n}\n\nfunction createRenderer(\n app: PulumiApp,\n queue: pulumi.Output<aws.sqs.Queue>,\n policy: pulumi.Output<aws.iam.Policy>,\n params: PreRenderingServiceParams\n) {\n const role = createLambdaRole(app, {\n name: \"ps-render-lambda-role\",\n policy: policy,\n executionRole: aws.iam.ManagedPolicy.AWSLambdaSQSQueueExecutionRole\n });\n\n const lambda = app.addResource(aws.lambda.Function, {\n name: \"ps-render-lambda\",\n config: {\n role: role.output.arn,\n runtime: LAMBDA_RUNTIME,\n handler: \"handler.handler\",\n timeout: 300,\n memorySize: 2048,\n layers: [getLayerArn(\"chromium\")],\n environment: {\n variables: getCommonLambdaEnvVariables().apply(value => ({\n ...value,\n DB_TABLE: params.dbTableName,\n DB_TABLE_LOG: params.logDbTableName\n }))\n },\n description: \"Renders pages and stores output in an S3 bucket of choice.\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.paths.workspace, \"prerendering/render/build\")\n )\n }),\n vpcConfig: app.getModule(VpcConfig).functionVpcConfig\n }\n });\n\n const eventSourceMapping = app.addResource(aws.lambda.EventSourceMapping, {\n name: \"ps-render-event-source-mapping\",\n config: {\n functionName: lambda.output.arn,\n eventSourceArn: queue.arn,\n batchSize: 1\n }\n });\n\n return {\n policy,\n role,\n lambda,\n eventSourceMapping\n };\n}\n\nfunction createFlushService(\n app: PulumiApp,\n policy: pulumi.Output<aws.iam.Policy>,\n params: PreRenderingServiceParams\n) {\n const core = app.getModule(CoreOutput);\n\n const role = createLambdaRole(app, {\n name: \"ps-flush-lambda-role\",\n policy: policy\n });\n\n const lambda = app.addResource(aws.lambda.Function, {\n name: \"ps-flush-lambda\",\n config: {\n role: role.output.arn,\n runtime: LAMBDA_RUNTIME,\n handler: \"handler.handler\",\n timeout: 30,\n memorySize: 1024,\n environment: {\n variables: getCommonLambdaEnvVariables().apply(value => ({\n ...value,\n DB_TABLE: params.dbTableName,\n DB_TABLE_LOG: params.logDbTableName\n }))\n },\n description: \"Subscribes to flush events on event bus\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.paths.workspace, \"prerendering/flush/build\")\n )\n }),\n vpcConfig: app.getModule(VpcConfig).functionVpcConfig\n }\n });\n\n const eventRule = app.addResource(aws.cloudwatch.EventRule, {\n name: \"ps-flush-event-rule\",\n config: {\n eventBusName: core.eventBusArn,\n eventPattern: JSON.stringify({\n \"detail-type\": [\"FlushPages\"]\n })\n }\n });\n\n const eventPermission = app.addResource(aws.lambda.Permission, {\n name: \"ps-flush-event-permission\",\n config: {\n action: \"lambda:InvokeFunction\",\n function: lambda.output.arn,\n principal: \"events.amazonaws.com\",\n sourceArn: eventRule.output.arn\n }\n });\n\n const eventTarget = app.addResource(aws.cloudwatch.EventTarget, {\n name: \"ps-flush-event-target\",\n config: {\n rule: eventRule.output.name,\n eventBusName: core.eventBusArn,\n arn: lambda.output.arn\n }\n });\n\n return {\n policy,\n role,\n lambda,\n eventRule,\n eventPermission,\n eventTarget\n };\n}\n\nfunction createLambdaPolicy(\n app: PulumiApp,\n queue: pulumi.Output<aws.sqs.Queue>,\n params: PreRenderingServiceParams\n) {\n const core = app.getModule(CoreOutput);\n const awsAccountId = getAwsAccountId(app);\n\n return app.addResource(aws.iam.Policy, {\n name: \"ps-lambda-policy\",\n config: {\n description: \"This policy enables access to Lambda, S3, Cloudfront, SQS and Dynamodb\",\n policy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Sid: \"PermissionForDynamodb\",\n Effect: \"Allow\",\n Action: [\n \"dynamodb:BatchGetItem\",\n \"dynamodb:BatchWriteItem\",\n \"dynamodb:DeleteItem\",\n \"dynamodb:GetItem\",\n \"dynamodb:PutItem\",\n \"dynamodb:Query\",\n \"dynamodb:Scan\",\n \"dynamodb:UpdateItem\"\n ],\n Resource: core.apply(s => {\n // Add permissions to DynamoDB table\n const resources = [\n `${s.primaryDynamodbTableArn}`,\n `${s.primaryDynamodbTableArn}/*`,\n `${s.logDynamodbTableArn}`,\n `${s.logDynamodbTableArn}/*`\n ];\n\n // Attach permissions for elastic search dynamo as well (if ES is enabled).\n if (s.elasticsearchDynamodbTableArn) {\n resources.push(\n `${s.elasticsearchDynamodbTableArn}`,\n `${s.elasticsearchDynamodbTableArn}/*`\n );\n }\n\n return resources;\n })\n },\n {\n Sid: \"PermissionForS3\",\n Effect: \"Allow\",\n Action: [\"s3:DeleteObject\", \"s3:GetObject\", \"s3:PutObject\"],\n Resource: [pulumi.interpolate`arn:aws:s3:::${params.bucket}/*`]\n },\n {\n Sid: \"PermissionForCloudfront\",\n Effect: \"Allow\",\n Action: \"cloudfront:CreateInvalidation\",\n Resource: pulumi.interpolate`arn:aws:cloudfront::${awsAccountId}:distribution/*`\n },\n {\n Sid: \"PermissionForSQS\",\n Effect: \"Allow\",\n Action: [\"sqs:SendMessage\", \"sqs:SendMessageBatch\"],\n Resource: queue.arn\n }\n ]\n }\n }\n });\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as pulumi from "@pulumi/pulumi";
|
|
2
2
|
import * as aws from "@pulumi/aws";
|
|
3
|
-
import {
|
|
3
|
+
import { PulumiAppParam, PulumiAppParamCallback } from "@webiny/pulumi";
|
|
4
4
|
import { CustomDomainParams } from "../customDomain";
|
|
5
5
|
export type WebsitePulumiApp = ReturnType<typeof createWebsitePulumiApp>;
|
|
6
6
|
export interface CreateWebsitePulumiAppParams {
|
|
@@ -18,6 +18,9 @@ var _utils = require("../../utils");
|
|
|
18
18
|
var _tenantRouter = require("../tenantRouter");
|
|
19
19
|
var _withServiceManifest = require("../../utils/withServiceManifest");
|
|
20
20
|
var _constants = require("../../constants");
|
|
21
|
+
var _variant = require("../../env/variant");
|
|
22
|
+
var _env = require("../../env/env");
|
|
23
|
+
var _projectName = require("../../env/projectName");
|
|
21
24
|
const createWebsitePulumiApp = (projectAppParams = {}) => {
|
|
22
25
|
const baseApp = (0, _pulumi2.createPulumiApp)({
|
|
23
26
|
name: "website",
|
|
@@ -272,8 +275,9 @@ const createWebsitePulumiApp = (projectAppParams = {}) => {
|
|
|
272
275
|
});
|
|
273
276
|
});
|
|
274
277
|
(0, _utils.tagResources)({
|
|
275
|
-
WbyProjectName:
|
|
276
|
-
WbyEnvironment:
|
|
278
|
+
WbyProjectName: (0, _projectName.getEnvVariableWebinyProjectName)(),
|
|
279
|
+
WbyEnvironment: (0, _env.getEnvVariableWebinyEnv)(),
|
|
280
|
+
WbyEnvironmentVariant: (0, _variant.getEnvVariableWebinyVariant)()
|
|
277
281
|
});
|
|
278
282
|
return {
|
|
279
283
|
prerendering,
|