@webiny/pulumi-aws 5.25.0-beta.5 → 5.25.1-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,240 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ApiApwScheduler = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _path = _interopRequireDefault(require("path"));
13
+
14
+ var pulumi = _interopRequireWildcard(require("@pulumi/pulumi"));
15
+
16
+ var aws = _interopRequireWildcard(require("@pulumi/aws"));
17
+
18
+ var _pulumiSdk = require("@webiny/pulumi-sdk");
19
+
20
+ 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); }
21
+
22
+ 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; }
23
+
24
+ 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; }
25
+
26
+ 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; }
27
+
28
+ const LAMBDA_NAME_PREFIX = "apw-scheduler";
29
+ const CREATE_RULE_LAMBDA = `${LAMBDA_NAME_PREFIX}-schedule-action-lambda`;
30
+ const EXECUTE_ACTION_LAMBDA = `${LAMBDA_NAME_PREFIX}-execute-action-lambda`;
31
+ const EVENT_RULE_NAME = `${LAMBDA_NAME_PREFIX}-event-rule`;
32
+ const EVENT_RULE_TARGET = `${LAMBDA_NAME_PREFIX}-event-rule-target`;
33
+ const ApiApwScheduler = (0, _pulumiSdk.defineAppModule)({
34
+ name: "ApiApwScheduler",
35
+
36
+ config(app, params) {
37
+ const executeAction = createExecuteActionLambda(app, params);
38
+ const scheduleAction = createScheduleActionLambda(app, executeAction.lambda.output, params); // Create event rule.
39
+
40
+ const eventRule = app.addResource(aws.cloudwatch.EventRule, {
41
+ name: EVENT_RULE_NAME,
42
+ config: {
43
+ description: `Enable us to schedule an action in publishing workflow at a particular datetime`,
44
+ scheduleExpression: "cron(* * * * ? 2000)",
45
+ isEnabled: true
46
+ }
47
+ }); // Add required permission to the target lambda.
48
+
49
+ app.addResource(aws.lambda.Permission, {
50
+ name: "eventTargetPermission",
51
+ config: {
52
+ action: "lambda:InvokeFunction",
53
+ function: scheduleAction.lambda.output.arn,
54
+ principal: "events.amazonaws.com",
55
+ statementId: "allow-rule-invoke-" + EVENT_RULE_NAME
56
+ }
57
+ }); // Add lambda as target to the event rule.
58
+
59
+ const eventTarget = app.addResource(aws.cloudwatch.EventTarget, {
60
+ name: EVENT_RULE_TARGET,
61
+ config: {
62
+ rule: eventRule.output.name,
63
+ arn: scheduleAction.lambda.output.arn
64
+ }
65
+ });
66
+ return {
67
+ executeAction,
68
+ scheduleAction,
69
+ eventRule,
70
+ eventTarget
71
+ };
72
+ }
73
+
74
+ });
75
+ exports.ApiApwScheduler = ApiApwScheduler;
76
+
77
+ function createExecuteActionLambda(app, params) {
78
+ const role = app.addResource(aws.iam.Role, {
79
+ name: `${EXECUTE_ACTION_LAMBDA}-role`,
80
+ config: {
81
+ assumeRolePolicy: {
82
+ Version: "2012-10-17",
83
+ Statement: [{
84
+ Action: "sts:AssumeRole",
85
+ Principal: {
86
+ Service: "lambda.amazonaws.com"
87
+ },
88
+ Effect: "Allow"
89
+ }]
90
+ }
91
+ }
92
+ });
93
+ const policy = createExecuteActionLambdaPolicy(app, params);
94
+ app.addResource(aws.iam.RolePolicyAttachment, {
95
+ name: `${EXECUTE_ACTION_LAMBDA}-role-policy-attachment`,
96
+ config: {
97
+ role: role.output,
98
+ policyArn: policy.output.arn
99
+ }
100
+ });
101
+ app.addResource(aws.iam.RolePolicyAttachment, {
102
+ name: `${EXECUTE_ACTION_LAMBDA}-AWSLambdaBasicExecutionRole`,
103
+ config: {
104
+ role: role.output,
105
+ policyArn: aws.iam.ManagedPolicy.AWSLambdaBasicExecutionRole
106
+ }
107
+ });
108
+ const lambda = app.addResource(aws.lambda.Function, {
109
+ name: EXECUTE_ACTION_LAMBDA,
110
+ config: {
111
+ role: role.output.arn,
112
+ runtime: "nodejs14.x",
113
+ handler: "handler.handler",
114
+ timeout: 60,
115
+ memorySize: 128,
116
+ description: "Handle execute action workflow in apw scheduler",
117
+ code: new pulumi.asset.AssetArchive({
118
+ ".": new pulumi.asset.FileArchive(_path.default.join(app.ctx.appDir, "code/apw/executeAction/build"))
119
+ }),
120
+ environment: {
121
+ variables: _objectSpread({}, params.env)
122
+ }
123
+ }
124
+ });
125
+ return {
126
+ role,
127
+ policy,
128
+ lambda
129
+ };
130
+ }
131
+
132
+ function createExecuteActionLambdaPolicy(app, params) {
133
+ return app.addResource(aws.iam.Policy, {
134
+ name: "ApwSchedulerExecuteActionLambdaPolicy",
135
+ config: {
136
+ description: "This policy enables access to cloudwatch event and lambda invocation",
137
+ policy: {
138
+ Version: "2012-10-17",
139
+ Statement: [{
140
+ Sid: "PermissionLambda",
141
+ Effect: "Allow",
142
+ Action: ["lambda:InvokeFunction"],
143
+ Resource: ["*"]
144
+ }, {
145
+ Sid: "PermissionDynamoDB",
146
+ Effect: "Allow",
147
+ Action: ["dynamodb:Query", "dynamodb:GetItem", "dynamodb:DeleteItem"],
148
+ Resource: [pulumi.interpolate`${params.primaryDynamodbTableArn}`, pulumi.interpolate`${params.primaryDynamodbTableArn}/*`]
149
+ }]
150
+ }
151
+ }
152
+ });
153
+ }
154
+
155
+ function createScheduleActionLambda(app, executeLambda, params) {
156
+ const role = app.addResource(aws.iam.Role, {
157
+ name: `${CREATE_RULE_LAMBDA}-role`,
158
+ config: {
159
+ assumeRolePolicy: {
160
+ Version: "2012-10-17",
161
+ Statement: [{
162
+ Action: "sts:AssumeRole",
163
+ Principal: {
164
+ Service: "lambda.amazonaws.com"
165
+ },
166
+ Effect: "Allow"
167
+ }]
168
+ }
169
+ }
170
+ });
171
+ const policy = createScheduleActionLambdaPolicy(app, params);
172
+ app.addResource(aws.iam.RolePolicyAttachment, {
173
+ name: `${CREATE_RULE_LAMBDA}-role-policy-attachment`,
174
+ config: {
175
+ role: role.output,
176
+ policyArn: policy.output.arn
177
+ }
178
+ });
179
+ app.addResource(aws.iam.RolePolicyAttachment, {
180
+ name: `${CREATE_RULE_LAMBDA}-AWSLambdaBasicExecutionRole`,
181
+ config: {
182
+ role: role.output,
183
+ policyArn: aws.iam.ManagedPolicy.AWSLambdaBasicExecutionRole
184
+ }
185
+ });
186
+ const lambda = app.addResource(aws.lambda.Function, {
187
+ name: CREATE_RULE_LAMBDA,
188
+ config: {
189
+ role: role.output.arn,
190
+ runtime: "nodejs14.x",
191
+ handler: "handler.handler",
192
+ timeout: 60,
193
+ memorySize: 128,
194
+ description: "Handle schedule action workflow in apw scheduler",
195
+ code: new pulumi.asset.AssetArchive({
196
+ ".": new pulumi.asset.FileArchive(_path.default.join(app.ctx.appDir, "code/apw/scheduleAction/build"))
197
+ }),
198
+ environment: {
199
+ variables: _objectSpread(_objectSpread({}, params.env), {}, {
200
+ APW_SCHEDULER_EXECUTE_ACTION_HANDLER: executeLambda.arn // RULE_NAME: this.eventRule.name.apply(name => name),
201
+ // RULE_TARGET_ID: this.eventTarget.targetId.apply(id => id)
202
+
203
+ })
204
+ }
205
+ }
206
+ });
207
+ return {
208
+ role,
209
+ policy,
210
+ lambda
211
+ };
212
+ }
213
+
214
+ function createScheduleActionLambdaPolicy(app, params) {
215
+ return app.addResource(aws.iam.Policy, {
216
+ name: "ApwSchedulerScheduleActionLambdaPolicy",
217
+ config: {
218
+ description: "This policy enables access to cloudwatch event and lambda invocation",
219
+ policy: {
220
+ Version: "2012-10-17",
221
+ Statement: [{
222
+ Sid: "PermissionLambda",
223
+ Effect: "Allow",
224
+ Action: ["lambda:InvokeFunction"],
225
+ Resource: ["*"]
226
+ }, {
227
+ Sid: "PermissionDynamoDB",
228
+ Effect: "Allow",
229
+ Action: ["dynamodb:PutItem", "dynamodb:Query", "dynamodb:GetItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem"],
230
+ Resource: [pulumi.interpolate`${params.primaryDynamodbTableArn}`, pulumi.interpolate`${params.primaryDynamodbTableArn}/*`]
231
+ }, {
232
+ Sid: "PermissionEvents",
233
+ Effect: "Allow",
234
+ Action: ["events:DeleteRule", "events:PutTargets", "events:PutRule", "events:ListRules", "events:RemoveTargets", "events:ListTargetsByRule"],
235
+ Resource: ["*"]
236
+ }]
237
+ }
238
+ }
239
+ });
240
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ApiApwScheduler.ts"],"names":["LAMBDA_NAME_PREFIX","CREATE_RULE_LAMBDA","EXECUTE_ACTION_LAMBDA","EVENT_RULE_NAME","EVENT_RULE_TARGET","ApiApwScheduler","name","config","app","params","executeAction","createExecuteActionLambda","scheduleAction","createScheduleActionLambda","lambda","output","eventRule","addResource","aws","cloudwatch","EventRule","description","scheduleExpression","isEnabled","Permission","action","function","arn","principal","statementId","eventTarget","EventTarget","rule","role","iam","Role","assumeRolePolicy","Version","Statement","Action","Principal","Service","Effect","policy","createExecuteActionLambdaPolicy","RolePolicyAttachment","policyArn","ManagedPolicy","AWSLambdaBasicExecutionRole","Function","runtime","handler","timeout","memorySize","code","pulumi","asset","AssetArchive","FileArchive","path","join","ctx","appDir","environment","variables","env","Policy","Sid","Resource","interpolate","primaryDynamodbTableArn","executeLambda","createScheduleActionLambdaPolicy","APW_SCHEDULER_EXECUTE_ACTION_HANDLER"],"mappings":"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","sourcesContent":["import path from \"path\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport { defineAppModule, PulumiApp, PulumiAppModule } from \"@webiny/pulumi-sdk\";\n\ninterface ScheduleActionParams {\n env: Record<string, any>;\n primaryDynamodbTableArn: pulumi.Input<string>;\n}\n\nconst LAMBDA_NAME_PREFIX = \"apw-scheduler\";\nconst CREATE_RULE_LAMBDA = `${LAMBDA_NAME_PREFIX}-schedule-action-lambda`;\nconst EXECUTE_ACTION_LAMBDA = `${LAMBDA_NAME_PREFIX}-execute-action-lambda`;\nconst EVENT_RULE_NAME = `${LAMBDA_NAME_PREFIX}-event-rule`;\nconst EVENT_RULE_TARGET = `${LAMBDA_NAME_PREFIX}-event-rule-target`;\n\nexport type ApiApwScheduler = PulumiAppModule<typeof ApiApwScheduler>;\n\nexport const ApiApwScheduler = defineAppModule({\n name: \"ApiApwScheduler\",\n config(app: PulumiApp, params: ScheduleActionParams) {\n const executeAction = createExecuteActionLambda(app, params);\n const scheduleAction = createScheduleActionLambda(app, executeAction.lambda.output, params);\n\n // Create event rule.\n const eventRule = app.addResource(aws.cloudwatch.EventRule, {\n name: EVENT_RULE_NAME,\n config: {\n description: `Enable us to schedule an action in publishing workflow at a particular datetime`,\n scheduleExpression: \"cron(* * * * ? 2000)\",\n isEnabled: true\n }\n });\n\n // Add required permission to the target lambda.\n app.addResource(aws.lambda.Permission, {\n name: \"eventTargetPermission\",\n config: {\n action: \"lambda:InvokeFunction\",\n function: scheduleAction.lambda.output.arn,\n principal: \"events.amazonaws.com\",\n statementId: \"allow-rule-invoke-\" + EVENT_RULE_NAME\n }\n });\n\n // Add lambda as target to the event rule.\n const eventTarget = app.addResource(aws.cloudwatch.EventTarget, {\n name: EVENT_RULE_TARGET,\n config: {\n rule: eventRule.output.name,\n arn: scheduleAction.lambda.output.arn\n }\n });\n\n return {\n executeAction,\n scheduleAction,\n eventRule,\n eventTarget\n };\n }\n});\n\nfunction createExecuteActionLambda(app: PulumiApp, params: ScheduleActionParams) {\n const role = app.addResource(aws.iam.Role, {\n name: `${EXECUTE_ACTION_LAMBDA}-role`,\n config: {\n assumeRolePolicy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Action: \"sts:AssumeRole\",\n Principal: {\n Service: \"lambda.amazonaws.com\"\n },\n Effect: \"Allow\"\n }\n ]\n }\n }\n });\n\n const policy = createExecuteActionLambdaPolicy(app, params);\n\n app.addResource(aws.iam.RolePolicyAttachment, {\n name: `${EXECUTE_ACTION_LAMBDA}-role-policy-attachment`,\n config: {\n role: role.output,\n policyArn: policy.output.arn\n }\n });\n\n app.addResource(aws.iam.RolePolicyAttachment, {\n name: `${EXECUTE_ACTION_LAMBDA}-AWSLambdaBasicExecutionRole`,\n config: {\n role: role.output,\n policyArn: aws.iam.ManagedPolicy.AWSLambdaBasicExecutionRole\n }\n });\n\n const lambda = app.addResource(aws.lambda.Function, {\n name: EXECUTE_ACTION_LAMBDA,\n config: {\n role: role.output.arn,\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n timeout: 60,\n memorySize: 128,\n description: \"Handle execute action workflow in apw scheduler\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.ctx.appDir, \"code/apw/executeAction/build\")\n )\n }),\n environment: {\n variables: {\n ...params.env\n }\n }\n }\n });\n\n return {\n role,\n policy,\n lambda\n };\n}\n\nfunction createExecuteActionLambdaPolicy(app: PulumiApp, params: ScheduleActionParams) {\n return app.addResource(aws.iam.Policy, {\n name: \"ApwSchedulerExecuteActionLambdaPolicy\",\n config: {\n description: \"This policy enables access to cloudwatch event and lambda invocation\",\n policy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Sid: \"PermissionLambda\",\n Effect: \"Allow\",\n Action: [\"lambda:InvokeFunction\"],\n Resource: [\"*\"]\n },\n {\n Sid: \"PermissionDynamoDB\",\n Effect: \"Allow\",\n Action: [\"dynamodb:Query\", \"dynamodb:GetItem\", \"dynamodb:DeleteItem\"],\n Resource: [\n pulumi.interpolate`${params.primaryDynamodbTableArn}`,\n pulumi.interpolate`${params.primaryDynamodbTableArn}/*`\n ]\n }\n ]\n }\n }\n });\n}\n\nfunction createScheduleActionLambda(\n app: PulumiApp,\n executeLambda: pulumi.Output<aws.lambda.Function>,\n params: ScheduleActionParams\n) {\n const role = app.addResource(aws.iam.Role, {\n name: `${CREATE_RULE_LAMBDA}-role`,\n config: {\n assumeRolePolicy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Action: \"sts:AssumeRole\",\n Principal: {\n Service: \"lambda.amazonaws.com\"\n },\n Effect: \"Allow\"\n }\n ]\n }\n }\n });\n\n const policy = createScheduleActionLambdaPolicy(app, params);\n\n app.addResource(aws.iam.RolePolicyAttachment, {\n name: `${CREATE_RULE_LAMBDA}-role-policy-attachment`,\n config: {\n role: role.output,\n policyArn: policy.output.arn\n }\n });\n\n app.addResource(aws.iam.RolePolicyAttachment, {\n name: `${CREATE_RULE_LAMBDA}-AWSLambdaBasicExecutionRole`,\n config: {\n role: role.output,\n policyArn: aws.iam.ManagedPolicy.AWSLambdaBasicExecutionRole\n }\n });\n\n const lambda = app.addResource(aws.lambda.Function, {\n name: CREATE_RULE_LAMBDA,\n config: {\n role: role.output.arn,\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n timeout: 60,\n memorySize: 128,\n description: \"Handle schedule action workflow in apw scheduler\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.ctx.appDir, \"code/apw/scheduleAction/build\")\n )\n }),\n environment: {\n variables: {\n ...params.env,\n APW_SCHEDULER_EXECUTE_ACTION_HANDLER: executeLambda.arn\n // RULE_NAME: this.eventRule.name.apply(name => name),\n // RULE_TARGET_ID: this.eventTarget.targetId.apply(id => id)\n }\n }\n }\n });\n\n return {\n role,\n policy,\n lambda\n };\n}\n\nfunction createScheduleActionLambdaPolicy(app: PulumiApp, params: ScheduleActionParams) {\n return app.addResource(aws.iam.Policy, {\n name: \"ApwSchedulerScheduleActionLambdaPolicy\",\n config: {\n description: \"This policy enables access to cloudwatch event and lambda invocation\",\n policy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Sid: \"PermissionLambda\",\n Effect: \"Allow\",\n Action: [\"lambda:InvokeFunction\"],\n Resource: [\"*\"]\n },\n {\n Sid: \"PermissionDynamoDB\",\n Effect: \"Allow\",\n Action: [\n \"dynamodb:PutItem\",\n \"dynamodb:Query\",\n \"dynamodb:GetItem\",\n \"dynamodb:UpdateItem\",\n \"dynamodb:DeleteItem\"\n ],\n Resource: [\n pulumi.interpolate`${params.primaryDynamodbTableArn}`,\n pulumi.interpolate`${params.primaryDynamodbTableArn}/*`\n ]\n },\n {\n Sid: \"PermissionEvents\",\n Effect: \"Allow\",\n Action: [\n \"events:DeleteRule\",\n \"events:PutTargets\",\n \"events:PutRule\",\n \"events:ListRules\",\n \"events:RemoveTargets\",\n \"events:ListTargetsByRule\"\n ],\n Resource: [\"*\"]\n }\n ]\n }\n }\n });\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import * as aws from "@pulumi/aws";
2
+ import { PulumiAppModule } from "@webiny/pulumi-sdk";
3
+ export declare type ApiCloudfront = PulumiAppModule<typeof ApiCloudfront>;
4
+ export declare const ApiCloudfront: import("@webiny/pulumi-sdk").PulumiAppModuleDefinition<import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.cloudfront.Distribution>, void>;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ApiCloudfront = void 0;
7
+
8
+ var aws = _interopRequireWildcard(require("@pulumi/aws"));
9
+
10
+ var _pulumiSdk = require("@webiny/pulumi-sdk");
11
+
12
+ var _ApiGateway = require("./ApiGateway");
13
+
14
+ 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); }
15
+
16
+ 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; }
17
+
18
+ const ApiCloudfront = (0, _pulumiSdk.defineAppModule)({
19
+ name: "ApiCloudfront",
20
+
21
+ config(app) {
22
+ const gateway = app.getModule(_ApiGateway.ApiGateway);
23
+ return app.addResource(aws.cloudfront.Distribution, {
24
+ name: "api-cloudfront",
25
+ config: {
26
+ waitForDeployment: false,
27
+ defaultCacheBehavior: {
28
+ compress: true,
29
+ allowedMethods: ["GET", "HEAD", "OPTIONS", "PUT", "POST", "PATCH", "DELETE"],
30
+ cachedMethods: ["GET", "HEAD", "OPTIONS"],
31
+ forwardedValues: {
32
+ cookies: {
33
+ forward: "none"
34
+ },
35
+ headers: ["Accept", "Accept-Language"],
36
+ queryString: true
37
+ },
38
+ // MinTTL <= DefaultTTL <= MaxTTL
39
+ minTtl: 0,
40
+ defaultTtl: 0,
41
+ maxTtl: 86400,
42
+ targetOriginId: gateway.api.output.name,
43
+ viewerProtocolPolicy: "allow-all"
44
+ },
45
+ isIpv6Enabled: true,
46
+ enabled: true,
47
+ orderedCacheBehaviors: [{
48
+ compress: true,
49
+ allowedMethods: ["GET", "HEAD", "OPTIONS", "PUT", "POST", "PATCH", "DELETE"],
50
+ cachedMethods: ["GET", "HEAD", "OPTIONS"],
51
+ forwardedValues: {
52
+ cookies: {
53
+ forward: "none"
54
+ },
55
+ headers: ["Accept", "Accept-Language"],
56
+ queryString: true
57
+ },
58
+ pathPattern: "/cms*",
59
+ viewerProtocolPolicy: "allow-all",
60
+ targetOriginId: gateway.api.output.name
61
+ }, {
62
+ allowedMethods: ["GET", "HEAD", "OPTIONS", "PUT", "POST", "PATCH", "DELETE"],
63
+ cachedMethods: ["GET", "HEAD", "OPTIONS"],
64
+ forwardedValues: {
65
+ cookies: {
66
+ forward: "none"
67
+ },
68
+ headers: ["Accept", "Accept-Language"],
69
+ queryString: true
70
+ },
71
+ // MinTTL <= DefaultTTL <= MaxTTL
72
+ minTtl: 0,
73
+ defaultTtl: 0,
74
+ maxTtl: 2592000,
75
+ pathPattern: "/files/*",
76
+ viewerProtocolPolicy: "allow-all",
77
+ targetOriginId: gateway.api.output.name
78
+ }],
79
+ origins: [{
80
+ domainName: gateway.stage.output.invokeUrl.apply(url => new URL(url).hostname),
81
+ originPath: gateway.stage.output.invokeUrl.apply(url => new URL(url).pathname),
82
+ originId: gateway.api.output.name,
83
+ customOriginConfig: {
84
+ httpPort: 80,
85
+ httpsPort: 443,
86
+ originProtocolPolicy: "https-only",
87
+ originSslProtocols: ["TLSv1.2"]
88
+ }
89
+ }],
90
+ restrictions: {
91
+ geoRestriction: {
92
+ restrictionType: "none"
93
+ }
94
+ },
95
+ viewerCertificate: {
96
+ cloudfrontDefaultCertificate: true
97
+ }
98
+ }
99
+ });
100
+ }
101
+
102
+ });
103
+ exports.ApiCloudfront = ApiCloudfront;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ApiCloudfront.ts"],"names":["ApiCloudfront","name","config","app","gateway","getModule","ApiGateway","addResource","aws","cloudfront","Distribution","waitForDeployment","defaultCacheBehavior","compress","allowedMethods","cachedMethods","forwardedValues","cookies","forward","headers","queryString","minTtl","defaultTtl","maxTtl","targetOriginId","api","output","viewerProtocolPolicy","isIpv6Enabled","enabled","orderedCacheBehaviors","pathPattern","origins","domainName","stage","invokeUrl","apply","url","URL","hostname","originPath","pathname","originId","customOriginConfig","httpPort","httpsPort","originProtocolPolicy","originSslProtocols","restrictions","geoRestriction","restrictionType","viewerCertificate","cloudfrontDefaultCertificate"],"mappings":"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","sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport { defineAppModule, PulumiApp, PulumiAppModule } from \"@webiny/pulumi-sdk\";\n\nimport { ApiGateway } from \"./ApiGateway\";\n\nexport type ApiCloudfront = PulumiAppModule<typeof ApiCloudfront>;\n\nexport const ApiCloudfront = defineAppModule({\n name: \"ApiCloudfront\",\n config(app: PulumiApp) {\n const gateway = app.getModule(ApiGateway);\n\n return app.addResource(aws.cloudfront.Distribution, {\n name: \"api-cloudfront\",\n config: {\n waitForDeployment: false,\n defaultCacheBehavior: {\n compress: true,\n allowedMethods: [\"GET\", \"HEAD\", \"OPTIONS\", \"PUT\", \"POST\", \"PATCH\", \"DELETE\"],\n cachedMethods: [\"GET\", \"HEAD\", \"OPTIONS\"],\n forwardedValues: {\n cookies: {\n forward: \"none\"\n },\n headers: [\"Accept\", \"Accept-Language\"],\n queryString: true\n },\n // MinTTL <= DefaultTTL <= MaxTTL\n minTtl: 0,\n defaultTtl: 0,\n maxTtl: 86400,\n targetOriginId: gateway.api.output.name,\n viewerProtocolPolicy: \"allow-all\"\n },\n isIpv6Enabled: true,\n enabled: true,\n orderedCacheBehaviors: [\n {\n compress: true,\n allowedMethods: [\n \"GET\",\n \"HEAD\",\n \"OPTIONS\",\n \"PUT\",\n \"POST\",\n \"PATCH\",\n \"DELETE\"\n ],\n cachedMethods: [\"GET\", \"HEAD\", \"OPTIONS\"],\n forwardedValues: {\n cookies: {\n forward: \"none\"\n },\n headers: [\"Accept\", \"Accept-Language\"],\n queryString: true\n },\n pathPattern: \"/cms*\",\n viewerProtocolPolicy: \"allow-all\",\n targetOriginId: gateway.api.output.name\n },\n {\n allowedMethods: [\n \"GET\",\n \"HEAD\",\n \"OPTIONS\",\n \"PUT\",\n \"POST\",\n \"PATCH\",\n \"DELETE\"\n ],\n cachedMethods: [\"GET\", \"HEAD\", \"OPTIONS\"],\n forwardedValues: {\n cookies: {\n forward: \"none\"\n },\n headers: [\"Accept\", \"Accept-Language\"],\n queryString: true\n },\n // MinTTL <= DefaultTTL <= MaxTTL\n minTtl: 0,\n defaultTtl: 0,\n maxTtl: 2592000,\n pathPattern: \"/files/*\",\n viewerProtocolPolicy: \"allow-all\",\n targetOriginId: gateway.api.output.name\n }\n ],\n origins: [\n {\n domainName: gateway.stage.output.invokeUrl.apply(\n (url: string) => new URL(url).hostname\n ),\n originPath: gateway.stage.output.invokeUrl.apply(\n (url: string) => new URL(url).pathname\n ),\n originId: gateway.api.output.name,\n customOriginConfig: {\n httpPort: 80,\n httpsPort: 443,\n originProtocolPolicy: \"https-only\",\n originSslProtocols: [\"TLSv1.2\"]\n }\n }\n ],\n restrictions: {\n geoRestriction: {\n restrictionType: \"none\"\n }\n },\n viewerCertificate: {\n cloudfrontDefaultCertificate: true\n }\n }\n });\n }\n});\n"]}
@@ -0,0 +1,18 @@
1
+ import * as pulumi from "@pulumi/pulumi";
2
+ import * as aws from "@pulumi/aws";
3
+ import { PulumiAppModule } from "@webiny/pulumi-sdk";
4
+ import { Vpc } from "./ApiVpc";
5
+ interface FileManagerParams {
6
+ fileManagerBucketId: pulumi.Input<string>;
7
+ vpc: Vpc | undefined;
8
+ }
9
+ export declare type ApiFileManager = PulumiAppModule<typeof ApiFileManager>;
10
+ export declare const ApiFileManager: import("@webiny/pulumi-sdk").PulumiAppModuleDefinition<{
11
+ functions: {
12
+ transform: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.lambda.Function>;
13
+ manage: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.lambda.Function>;
14
+ download: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.lambda.Function>;
15
+ };
16
+ bucketNotification: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.s3.BucketNotification>;
17
+ }, FileManagerParams>;
18
+ export {};
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ApiFileManager = void 0;
9
+
10
+ var _path = _interopRequireDefault(require("path"));
11
+
12
+ var pulumi = _interopRequireWildcard(require("@pulumi/pulumi"));
13
+
14
+ var aws = _interopRequireWildcard(require("@pulumi/aws"));
15
+
16
+ var _awsLayers = require("@webiny/aws-layers");
17
+
18
+ var _pulumiSdk = require("@webiny/pulumi-sdk");
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
+ // @ts-ignore
27
+ const ApiFileManager = (0, _pulumiSdk.defineAppModule)({
28
+ name: "ApiFileManager",
29
+
30
+ config(app, params) {
31
+ const policy = createFileManagerLambdaPolicy(app, params);
32
+ const role = (0, _ApiLambdaUtils.createLambdaRole)(app, {
33
+ name: "fm-lambda-role",
34
+ policy: policy.output,
35
+ vpc: params.vpc
36
+ });
37
+ const transform = app.addResource(aws.lambda.Function, {
38
+ name: "fm-image-transformer",
39
+ config: {
40
+ handler: "handler.handler",
41
+ timeout: 30,
42
+ runtime: "nodejs14.x",
43
+ memorySize: 1600,
44
+ role: role.output.arn,
45
+ description: "Performs image optimization, resizing, etc.",
46
+ code: new pulumi.asset.AssetArchive({
47
+ ".": new pulumi.asset.FileArchive(_path.default.join(app.ctx.appDir, "code/fileManager/transform/build"))
48
+ }),
49
+ layers: [(0, _awsLayers.getLayerArn)("sharp")],
50
+ environment: {
51
+ variables: {
52
+ S3_BUCKET: params.fileManagerBucketId
53
+ }
54
+ },
55
+ vpcConfig: params.vpc ? {
56
+ subnetIds: params.vpc.subnets.private.map(subNet => subNet.output.id),
57
+ securityGroupIds: [params.vpc.vpc.output.defaultSecurityGroupId]
58
+ } : undefined
59
+ }
60
+ });
61
+ const manage = app.addResource(aws.lambda.Function, {
62
+ name: "fm-manage",
63
+ config: {
64
+ role: role.output.arn,
65
+ runtime: "nodejs14.x",
66
+ handler: "handler.handler",
67
+ timeout: 30,
68
+ memorySize: 512,
69
+ description: "Triggered when a file is deleted.",
70
+ code: new pulumi.asset.AssetArchive({
71
+ ".": new pulumi.asset.FileArchive(_path.default.join(app.ctx.appDir, "code/fileManager/manage/build"))
72
+ }),
73
+ environment: {
74
+ variables: {
75
+ S3_BUCKET: params.fileManagerBucketId
76
+ }
77
+ },
78
+ vpcConfig: params.vpc ? {
79
+ subnetIds: params.vpc.subnets.private.map(subNet => subNet.output.id),
80
+ securityGroupIds: [params.vpc.vpc.output.defaultSecurityGroupId]
81
+ } : undefined
82
+ }
83
+ });
84
+ const download = app.addResource(aws.lambda.Function, {
85
+ name: "fm-download",
86
+ config: {
87
+ role: role.output.arn,
88
+ runtime: "nodejs14.x",
89
+ handler: "handler.handler",
90
+ timeout: 30,
91
+ memorySize: 512,
92
+ description: "Serves previously uploaded files.",
93
+ code: new pulumi.asset.AssetArchive({
94
+ ".": new pulumi.asset.FileArchive(_path.default.join(app.ctx.appDir, "code/fileManager/download/build"))
95
+ }),
96
+ environment: {
97
+ variables: {
98
+ S3_BUCKET: params.fileManagerBucketId,
99
+ IMAGE_TRANSFORMER_FUNCTION: transform.output.arn
100
+ }
101
+ },
102
+ vpcConfig: params.vpc ? {
103
+ subnetIds: params.vpc.subnets.private.map(subNet => subNet.output.id),
104
+ securityGroupIds: [params.vpc.vpc.output.defaultSecurityGroupId]
105
+ } : undefined
106
+ }
107
+ });
108
+ const manageS3LambdaPermission = app.addResource(aws.lambda.Permission, {
109
+ name: "fm-manage-s3-lambda-permission",
110
+ config: {
111
+ action: "lambda:InvokeFunction",
112
+ function: manage.output.arn,
113
+ principal: "s3.amazonaws.com",
114
+ sourceArn: pulumi.interpolate`arn:aws:s3:::${params.fileManagerBucketId}`
115
+ },
116
+ opts: {
117
+ dependsOn: [manage.output]
118
+ }
119
+ });
120
+ const bucketNotification = app.addResource(aws.s3.BucketNotification, {
121
+ name: "bucketNotification",
122
+ config: {
123
+ bucket: params.fileManagerBucketId,
124
+ lambdaFunctions: [{
125
+ lambdaFunctionArn: manage.output.arn,
126
+ events: ["s3:ObjectRemoved:*"]
127
+ }]
128
+ },
129
+ opts: {
130
+ dependsOn: [manage.output, manageS3LambdaPermission.output]
131
+ }
132
+ });
133
+ const functions = {
134
+ transform,
135
+ manage,
136
+ download
137
+ };
138
+ return {
139
+ functions,
140
+ bucketNotification
141
+ };
142
+ }
143
+
144
+ });
145
+ exports.ApiFileManager = ApiFileManager;
146
+
147
+ function createFileManagerLambdaPolicy(app, params) {
148
+ return app.addResource(aws.iam.Policy, {
149
+ name: "FileManagerLambdaPolicy",
150
+ config: {
151
+ description: "This policy enables access to Lambda and S3",
152
+ policy: {
153
+ Version: "2012-10-17",
154
+ Statement: [{
155
+ Sid: "PermissionForLambda",
156
+ Effect: "Allow",
157
+ Action: "lambda:InvokeFunction",
158
+ Resource: "*"
159
+ }, {
160
+ Sid: "PermissionForS3",
161
+ Effect: "Allow",
162
+ Action: "s3:*",
163
+ Resource: pulumi.interpolate`arn:aws:s3:::${params.fileManagerBucketId}/*`
164
+ }]
165
+ }
166
+ }
167
+ });
168
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ApiFileManager.ts"],"names":["ApiFileManager","name","config","app","params","policy","createFileManagerLambdaPolicy","role","output","vpc","transform","addResource","aws","lambda","Function","handler","timeout","runtime","memorySize","arn","description","code","pulumi","asset","AssetArchive","FileArchive","path","join","ctx","appDir","layers","environment","variables","S3_BUCKET","fileManagerBucketId","vpcConfig","subnetIds","subnets","private","map","subNet","id","securityGroupIds","defaultSecurityGroupId","undefined","manage","download","IMAGE_TRANSFORMER_FUNCTION","manageS3LambdaPermission","Permission","action","function","principal","sourceArn","interpolate","opts","dependsOn","bucketNotification","s3","BucketNotification","bucket","lambdaFunctions","lambdaFunctionArn","events","functions","iam","Policy","Version","Statement","Sid","Effect","Action","Resource"],"mappings":"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","sourcesContent":["import path from \"path\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\n// @ts-ignore\nimport { getLayerArn } from \"@webiny/aws-layers\";\nimport { defineAppModule, PulumiApp, PulumiAppModule } from \"@webiny/pulumi-sdk\";\n\nimport { Vpc } from \"./ApiVpc\";\nimport { createLambdaRole } from \"./ApiLambdaUtils\";\n\ninterface FileManagerParams {\n fileManagerBucketId: pulumi.Input<string>;\n vpc: Vpc | undefined;\n}\n\nexport type ApiFileManager = PulumiAppModule<typeof ApiFileManager>;\n\nexport const ApiFileManager = defineAppModule({\n name: \"ApiFileManager\",\n config(app: PulumiApp, params: FileManagerParams) {\n const policy = createFileManagerLambdaPolicy(app, params);\n const role = createLambdaRole(app, {\n name: \"fm-lambda-role\",\n policy: policy.output,\n vpc: params.vpc\n });\n\n const transform = app.addResource(aws.lambda.Function, {\n name: \"fm-image-transformer\",\n config: {\n handler: \"handler.handler\",\n timeout: 30,\n runtime: \"nodejs14.x\",\n memorySize: 1600,\n role: role.output.arn,\n description: \"Performs image optimization, resizing, etc.\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.ctx.appDir, \"code/fileManager/transform/build\")\n )\n }),\n layers: [getLayerArn(\"sharp\")],\n environment: {\n variables: { S3_BUCKET: params.fileManagerBucketId }\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 manage = app.addResource(aws.lambda.Function, {\n name: \"fm-manage\",\n config: {\n role: role.output.arn,\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n timeout: 30,\n memorySize: 512,\n description: \"Triggered when a file is deleted.\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.ctx.appDir, \"code/fileManager/manage/build\")\n )\n }),\n environment: {\n variables: { S3_BUCKET: params.fileManagerBucketId }\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 download = app.addResource(aws.lambda.Function, {\n name: \"fm-download\",\n config: {\n role: role.output.arn,\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n timeout: 30,\n memorySize: 512,\n description: \"Serves previously uploaded files.\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.ctx.appDir, \"code/fileManager/download/build\")\n )\n }),\n environment: {\n variables: {\n S3_BUCKET: params.fileManagerBucketId,\n IMAGE_TRANSFORMER_FUNCTION: transform.output.arn\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 manageS3LambdaPermission = app.addResource(aws.lambda.Permission, {\n name: \"fm-manage-s3-lambda-permission\",\n config: {\n action: \"lambda:InvokeFunction\",\n function: manage.output.arn,\n principal: \"s3.amazonaws.com\",\n sourceArn: pulumi.interpolate`arn:aws:s3:::${params.fileManagerBucketId}`\n },\n opts: {\n dependsOn: [manage.output]\n }\n });\n\n const bucketNotification = app.addResource(aws.s3.BucketNotification, {\n name: \"bucketNotification\",\n config: {\n bucket: params.fileManagerBucketId,\n lambdaFunctions: [\n {\n lambdaFunctionArn: manage.output.arn,\n events: [\"s3:ObjectRemoved:*\"]\n }\n ]\n },\n opts: {\n dependsOn: [manage.output, manageS3LambdaPermission.output]\n }\n });\n\n const functions = {\n transform,\n manage,\n download\n };\n\n return {\n functions,\n bucketNotification\n };\n }\n});\n\nfunction createFileManagerLambdaPolicy(app: PulumiApp, params: FileManagerParams) {\n return app.addResource(aws.iam.Policy, {\n name: \"FileManagerLambdaPolicy\",\n config: {\n description: \"This policy enables access to Lambda and S3\",\n policy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Sid: \"PermissionForLambda\",\n Effect: \"Allow\",\n Action: \"lambda:InvokeFunction\",\n Resource: \"*\"\n },\n {\n Sid: \"PermissionForS3\",\n Effect: \"Allow\",\n Action: \"s3:*\",\n Resource: pulumi.interpolate`arn:aws:s3:::${params.fileManagerBucketId}/*`\n }\n ]\n }\n }\n });\n}\n"]}
@@ -0,0 +1,19 @@
1
+ import * as aws from "@pulumi/aws";
2
+ import * as pulumi from "@pulumi/pulumi";
3
+ import { PulumiAppModule } from "@webiny/pulumi-sdk";
4
+ export interface ApiRouteParams {
5
+ path: pulumi.Input<string>;
6
+ method: pulumi.Input<string>;
7
+ function: pulumi.Input<string>;
8
+ }
9
+ export declare type ApiGateway = PulumiAppModule<typeof ApiGateway>;
10
+ export declare const ApiGateway: import("@webiny/pulumi-sdk").PulumiAppModuleDefinition<{
11
+ api: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.apigatewayv2.Api>;
12
+ stage: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.apigatewayv2.Stage>;
13
+ routes: Record<string, {
14
+ integration: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.apigatewayv2.Integration>;
15
+ route: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.apigatewayv2.Route>;
16
+ permission: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.lambda.Permission>;
17
+ }>;
18
+ addRoute: (name: string, params: ApiRouteParams) => void;
19
+ }, Record<string, ApiRouteParams>>;