@webiny/pulumi-aws 5.25.0-beta.6 → 5.25.1-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.
Files changed (93) hide show
  1. package/apps/admin/AdminApp.d.ts +14 -0
  2. package/apps/admin/AdminApp.js +134 -0
  3. package/apps/admin/AdminApp.js.map +1 -0
  4. package/apps/admin/AdminUpload.d.ts +6 -0
  5. package/apps/admin/AdminUpload.js +50 -0
  6. package/apps/admin/AdminUpload.js.map +1 -0
  7. package/apps/api/ApiApp.d.ts +66 -0
  8. package/apps/api/ApiApp.js +223 -0
  9. package/apps/api/ApiApp.js.map +1 -0
  10. package/apps/api/ApiApwScheduler.d.ts +23 -0
  11. package/apps/api/ApiApwScheduler.js +240 -0
  12. package/apps/api/ApiApwScheduler.js.map +1 -0
  13. package/apps/api/ApiCloudfront.d.ts +4 -0
  14. package/apps/api/ApiCloudfront.js +103 -0
  15. package/apps/api/ApiCloudfront.js.map +1 -0
  16. package/apps/api/ApiFileManager.d.ts +18 -0
  17. package/apps/api/ApiFileManager.js +168 -0
  18. package/apps/api/ApiFileManager.js.map +1 -0
  19. package/apps/api/ApiGateway.d.ts +19 -0
  20. package/apps/api/ApiGateway.js +90 -0
  21. package/apps/api/ApiGateway.js.map +1 -0
  22. package/apps/api/ApiGraphql.d.ts +27 -0
  23. package/apps/api/ApiGraphql.js +128 -0
  24. package/apps/api/ApiGraphql.js.map +1 -0
  25. package/apps/api/ApiHeadlessCMS.d.ts +18 -0
  26. package/apps/api/ApiHeadlessCMS.js +90 -0
  27. package/apps/api/ApiHeadlessCMS.js.map +1 -0
  28. package/apps/api/ApiLambdaUtils.d.ts +11 -0
  29. package/apps/api/ApiLambdaUtils.js +45 -0
  30. package/apps/api/ApiLambdaUtils.js.map +1 -0
  31. package/apps/api/ApiPageBuilder.d.ts +40 -0
  32. package/apps/api/ApiPageBuilder.js +289 -0
  33. package/apps/api/ApiPageBuilder.js.map +1 -0
  34. package/apps/api/ApiPrerendering.d.ts +24 -0
  35. package/apps/api/ApiPrerendering.js +200 -0
  36. package/apps/api/ApiPrerendering.js.map +1 -0
  37. package/apps/api/ApiVpc.d.ts +10 -0
  38. package/apps/api/ApiVpc.js +129 -0
  39. package/apps/api/ApiVpc.js.map +1 -0
  40. package/apps/api/index.d.ts +8 -0
  41. package/apps/api/index.js +109 -0
  42. package/apps/api/index.js.map +1 -0
  43. package/apps/awsUtils.d.ts +3 -0
  44. package/apps/awsUtils.js +25 -0
  45. package/apps/awsUtils.js.map +1 -0
  46. package/apps/createAppBucket.d.ts +13 -0
  47. package/apps/createAppBucket.js +107 -0
  48. package/apps/createAppBucket.js.map +1 -0
  49. package/apps/customDomain.d.ts +9 -0
  50. package/apps/customDomain.js +14 -0
  51. package/apps/customDomain.js.map +1 -0
  52. package/apps/getStorageOutput.d.ts +13 -0
  53. package/apps/getStorageOutput.js +29 -0
  54. package/apps/getStorageOutput.js.map +1 -0
  55. package/apps/index.d.ts +5 -0
  56. package/apps/index.js +72 -0
  57. package/apps/index.js.map +1 -0
  58. package/apps/storage/StorageApp.d.ts +16 -0
  59. package/apps/storage/StorageApp.js +90 -0
  60. package/apps/storage/StorageApp.js.map +1 -0
  61. package/apps/storage/StorageCognito.d.ts +11 -0
  62. package/apps/storage/StorageCognito.js +102 -0
  63. package/apps/storage/StorageCognito.js.map +1 -0
  64. package/apps/storage/StorageDynamo.d.ts +6 -0
  65. package/apps/storage/StorageDynamo.js +53 -0
  66. package/apps/storage/StorageDynamo.js.map +1 -0
  67. package/apps/storage/StorageFileManager.d.ts +6 -0
  68. package/apps/storage/StorageFileManager.js +40 -0
  69. package/apps/storage/StorageFileManager.js.map +1 -0
  70. package/apps/storage/index.d.ts +4 -0
  71. package/apps/storage/index.js +57 -0
  72. package/apps/storage/index.js.map +1 -0
  73. package/apps/website/WebsiteApp.d.ts +22 -0
  74. package/apps/website/WebsiteApp.js +206 -0
  75. package/apps/website/WebsiteApp.js.map +1 -0
  76. package/apps/website/WebsiteHookRender.d.ts +1 -0
  77. package/apps/website/WebsiteHookRender.js +65 -0
  78. package/apps/website/WebsiteHookRender.js.map +1 -0
  79. package/apps/website/WebsiteHookUpdatePbSettings.d.ts +5 -0
  80. package/apps/website/WebsiteHookUpdatePbSettings.js +80 -0
  81. package/apps/website/WebsiteHookUpdatePbSettings.js.map +1 -0
  82. package/apps/website/WebsiteHookUpload.d.ts +1 -0
  83. package/apps/website/WebsiteHookUpload.js +65 -0
  84. package/apps/website/WebsiteHookUpload.js.map +1 -0
  85. package/components/tenantRouter/functions/origin/request.js +54 -8
  86. package/components/tenantRouter/functions/origin/request.js.map +1 -1
  87. package/index.d.ts +1 -0
  88. package/index.js +18 -1
  89. package/index.js.map +1 -1
  90. package/package.json +10 -6
  91. package/types.d.ts +2 -0
  92. package/types.js +5 -0
  93. package/types.js.map +1 -0
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ApiPageBuilder = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var path = _interopRequireWildcard(require("path"));
13
+
14
+ var pulumi = _interopRequireWildcard(require("@pulumi/pulumi"));
15
+
16
+ var aws = _interopRequireWildcard(require("@pulumi/aws"));
17
+
18
+ var _installation = require("@webiny/api-page-builder/installation");
19
+
20
+ var _pulumiSdk = require("@webiny/pulumi-sdk");
21
+
22
+ var _ApiLambdaUtils = require("./ApiLambdaUtils");
23
+
24
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
+
26
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
+
28
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
29
+
30
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
31
+
32
+ const ApiPageBuilder = (0, _pulumiSdk.defineAppModule)({
33
+ name: "ApiPageBuilder",
34
+
35
+ config(app, params) {
36
+ app.addHandler(() => {
37
+ const pbInstallationZipPath = path.join(path.resolve(), ".tmp", "pbInstallation.zip"); // Will create "pbInstallation.zip" and save it in the `pbInstallationZipPath` path.
38
+
39
+ (0, _installation.createInstallationZip)(pbInstallationZipPath);
40
+ new aws.s3.BucketObject("./pbInstallation.zip", {
41
+ key: "pbInstallation.zip",
42
+ acl: "public-read",
43
+ bucket: params.fileManagerBucketId,
44
+ contentType: "application/octet-stream",
45
+ source: new pulumi.asset.FileAsset(pbInstallationZipPath)
46
+ });
47
+ });
48
+ const updateSettings = createUpdateSettingsResources(app, params);
49
+ const exportPages = createExportPagesResources(app, params);
50
+ const importPages = createImportPagesResources(app, params);
51
+ return {
52
+ updateSettings,
53
+ exportPages,
54
+ importPages
55
+ };
56
+ }
57
+
58
+ });
59
+ exports.ApiPageBuilder = ApiPageBuilder;
60
+
61
+ function createUpdateSettingsResources(app, params) {
62
+ const policy = createUpdateSettingsLambdaPolicy(app, params);
63
+ const role = (0, _ApiLambdaUtils.createLambdaRole)(app, {
64
+ name: "pb-update-settings-lambda-role",
65
+ policy: policy.output,
66
+ vpc: params.vpc
67
+ });
68
+ const update = app.addResource(aws.lambda.Function, {
69
+ name: "pb-update-settings",
70
+ config: {
71
+ role: role.output.arn,
72
+ runtime: "nodejs14.x",
73
+ handler: "handler.handler",
74
+ timeout: 10,
75
+ memorySize: 128,
76
+ description: "Updates default Page Builder app's settings, e.g. website or prerendering URLs, default title, etc.",
77
+ code: new pulumi.asset.AssetArchive({
78
+ ".": new pulumi.asset.FileArchive(path.join(app.ctx.appDir, "code/pageBuilder/updateSettings/build"))
79
+ }),
80
+ environment: {
81
+ variables: _objectSpread({}, params.env)
82
+ },
83
+ vpcConfig: params.vpc ? {
84
+ subnetIds: params.vpc.subnets.private.map(subNet => subNet.output.id),
85
+ securityGroupIds: [params.vpc.vpc.output.defaultSecurityGroupId]
86
+ } : undefined
87
+ }
88
+ });
89
+ return {
90
+ role,
91
+ policy,
92
+ functions: {
93
+ update
94
+ }
95
+ };
96
+ }
97
+
98
+ function createUpdateSettingsLambdaPolicy(app, params) {
99
+ return app.addResource(aws.iam.Policy, {
100
+ name: "PbUpdateSettingsLambdaPolicy",
101
+ config: {
102
+ description: "This policy enables access to Dynamodb",
103
+ policy: {
104
+ Version: "2012-10-17",
105
+ Statement: [{
106
+ Sid: "AllowDynamoDBAccess",
107
+ Effect: "Allow",
108
+ Action: ["dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:PutItem", "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:Query", "dynamodb:UpdateItem"],
109
+ Resource: [pulumi.interpolate`${params.primaryDynamodbTableArn}`, pulumi.interpolate`${params.primaryDynamodbTableArn}/*`]
110
+ }]
111
+ }
112
+ }
113
+ });
114
+ }
115
+
116
+ function createExportPagesResources(app, params) {
117
+ const policy = createExportPagesLambdaPolicy(app, params);
118
+ const role = (0, _ApiLambdaUtils.createLambdaRole)(app, {
119
+ name: "pb-export-pages-lambda-role",
120
+ policy: policy.output,
121
+ vpc: params.vpc
122
+ });
123
+ const combine = app.addResource(aws.lambda.Function, {
124
+ name: "pb-export-pages-combine",
125
+ config: {
126
+ role: role.output.arn,
127
+ runtime: "nodejs14.x",
128
+ handler: "handler.handler",
129
+ timeout: 60,
130
+ memorySize: 128,
131
+ description: "Handle page export's combine workflow",
132
+ code: new pulumi.asset.AssetArchive({
133
+ ".": new pulumi.asset.FileArchive(path.join(app.ctx.appDir, "code/pageBuilder/exportPages/combine/build"))
134
+ }),
135
+ environment: {
136
+ variables: _objectSpread(_objectSpread({}, params.env), {}, {
137
+ S3_BUCKET: params.fileManagerBucketId
138
+ })
139
+ }
140
+ }
141
+ });
142
+ const process = app.addResource(aws.lambda.Function, {
143
+ name: "pb-export-pages-process",
144
+ config: {
145
+ role: role.output.arn,
146
+ runtime: "nodejs14.x",
147
+ handler: "handler.handler",
148
+ timeout: 60,
149
+ memorySize: 128,
150
+ description: "Handle page export's process workflow",
151
+ code: new pulumi.asset.AssetArchive({
152
+ ".": new pulumi.asset.FileArchive(path.join(app.ctx.appDir, "code/pageBuilder/exportPages/process/build"))
153
+ }),
154
+ environment: {
155
+ variables: _objectSpread(_objectSpread({}, params.env), {}, {
156
+ S3_BUCKET: params.fileManagerBucketId,
157
+ EXPORT_PAGE_COMBINE_HANDLER: combine.output.arn
158
+ })
159
+ }
160
+ }
161
+ });
162
+ return {
163
+ role,
164
+ policy,
165
+ functions: {
166
+ process,
167
+ combine
168
+ }
169
+ };
170
+ }
171
+
172
+ function createExportPagesLambdaPolicy(app, params) {
173
+ return app.addResource(aws.iam.Policy, {
174
+ name: "PbExportPageTaskLambdaPolicy",
175
+ config: {
176
+ description: "This policy enables access to Dynamodb",
177
+ policy: {
178
+ Version: "2012-10-17",
179
+ Statement: [{
180
+ Sid: "AllowDynamoDBAccess",
181
+ Effect: "Allow",
182
+ Action: ["dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:PutItem", "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:Query", "dynamodb:UpdateItem"],
183
+ Resource: [pulumi.interpolate`${params.primaryDynamodbTableArn}`, pulumi.interpolate`${params.primaryDynamodbTableArn}/*`]
184
+ }, {
185
+ Sid: "PermissionForS3",
186
+ Effect: "Allow",
187
+ Action: ["s3:GetObjectAcl", "s3:DeleteObject", "s3:PutObjectAcl", "s3:PutObject", "s3:GetObject", "s3:ListBucket"],
188
+ Resource: [pulumi.interpolate`arn:aws:s3:::${params.fileManagerBucketId}/*`, // We need to explicitly add bucket ARN to "Resource" list for "s3:ListBucket" action.
189
+ pulumi.interpolate`arn:aws:s3:::${params.fileManagerBucketId}`]
190
+ }, {
191
+ Sid: "PermissionForLambda",
192
+ Effect: "Allow",
193
+ Action: ["lambda:InvokeFunction"],
194
+ Resource: pulumi.interpolate`arn:aws:lambda:${params.awsRegion}:${params.awsAccountId}:function:*`
195
+ }]
196
+ }
197
+ }
198
+ });
199
+ }
200
+
201
+ function createImportPagesResources(app, params) {
202
+ const policy = createImportPagesLambdaPolicy(app, params);
203
+ const role = (0, _ApiLambdaUtils.createLambdaRole)(app, {
204
+ name: "pb-import-page-lambda-role",
205
+ policy: policy.output,
206
+ vpc: params.vpc
207
+ });
208
+ const process = app.addResource(aws.lambda.Function, {
209
+ name: "pb-import-page-queue-process",
210
+ config: {
211
+ role: role.output.arn,
212
+ runtime: "nodejs14.x",
213
+ handler: "handler.handler",
214
+ timeout: 60,
215
+ memorySize: 512,
216
+ description: "Handle import page queue process workflow",
217
+ code: new pulumi.asset.AssetArchive({
218
+ ".": new pulumi.asset.FileArchive(path.join(app.ctx.appDir, "code/pageBuilder/importPages/process/build"))
219
+ }),
220
+ environment: {
221
+ variables: _objectSpread(_objectSpread({}, params.env), {}, {
222
+ S3_BUCKET: params.fileManagerBucketId
223
+ })
224
+ }
225
+ }
226
+ });
227
+ const create = app.addResource(aws.lambda.Function, {
228
+ name: "pb-import-page-queue-create",
229
+ config: {
230
+ role: role.output.arn,
231
+ runtime: "nodejs14.x",
232
+ handler: "handler.handler",
233
+ timeout: 60,
234
+ memorySize: 512,
235
+ description: "Handle import page queue create workflow",
236
+ code: new pulumi.asset.AssetArchive({
237
+ ".": new pulumi.asset.FileArchive(path.join(app.ctx.appDir, "code/pageBuilder/importPages/create/build"))
238
+ }),
239
+ environment: {
240
+ variables: _objectSpread(_objectSpread({}, params.env), {}, {
241
+ S3_BUCKET: params.fileManagerBucketId,
242
+ IMPORT_PAGE_QUEUE_PROCESS_HANDLER: process.output.arn
243
+ })
244
+ }
245
+ }
246
+ });
247
+ return {
248
+ role,
249
+ policy,
250
+ functions: {
251
+ create,
252
+ process
253
+ }
254
+ };
255
+ }
256
+
257
+ function createImportPagesLambdaPolicy(app, params) {
258
+ return app.addResource(aws.iam.Policy, {
259
+ name: "ImportPageLambdaPolicy",
260
+ config: {
261
+ description: "This policy enables access Dynamodb, S3, Lambda and Cognito IDP",
262
+ policy: {
263
+ Version: "2012-10-17",
264
+ Statement: [{
265
+ Sid: "PermissionForDynamodb",
266
+ Effect: "Allow",
267
+ Action: ["dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:PutItem", "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:Query", "dynamodb:UpdateItem"],
268
+ Resource: [pulumi.interpolate`${params.primaryDynamodbTableArn}`, pulumi.interpolate`${params.primaryDynamodbTableArn}/*`]
269
+ }, {
270
+ Sid: "PermissionForS3",
271
+ Effect: "Allow",
272
+ Action: ["s3:GetObjectAcl", "s3:DeleteObject", "s3:PutObjectAcl", "s3:PutObject", "s3:GetObject", "s3:ListBucket"],
273
+ Resource: [pulumi.interpolate`arn:aws:s3:::${params.fileManagerBucketId}/*`, // We need to explicitly add bucket ARN to "Resource" list for "s3:ListBucket" action.
274
+ pulumi.interpolate`arn:aws:s3:::${params.fileManagerBucketId}`]
275
+ }, {
276
+ Sid: "PermissionForLambda",
277
+ Effect: "Allow",
278
+ Action: ["lambda:InvokeFunction"],
279
+ Resource: pulumi.interpolate`arn:aws:lambda:${params.awsRegion}:${params.awsAccountId}:function:*`
280
+ }, {
281
+ Sid: "PermissionForCognitoIdp",
282
+ Effect: "Allow",
283
+ Action: "cognito-idp:*",
284
+ Resource: pulumi.interpolate`${params.cognitoUserPoolArn}`
285
+ }]
286
+ }
287
+ }
288
+ });
289
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ApiPageBuilder.ts"],"names":["ApiPageBuilder","name","config","app","params","addHandler","pbInstallationZipPath","path","join","resolve","aws","s3","BucketObject","key","acl","bucket","fileManagerBucketId","contentType","source","pulumi","asset","FileAsset","updateSettings","createUpdateSettingsResources","exportPages","createExportPagesResources","importPages","createImportPagesResources","policy","createUpdateSettingsLambdaPolicy","role","output","vpc","update","addResource","lambda","Function","arn","runtime","handler","timeout","memorySize","description","code","AssetArchive","FileArchive","ctx","appDir","environment","variables","env","vpcConfig","subnetIds","subnets","private","map","subNet","id","securityGroupIds","defaultSecurityGroupId","undefined","functions","iam","Policy","Version","Statement","Sid","Effect","Action","Resource","interpolate","primaryDynamodbTableArn","createExportPagesLambdaPolicy","combine","S3_BUCKET","process","EXPORT_PAGE_COMBINE_HANDLER","awsRegion","awsAccountId","createImportPagesLambdaPolicy","create","IMPORT_PAGE_QUEUE_PROCESS_HANDLER","cognitoUserPoolArn"],"mappings":"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","sourcesContent":["import * as path from \"path\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\n//@ts-ignore\nimport { createInstallationZip } from \"@webiny/api-page-builder/installation\";\nimport { defineAppModule, PulumiApp, PulumiAppModule } from \"@webiny/pulumi-sdk\";\nimport { Vpc } from \"./ApiVpc\";\nimport { createLambdaRole } from \"./ApiLambdaUtils\";\n\ninterface PageBuilderParams {\n env: Record<string, any>;\n primaryDynamodbTableArn: pulumi.Input<string>;\n fileManagerBucketId: pulumi.Input<string>;\n cognitoUserPoolArn: pulumi.Input<string>;\n awsAccountId: pulumi.Input<string>;\n awsRegion: pulumi.Input<string>;\n vpc: Vpc | undefined;\n}\n\nexport type ApiPageBuilder = PulumiAppModule<typeof ApiPageBuilder>;\n\nexport const ApiPageBuilder = defineAppModule({\n name: \"ApiPageBuilder\",\n config(app: PulumiApp, params: PageBuilderParams) {\n app.addHandler(() => {\n const pbInstallationZipPath = path.join(path.resolve(), \".tmp\", \"pbInstallation.zip\");\n // Will create \"pbInstallation.zip\" and save it in the `pbInstallationZipPath` path.\n createInstallationZip(pbInstallationZipPath);\n\n new aws.s3.BucketObject(\"./pbInstallation.zip\", {\n key: \"pbInstallation.zip\",\n acl: \"public-read\",\n bucket: params.fileManagerBucketId,\n contentType: \"application/octet-stream\",\n source: new pulumi.asset.FileAsset(pbInstallationZipPath)\n });\n });\n\n const updateSettings = createUpdateSettingsResources(app, params);\n const exportPages = createExportPagesResources(app, params);\n const importPages = createImportPagesResources(app, params);\n\n return {\n updateSettings,\n exportPages,\n importPages\n };\n }\n});\n\nfunction createUpdateSettingsResources(app: PulumiApp, params: PageBuilderParams) {\n const policy = createUpdateSettingsLambdaPolicy(app, params);\n const role = createLambdaRole(app, {\n name: \"pb-update-settings-lambda-role\",\n policy: policy.output,\n vpc: params.vpc\n });\n\n const update = app.addResource(aws.lambda.Function, {\n name: \"pb-update-settings\",\n config: {\n role: role.output.arn,\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n timeout: 10,\n memorySize: 128,\n description:\n \"Updates default Page Builder app's settings, e.g. website or prerendering URLs, default title, etc.\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.ctx.appDir, \"code/pageBuilder/updateSettings/build\")\n )\n }),\n environment: {\n variables: {\n ...params.env\n }\n },\n vpcConfig: params.vpc\n ? {\n subnetIds: params.vpc.subnets.private.map(subNet => subNet.output.id),\n securityGroupIds: [params.vpc.vpc.output.defaultSecurityGroupId]\n }\n : undefined\n }\n });\n\n return {\n role,\n policy,\n functions: {\n update\n }\n };\n}\n\nfunction createUpdateSettingsLambdaPolicy(app: PulumiApp, params: PageBuilderParams) {\n return app.addResource(aws.iam.Policy, {\n name: \"PbUpdateSettingsLambdaPolicy\",\n config: {\n description: \"This policy enables access to Dynamodb\",\n policy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Sid: \"AllowDynamoDBAccess\",\n Effect: \"Allow\",\n Action: [\n \"dynamodb:BatchGetItem\",\n \"dynamodb:BatchWriteItem\",\n \"dynamodb:PutItem\",\n \"dynamodb:DeleteItem\",\n \"dynamodb:GetItem\",\n \"dynamodb:Query\",\n \"dynamodb:UpdateItem\"\n ],\n Resource: [\n pulumi.interpolate`${params.primaryDynamodbTableArn}`,\n pulumi.interpolate`${params.primaryDynamodbTableArn}/*`\n ]\n }\n ]\n }\n }\n });\n}\n\nfunction createExportPagesResources(app: PulumiApp, params: PageBuilderParams) {\n const policy = createExportPagesLambdaPolicy(app, params);\n const role = createLambdaRole(app, {\n name: \"pb-export-pages-lambda-role\",\n policy: policy.output,\n vpc: params.vpc\n });\n\n const combine = app.addResource(aws.lambda.Function, {\n name: \"pb-export-pages-combine\",\n config: {\n role: role.output.arn,\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n timeout: 60,\n memorySize: 128,\n description: \"Handle page export's combine workflow\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.ctx.appDir, \"code/pageBuilder/exportPages/combine/build\")\n )\n }),\n environment: {\n variables: {\n ...params.env,\n S3_BUCKET: params.fileManagerBucketId\n }\n }\n }\n });\n\n const process = app.addResource(aws.lambda.Function, {\n name: \"pb-export-pages-process\",\n config: {\n role: role.output.arn,\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n timeout: 60,\n memorySize: 128,\n description: \"Handle page export's process workflow\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.ctx.appDir, \"code/pageBuilder/exportPages/process/build\")\n )\n }),\n environment: {\n variables: {\n ...params.env,\n S3_BUCKET: params.fileManagerBucketId,\n EXPORT_PAGE_COMBINE_HANDLER: combine.output.arn\n }\n }\n }\n });\n\n return {\n role,\n policy,\n functions: {\n process,\n combine\n }\n };\n}\n\nfunction createExportPagesLambdaPolicy(app: PulumiApp, params: PageBuilderParams) {\n return app.addResource(aws.iam.Policy, {\n name: \"PbExportPageTaskLambdaPolicy\",\n config: {\n description: \"This policy enables access to Dynamodb\",\n policy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Sid: \"AllowDynamoDBAccess\",\n Effect: \"Allow\",\n Action: [\n \"dynamodb:BatchGetItem\",\n \"dynamodb:BatchWriteItem\",\n \"dynamodb:PutItem\",\n \"dynamodb:DeleteItem\",\n \"dynamodb:GetItem\",\n \"dynamodb:Query\",\n \"dynamodb:UpdateItem\"\n ],\n Resource: [\n pulumi.interpolate`${params.primaryDynamodbTableArn}`,\n pulumi.interpolate`${params.primaryDynamodbTableArn}/*`\n ]\n },\n {\n Sid: \"PermissionForS3\",\n Effect: \"Allow\",\n Action: [\n \"s3:GetObjectAcl\",\n \"s3:DeleteObject\",\n \"s3:PutObjectAcl\",\n \"s3:PutObject\",\n \"s3:GetObject\",\n \"s3:ListBucket\"\n ],\n Resource: [\n pulumi.interpolate`arn:aws:s3:::${params.fileManagerBucketId}/*`,\n // We need to explicitly add bucket ARN to \"Resource\" list for \"s3:ListBucket\" action.\n pulumi.interpolate`arn:aws:s3:::${params.fileManagerBucketId}`\n ]\n },\n {\n Sid: \"PermissionForLambda\",\n Effect: \"Allow\",\n Action: [\"lambda:InvokeFunction\"],\n Resource: pulumi.interpolate`arn:aws:lambda:${params.awsRegion}:${params.awsAccountId}:function:*`\n }\n ]\n }\n }\n });\n}\n\nfunction createImportPagesResources(app: PulumiApp, params: PageBuilderParams) {\n const policy = createImportPagesLambdaPolicy(app, params);\n const role = createLambdaRole(app, {\n name: \"pb-import-page-lambda-role\",\n policy: policy.output,\n vpc: params.vpc\n });\n\n const process = app.addResource(aws.lambda.Function, {\n name: \"pb-import-page-queue-process\",\n config: {\n role: role.output.arn,\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n timeout: 60,\n memorySize: 512,\n description: \"Handle import page queue process workflow\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.ctx.appDir, \"code/pageBuilder/importPages/process/build\")\n )\n }),\n environment: {\n variables: {\n ...params.env,\n S3_BUCKET: params.fileManagerBucketId\n }\n }\n }\n });\n\n const create = app.addResource(aws.lambda.Function, {\n name: \"pb-import-page-queue-create\",\n config: {\n role: role.output.arn,\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n timeout: 60,\n memorySize: 512,\n description: \"Handle import page queue create workflow\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.ctx.appDir, \"code/pageBuilder/importPages/create/build\")\n )\n }),\n environment: {\n variables: {\n ...params.env,\n S3_BUCKET: params.fileManagerBucketId,\n IMPORT_PAGE_QUEUE_PROCESS_HANDLER: process.output.arn\n }\n }\n }\n });\n\n return {\n role,\n policy,\n functions: {\n create,\n process\n }\n };\n}\n\nfunction createImportPagesLambdaPolicy(app: PulumiApp, params: PageBuilderParams) {\n return app.addResource(aws.iam.Policy, {\n name: \"ImportPageLambdaPolicy\",\n config: {\n description: \"This policy enables access Dynamodb, S3, Lambda and Cognito IDP\",\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:PutItem\",\n \"dynamodb:DeleteItem\",\n \"dynamodb:GetItem\",\n \"dynamodb:Query\",\n \"dynamodb:UpdateItem\"\n ],\n Resource: [\n pulumi.interpolate`${params.primaryDynamodbTableArn}`,\n pulumi.interpolate`${params.primaryDynamodbTableArn}/*`\n ]\n },\n {\n Sid: \"PermissionForS3\",\n Effect: \"Allow\",\n Action: [\n \"s3:GetObjectAcl\",\n \"s3:DeleteObject\",\n \"s3:PutObjectAcl\",\n \"s3:PutObject\",\n \"s3:GetObject\",\n \"s3:ListBucket\"\n ],\n Resource: [\n pulumi.interpolate`arn:aws:s3:::${params.fileManagerBucketId}/*`,\n // We need to explicitly add bucket ARN to \"Resource\" list for \"s3:ListBucket\" action.\n pulumi.interpolate`arn:aws:s3:::${params.fileManagerBucketId}`\n ]\n },\n {\n Sid: \"PermissionForLambda\",\n Effect: \"Allow\",\n Action: [\"lambda:InvokeFunction\"],\n Resource: pulumi.interpolate`arn:aws:lambda:${params.awsRegion}:${params.awsAccountId}:function:*`\n },\n {\n Sid: \"PermissionForCognitoIdp\",\n Effect: \"Allow\",\n Action: \"cognito-idp:*\",\n Resource: pulumi.interpolate`${params.cognitoUserPoolArn}`\n }\n ]\n }\n }\n });\n}\n"]}
@@ -0,0 +1,24 @@
1
+ import * as pulumi from "@pulumi/pulumi";
2
+ import * as aws from "@pulumi/aws";
3
+ import { PulumiApp } from "@webiny/pulumi-sdk";
4
+ import { Vpc } from "./ApiVpc";
5
+ interface PreRenderingServiceParams {
6
+ env: Record<string, any>;
7
+ primaryDynamodbTableArn: pulumi.Input<string>;
8
+ fileManagerBucketId: pulumi.Input<string>;
9
+ cognitoUserPoolArn: pulumi.Input<string>;
10
+ awsAccountId: pulumi.Input<string>;
11
+ awsRegion: pulumi.Input<string>;
12
+ vpc: Vpc | undefined;
13
+ }
14
+ export declare function createPrerenderingService(app: PulumiApp, params: PreRenderingServiceParams): {
15
+ functions: {
16
+ render: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.lambda.Function>;
17
+ flush: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.lambda.Function>;
18
+ queue: {
19
+ add: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.lambda.Function>;
20
+ process: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.lambda.Function>;
21
+ };
22
+ };
23
+ };
24
+ export {};
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createPrerenderingService = createPrerenderingService;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var path = _interopRequireWildcard(require("path"));
13
+
14
+ var pulumi = _interopRequireWildcard(require("@pulumi/pulumi"));
15
+
16
+ var aws = _interopRequireWildcard(require("@pulumi/aws"));
17
+
18
+ var _awsLayers = require("@webiny/aws-layers");
19
+
20
+ var _ApiLambdaUtils = require("./ApiLambdaUtils");
21
+
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+
26
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
27
+
28
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
29
+
30
+ function createPrerenderingService(app, params) {
31
+ const policy = createRenderingServiceLambdaPolicy(app, params);
32
+ const role = (0, _ApiLambdaUtils.createLambdaRole)(app, {
33
+ name: "pre-rendering-service-lambda-role",
34
+ policy: policy.output,
35
+ vpc: params.vpc
36
+ });
37
+ const render = app.addResource(aws.lambda.Function, {
38
+ name: "ps-render",
39
+ config: {
40
+ role: role.output.arn,
41
+ runtime: "nodejs14.x",
42
+ handler: "handler.handler",
43
+ timeout: 600,
44
+ memorySize: 2048,
45
+ layers: [(0, _awsLayers.getLayerArn)("shelf-io-chrome-aws-lambda-layer")],
46
+ environment: {
47
+ variables: _objectSpread({}, params.env)
48
+ },
49
+ description: "Renders pages and stores output in an S3 bucket of choice.",
50
+ code: new pulumi.asset.AssetArchive({
51
+ ".": new pulumi.asset.FileArchive(path.join(app.ctx.appDir, "code/prerenderingService/render/build"))
52
+ }),
53
+ vpcConfig: params.vpc ? {
54
+ subnetIds: params.vpc.subnets.private.map(subNet => subNet.output.id),
55
+ securityGroupIds: [params.vpc.vpc.output.defaultSecurityGroupId]
56
+ } : undefined
57
+ }
58
+ });
59
+ const flush = app.addResource(aws.lambda.Function, {
60
+ name: "ps-flush",
61
+ config: {
62
+ role: role.output.arn,
63
+ runtime: "nodejs14.x",
64
+ handler: "handler.handler",
65
+ timeout: 30,
66
+ memorySize: 512,
67
+ environment: {
68
+ variables: _objectSpread({}, params.env)
69
+ },
70
+ description: "Flushes previously render pages.",
71
+ code: new pulumi.asset.AssetArchive({
72
+ ".": new pulumi.asset.FileArchive(path.join(app.ctx.appDir, "code/prerenderingService/flush/build"))
73
+ }),
74
+ vpcConfig: params.vpc ? {
75
+ subnetIds: params.vpc.subnets.private.map(subNet => subNet.output.id),
76
+ securityGroupIds: [params.vpc.vpc.output.defaultSecurityGroupId]
77
+ } : undefined
78
+ }
79
+ });
80
+ const queueAdd = app.addResource(aws.lambda.Function, {
81
+ name: "ps-queue-add",
82
+ config: {
83
+ role: role.output.arn,
84
+ runtime: "nodejs14.x",
85
+ handler: "handler.handler",
86
+ timeout: 30,
87
+ memorySize: 512,
88
+ environment: {
89
+ variables: _objectSpread({}, params.env)
90
+ },
91
+ description: "Adds a prerendering task to the prerendering queue.",
92
+ code: new pulumi.asset.AssetArchive({
93
+ ".": new pulumi.asset.FileArchive(path.join(app.ctx.appDir, "code/prerenderingService/queue/add/build"))
94
+ }),
95
+ vpcConfig: params.vpc ? {
96
+ subnetIds: params.vpc.subnets.private.map(subNet => subNet.output.id),
97
+ securityGroupIds: [params.vpc.vpc.output.defaultSecurityGroupId]
98
+ } : undefined
99
+ }
100
+ });
101
+ const queueProcess = app.addResource(aws.lambda.Function, {
102
+ name: "ps-queue-process",
103
+ config: {
104
+ role: role.output.arn,
105
+ runtime: "nodejs14.x",
106
+ handler: "handler.handler",
107
+ timeout: 300,
108
+ // 5 minutes.
109
+ memorySize: 1024,
110
+ environment: {
111
+ variables: _objectSpread(_objectSpread({}, params.env), {}, {
112
+ PRERENDERING_RENDER_HANDLER: render.output.arn,
113
+ PRERENDERING_FLUSH_HANDLER: flush.output.arn
114
+ })
115
+ },
116
+ description: "Processes all jobs added to the prerendering queue.",
117
+ code: new pulumi.asset.AssetArchive({
118
+ ".": new pulumi.asset.FileArchive(path.join(app.ctx.appDir, "code/prerenderingService/queue/process/build"))
119
+ }),
120
+ vpcConfig: params.vpc ? {
121
+ subnetIds: params.vpc.subnets.private.map(subNet => subNet.output.id),
122
+ securityGroupIds: [params.vpc.vpc.output.defaultSecurityGroupId]
123
+ } : undefined
124
+ }
125
+ });
126
+ const cloudWatchEventRule = app.addResource(aws.cloudwatch.EventRule, {
127
+ name: "ps-process-queue-event-rule",
128
+ config: {
129
+ description: `Triggers "ps-process-queue" Lambda function that will process all queued prerendering jobs.`,
130
+ scheduleExpression: "rate(1 minute)",
131
+ isEnabled: true
132
+ }
133
+ });
134
+ app.addResource(aws.lambda.Permission, {
135
+ name: "ps-process-queue-event-rule-permission",
136
+ config: {
137
+ action: "lambda:InvokeFunction",
138
+ function: queueProcess.output.arn,
139
+ principal: "events.amazonaws.com",
140
+ sourceArn: cloudWatchEventRule.output.arn
141
+ }
142
+ });
143
+ app.addResource(aws.cloudwatch.EventTarget, {
144
+ name: "ps-process-queue-event-target",
145
+ config: {
146
+ rule: cloudWatchEventRule.output.name,
147
+ arn: queueProcess.output.arn
148
+ }
149
+ });
150
+ const functions = {
151
+ render,
152
+ flush,
153
+ queue: {
154
+ add: queueAdd,
155
+ process: queueProcess
156
+ }
157
+ };
158
+ return {
159
+ functions
160
+ };
161
+ }
162
+
163
+ function createRenderingServiceLambdaPolicy(app, params) {
164
+ return app.addResource(aws.iam.Policy, {
165
+ name: "PreRenderingServicePolicy",
166
+ config: {
167
+ description: "This policy enables access to Lambda, S3, Cloudfront and Dynamodb",
168
+ policy: {
169
+ Version: "2012-10-17",
170
+ Statement: [{
171
+ Sid: "PermissionForDynamodb",
172
+ Effect: "Allow",
173
+ Action: ["dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:UpdateItem"],
174
+ Resource: [pulumi.interpolate`${params.primaryDynamodbTableArn}`, pulumi.interpolate`${params.primaryDynamodbTableArn}/*`]
175
+ }, {
176
+ Sid: "PermissionForLambda",
177
+ Effect: "Allow",
178
+ Action: "lambda:InvokeFunction",
179
+ Resource: pulumi.interpolate`arn:aws:lambda:${params.awsRegion}:${params.awsAccountId}:function:*`
180
+ }, {
181
+ Sid: "PermissionForS3",
182
+ Effect: "Allow",
183
+ Action: ["s3:DeleteObject", "s3:GetObject", "s3:GetObjectAcl", "s3:PutObject", "s3:PutObjectAcl"],
184
+ Resource: [pulumi.interpolate`arn:aws:s3:::${params.fileManagerBucketId}/*`,
185
+ /**
186
+ * We're using the hard-coded value for "delivery" S3 bucket because;
187
+ * It is created during deployment of the `apps/website` stack which is after the api stack,
188
+ * so, we don't know its ARN.
189
+ */
190
+ "arn:aws:s3:::delivery-*/*"]
191
+ }, {
192
+ Sid: "PermissionForCloudfront",
193
+ Effect: "Allow",
194
+ Action: "cloudfront:CreateInvalidation",
195
+ Resource: pulumi.interpolate`arn:aws:cloudfront::${params.awsAccountId}:distribution/*`
196
+ }]
197
+ }
198
+ }
199
+ });
200
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ApiPrerendering.ts"],"names":["createPrerenderingService","app","params","policy","createRenderingServiceLambdaPolicy","role","name","output","vpc","render","addResource","aws","lambda","Function","config","arn","runtime","handler","timeout","memorySize","layers","environment","variables","env","description","code","pulumi","asset","AssetArchive","FileArchive","path","join","ctx","appDir","vpcConfig","subnetIds","subnets","private","map","subNet","id","securityGroupIds","defaultSecurityGroupId","undefined","flush","queueAdd","queueProcess","PRERENDERING_RENDER_HANDLER","PRERENDERING_FLUSH_HANDLER","cloudWatchEventRule","cloudwatch","EventRule","scheduleExpression","isEnabled","Permission","action","function","principal","sourceArn","EventTarget","rule","functions","queue","add","process","iam","Policy","Version","Statement","Sid","Effect","Action","Resource","interpolate","primaryDynamodbTableArn","awsRegion","awsAccountId","fileManagerBucketId"],"mappings":"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","sourcesContent":["import * as path from \"path\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nimport { PulumiApp } from \"@webiny/pulumi-sdk\";\n// @ts-ignore\nimport { getLayerArn } from \"@webiny/aws-layers\";\n\nimport { Vpc } from \"./ApiVpc\";\nimport { createLambdaRole } from \"./ApiLambdaUtils\";\n\ninterface PreRenderingServiceParams {\n env: Record<string, any>;\n primaryDynamodbTableArn: pulumi.Input<string>;\n fileManagerBucketId: pulumi.Input<string>;\n cognitoUserPoolArn: pulumi.Input<string>;\n awsAccountId: pulumi.Input<string>;\n awsRegion: pulumi.Input<string>;\n vpc: Vpc | undefined;\n}\n\nexport function createPrerenderingService(app: PulumiApp, params: PreRenderingServiceParams) {\n const policy = createRenderingServiceLambdaPolicy(app, params);\n const role = createLambdaRole(app, {\n name: \"pre-rendering-service-lambda-role\",\n policy: policy.output,\n vpc: params.vpc\n });\n\n const render = app.addResource(aws.lambda.Function, {\n name: \"ps-render\",\n config: {\n role: role.output.arn,\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n timeout: 600,\n memorySize: 2048,\n layers: [getLayerArn(\"shelf-io-chrome-aws-lambda-layer\")],\n environment: {\n variables: {\n ...params.env\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.ctx.appDir, \"code/prerenderingService/render/build\")\n )\n }),\n vpcConfig: params.vpc\n ? {\n subnetIds: params.vpc.subnets.private.map(subNet => subNet.output.id),\n securityGroupIds: [params.vpc.vpc.output.defaultSecurityGroupId]\n }\n : undefined\n }\n });\n\n const flush = app.addResource(aws.lambda.Function, {\n name: \"ps-flush\",\n config: {\n role: role.output.arn,\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n timeout: 30,\n memorySize: 512,\n environment: {\n variables: {\n ...params.env\n }\n },\n description: \"Flushes previously render pages.\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.ctx.appDir, \"code/prerenderingService/flush/build\")\n )\n }),\n vpcConfig: params.vpc\n ? {\n subnetIds: params.vpc.subnets.private.map(subNet => subNet.output.id),\n securityGroupIds: [params.vpc.vpc.output.defaultSecurityGroupId]\n }\n : undefined\n }\n });\n\n const queueAdd = app.addResource(aws.lambda.Function, {\n name: \"ps-queue-add\",\n config: {\n role: role.output.arn,\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n timeout: 30,\n memorySize: 512,\n environment: {\n variables: {\n ...params.env\n }\n },\n description: \"Adds a prerendering task to the prerendering queue.\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.ctx.appDir, \"code/prerenderingService/queue/add/build\")\n )\n }),\n vpcConfig: params.vpc\n ? {\n subnetIds: params.vpc.subnets.private.map(subNet => subNet.output.id),\n securityGroupIds: [params.vpc.vpc.output.defaultSecurityGroupId]\n }\n : undefined\n }\n });\n\n const queueProcess = app.addResource(aws.lambda.Function, {\n name: \"ps-queue-process\",\n config: {\n role: role.output.arn,\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n timeout: 300, // 5 minutes.\n memorySize: 1024,\n environment: {\n variables: {\n ...params.env,\n PRERENDERING_RENDER_HANDLER: render.output.arn,\n PRERENDERING_FLUSH_HANDLER: flush.output.arn\n }\n },\n description: \"Processes all jobs added to the prerendering queue.\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.ctx.appDir, \"code/prerenderingService/queue/process/build\")\n )\n }),\n vpcConfig: params.vpc\n ? {\n subnetIds: params.vpc.subnets.private.map(subNet => subNet.output.id),\n securityGroupIds: [params.vpc.vpc.output.defaultSecurityGroupId]\n }\n : undefined\n }\n });\n\n const cloudWatchEventRule = app.addResource(aws.cloudwatch.EventRule, {\n name: \"ps-process-queue-event-rule\",\n config: {\n description: `Triggers \"ps-process-queue\" Lambda function that will process all queued prerendering jobs.`,\n scheduleExpression: \"rate(1 minute)\",\n isEnabled: true\n }\n });\n\n app.addResource(aws.lambda.Permission, {\n name: \"ps-process-queue-event-rule-permission\",\n config: {\n action: \"lambda:InvokeFunction\",\n function: queueProcess.output.arn,\n principal: \"events.amazonaws.com\",\n sourceArn: cloudWatchEventRule.output.arn\n }\n });\n\n app.addResource(aws.cloudwatch.EventTarget, {\n name: \"ps-process-queue-event-target\",\n config: {\n rule: cloudWatchEventRule.output.name,\n arn: queueProcess.output.arn\n }\n });\n\n const functions = {\n render,\n flush,\n queue: {\n add: queueAdd,\n process: queueProcess\n }\n };\n\n return {\n functions\n };\n}\n\nfunction createRenderingServiceLambdaPolicy(app: PulumiApp, params: PreRenderingServiceParams) {\n return app.addResource(aws.iam.Policy, {\n name: \"PreRenderingServicePolicy\",\n config: {\n description: \"This policy enables access to Lambda, S3, Cloudfront 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: [\n pulumi.interpolate`${params.primaryDynamodbTableArn}`,\n pulumi.interpolate`${params.primaryDynamodbTableArn}/*`\n ]\n },\n {\n Sid: \"PermissionForLambda\",\n Effect: \"Allow\",\n Action: \"lambda:InvokeFunction\",\n Resource: pulumi.interpolate`arn:aws:lambda:${params.awsRegion}:${params.awsAccountId}:function:*`\n },\n {\n Sid: \"PermissionForS3\",\n Effect: \"Allow\",\n Action: [\n \"s3:DeleteObject\",\n \"s3:GetObject\",\n \"s3:GetObjectAcl\",\n \"s3:PutObject\",\n \"s3:PutObjectAcl\"\n ],\n Resource: [\n pulumi.interpolate`arn:aws:s3:::${params.fileManagerBucketId}/*`,\n /**\n * We're using the hard-coded value for \"delivery\" S3 bucket because;\n * It is created during deployment of the `apps/website` stack which is after the api stack,\n * so, we don't know its ARN.\n */\n \"arn:aws:s3:::delivery-*/*\"\n ]\n },\n {\n Sid: \"PermissionForCloudfront\",\n Effect: \"Allow\",\n Action: \"cloudfront:CreateInvalidation\",\n Resource: pulumi.interpolate`arn:aws:cloudfront::${params.awsAccountId}:distribution/*`\n }\n ]\n }\n }\n });\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import * as aws from "@pulumi/aws";
2
+ import { PulumiApp } from "@webiny/pulumi-sdk";
3
+ export declare function createVpc(app: PulumiApp): {
4
+ vpc: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.ec2.Vpc>;
5
+ subnets: {
6
+ public: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.ec2.Subnet>[];
7
+ private: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.ec2.Subnet>[];
8
+ };
9
+ };
10
+ export declare type Vpc = ReturnType<typeof createVpc>;