@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,90 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ApiGateway = void 0;
7
+
8
+ var aws = _interopRequireWildcard(require("@pulumi/aws"));
9
+
10
+ var _pulumiSdk = require("@webiny/pulumi-sdk");
11
+
12
+ 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); }
13
+
14
+ 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; }
15
+
16
+ const ApiGateway = (0, _pulumiSdk.defineAppModule)({
17
+ name: "ApiGateway",
18
+
19
+ config(app, routesConfig) {
20
+ const api = app.addResource(aws.apigatewayv2.Api, {
21
+ name: "api-gateway",
22
+ config: {
23
+ protocolType: "HTTP",
24
+ description: "Main API gateway"
25
+ }
26
+ });
27
+ const stage = app.addResource(aws.apigatewayv2.Stage, {
28
+ name: "default",
29
+ config: {
30
+ apiId: api.output.id,
31
+ autoDeploy: true
32
+ }
33
+ });
34
+ const routes = {};
35
+
36
+ for (const name of Object.keys(routesConfig)) {
37
+ addRoute(name, routesConfig[name]);
38
+ }
39
+
40
+ return {
41
+ api,
42
+ stage,
43
+ routes,
44
+ addRoute
45
+ };
46
+
47
+ function addRoute(name, params) {
48
+ const route = createRoute(app, api.output, name, params);
49
+ routes[name] = route;
50
+ }
51
+ }
52
+
53
+ });
54
+ exports.ApiGateway = ApiGateway;
55
+
56
+ function createRoute(app, api, name, params) {
57
+ const integration = app.addResource(aws.apigatewayv2.Integration, {
58
+ name: name,
59
+ config: {
60
+ description: "GraphQL API Integration",
61
+ apiId: api.id,
62
+ integrationType: "AWS_PROXY",
63
+ integrationMethod: params.method,
64
+ integrationUri: params.function,
65
+ passthroughBehavior: "WHEN_NO_MATCH"
66
+ }
67
+ });
68
+ const route = app.addResource(aws.apigatewayv2.Route, {
69
+ name: name,
70
+ config: {
71
+ apiId: api.id,
72
+ routeKey: `${params.method} ${params.path}`,
73
+ target: integration.output.id.apply(value => `integrations/${value}`)
74
+ }
75
+ });
76
+ const permission = app.addResource(aws.lambda.Permission, {
77
+ name: `allow-${name}`,
78
+ config: {
79
+ action: "lambda:InvokeFunction",
80
+ function: params.function,
81
+ principal: "apigateway.amazonaws.com",
82
+ sourceArn: api.executionArn.apply(arn => `${arn}/*/*${params.path}`)
83
+ }
84
+ });
85
+ return {
86
+ integration,
87
+ route,
88
+ permission
89
+ };
90
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ApiGateway.ts"],"names":["ApiGateway","name","config","app","routesConfig","api","addResource","aws","apigatewayv2","Api","protocolType","description","stage","Stage","apiId","output","id","autoDeploy","routes","Object","keys","addRoute","params","route","createRoute","integration","Integration","integrationType","integrationMethod","method","integrationUri","function","passthroughBehavior","Route","routeKey","path","target","apply","value","permission","lambda","Permission","action","principal","sourceArn","executionArn","arn"],"mappings":"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","sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport { defineAppModule, PulumiApp, PulumiAppModule } from \"@webiny/pulumi-sdk\";\n\nexport interface ApiRouteParams {\n path: pulumi.Input<string>;\n method: pulumi.Input<string>;\n function: pulumi.Input<string>;\n}\n\nexport type ApiGateway = PulumiAppModule<typeof ApiGateway>;\n\nexport const ApiGateway = defineAppModule({\n name: \"ApiGateway\",\n config(app: PulumiApp, routesConfig: Record<string, ApiRouteParams>) {\n const api = app.addResource(aws.apigatewayv2.Api, {\n name: \"api-gateway\",\n config: {\n protocolType: \"HTTP\",\n description: \"Main API gateway\"\n }\n });\n\n const stage = app.addResource(aws.apigatewayv2.Stage, {\n name: \"default\",\n config: {\n apiId: api.output.id,\n autoDeploy: true\n }\n });\n\n const routes: Record<string, ReturnType<typeof createRoute>> = {};\n\n for (const name of Object.keys(routesConfig)) {\n addRoute(name, routesConfig[name]);\n }\n\n return {\n api,\n stage,\n routes,\n addRoute\n };\n\n function addRoute(name: string, params: ApiRouteParams) {\n const route = createRoute(app, api.output, name, params);\n routes[name] = route;\n }\n }\n});\n\nfunction createRoute(\n app: PulumiApp,\n api: pulumi.Output<aws.apigatewayv2.Api>,\n name: string,\n params: ApiRouteParams\n) {\n const integration = app.addResource(aws.apigatewayv2.Integration, {\n name: name,\n config: {\n description: \"GraphQL API Integration\",\n apiId: api.id,\n integrationType: \"AWS_PROXY\",\n integrationMethod: params.method,\n integrationUri: params.function,\n passthroughBehavior: \"WHEN_NO_MATCH\"\n }\n });\n\n const route = app.addResource(aws.apigatewayv2.Route, {\n name: name,\n config: {\n apiId: api.id,\n routeKey: `${params.method} ${params.path}`,\n target: integration.output.id.apply(value => `integrations/${value}`)\n }\n });\n\n const permission = app.addResource(aws.lambda.Permission, {\n name: `allow-${name}`,\n config: {\n action: \"lambda:InvokeFunction\",\n function: params.function,\n principal: \"apigateway.amazonaws.com\",\n sourceArn: api.executionArn.apply(arn => `${arn}/*/*${params.path}`)\n }\n });\n\n return {\n integration,\n route,\n permission\n };\n}\n"]}
@@ -0,0 +1,27 @@
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 GraphqlParams {
6
+ env: Record<string, any>;
7
+ primaryDynamodbTableArn: pulumi.Input<string>;
8
+ primaryDynamodbTableName: pulumi.Input<string>;
9
+ primaryDynamodbTableHashKey: pulumi.Input<string>;
10
+ primaryDynamodbTableRangeKey: pulumi.Input<string>;
11
+ fileManagerBucketId: pulumi.Input<string>;
12
+ cognitoUserPoolArn: pulumi.Input<string>;
13
+ apwSchedulerEventRule: pulumi.Output<aws.cloudwatch.EventRule>;
14
+ apwSchedulerEventTarget: pulumi.Output<aws.cloudwatch.EventTarget>;
15
+ awsAccountId: pulumi.Input<string>;
16
+ awsRegion: pulumi.Input<string>;
17
+ vpc: Vpc | undefined;
18
+ }
19
+ export declare type ApiGraphql = PulumiAppModule<typeof ApiGraphql>;
20
+ export declare const ApiGraphql: import("@webiny/pulumi-sdk").PulumiAppModuleDefinition<{
21
+ role: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.iam.Role>;
22
+ policy: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.iam.Policy>;
23
+ functions: {
24
+ graphql: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.lambda.Function>;
25
+ };
26
+ }, GraphqlParams>;
27
+ export {};
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ApiGraphql = 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
+ 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
+ const ApiGraphql = (0, _pulumiSdk.defineAppModule)({
31
+ name: "ApiGraphql",
32
+
33
+ config(app, params) {
34
+ const policy = createGraphqlLambdaPolicy(app, params);
35
+ const role = (0, _ApiLambdaUtils.createLambdaRole)(app, {
36
+ name: "api-lambda-role",
37
+ policy: policy.output,
38
+ vpc: params.vpc
39
+ });
40
+ const graphql = app.addResource(aws.lambda.Function, {
41
+ name: "graphql",
42
+ config: {
43
+ runtime: "nodejs14.x",
44
+ handler: "handler.handler",
45
+ role: role.output.arn,
46
+ timeout: 30,
47
+ memorySize: 512,
48
+ code: new pulumi.asset.AssetArchive({
49
+ ".": new pulumi.asset.FileArchive(_path.default.join(app.ctx.appDir, "code/graphql/build"))
50
+ }),
51
+ environment: {
52
+ variables: _objectSpread(_objectSpread({}, params.env), {}, {
53
+ AWS_NODEJS_CONNECTION_REUSE_ENABLED: "1",
54
+ WCP_ENVIRONMENT_API_KEY: String(process.env["WCP_ENVIRONMENT_API_KEY"])
55
+ })
56
+ },
57
+ vpcConfig: params.vpc ? {
58
+ subnetIds: params.vpc.subnets.private.map(subNet => subNet.output.id),
59
+ securityGroupIds: [params.vpc.vpc.output.defaultSecurityGroupId]
60
+ } : undefined
61
+ }
62
+ });
63
+ /**
64
+ * Store meta information like "mainGraphqlFunctionArn" in APW settings at deploy time.
65
+ *
66
+ * Note: We can't pass "mainGraphqlFunctionArn" as env variable due to circular dependency between
67
+ * "graphql" lambda and "api-apw-scheduler-execute-action" lambda.
68
+ */
69
+
70
+ app.addResource(aws.dynamodb.TableItem, {
71
+ name: "apwSettings",
72
+ config: {
73
+ tableName: params.primaryDynamodbTableName,
74
+ hashKey: params.primaryDynamodbTableHashKey,
75
+ rangeKey: pulumi.output(params.primaryDynamodbTableRangeKey).apply(key => key || "SK"),
76
+ item: pulumi.interpolate`{
77
+ "PK": {"S": "APW#SETTINGS"},
78
+ "SK": {"S": "A"},
79
+ "mainGraphqlFunctionArn": {"S": "${graphql.output.arn}"},
80
+ "eventRuleName": {"S": "${params.apwSchedulerEventRule.name}"},
81
+ "eventTargetId": {"S": "${params.apwSchedulerEventTarget.targetId}"}
82
+ }`
83
+ }
84
+ });
85
+ return {
86
+ role,
87
+ policy,
88
+ functions: {
89
+ graphql
90
+ }
91
+ };
92
+ }
93
+
94
+ });
95
+ exports.ApiGraphql = ApiGraphql;
96
+
97
+ function createGraphqlLambdaPolicy(app, params) {
98
+ return app.addResource(aws.iam.Policy, {
99
+ name: "ApiGraphqlLambdaPolicy",
100
+ config: {
101
+ description: "This policy enables access to Dynamodb, S3, Lambda and Cognito IDP",
102
+ policy: {
103
+ Version: "2012-10-17",
104
+ Statement: [{
105
+ Sid: "PermissionForDynamodb",
106
+ Effect: "Allow",
107
+ Action: ["dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:ConditionCheckItem", "dynamodb:CreateBackup", "dynamodb:CreateTable", "dynamodb:CreateTableReplica", "dynamodb:DeleteBackup", "dynamodb:DeleteItem", "dynamodb:DeleteTable", "dynamodb:DeleteTableReplica", "dynamodb:DescribeBackup", "dynamodb:DescribeContinuousBackups", "dynamodb:DescribeContributorInsights", "dynamodb:DescribeExport", "dynamodb:DescribeKinesisStreamingDestination", "dynamodb:DescribeLimits", "dynamodb:DescribeReservedCapacity", "dynamodb:DescribeReservedCapacityOfferings", "dynamodb:DescribeStream", "dynamodb:DescribeTable", "dynamodb:DescribeTableReplicaAutoScaling", "dynamodb:DescribeTimeToLive", "dynamodb:DisableKinesisStreamingDestination", "dynamodb:EnableKinesisStreamingDestination", "dynamodb:ExportTableToPointInTime", "dynamodb:GetItem", "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:ListBackups", "dynamodb:ListContributorInsights", "dynamodb:ListExports", "dynamodb:ListStreams", "dynamodb:ListTables", "dynamodb:ListTagsOfResource", "dynamodb:PartiQLDelete", "dynamodb:PartiQLInsert", "dynamodb:PartiQLSelect", "dynamodb:PartiQLUpdate", "dynamodb:PurchaseReservedCapacityOfferings", "dynamodb:PutItem", "dynamodb:Query", "dynamodb:RestoreTableFromBackup", "dynamodb:RestoreTableToPointInTime", "dynamodb:Scan", "dynamodb:UpdateContinuousBackups", "dynamodb:UpdateContributorInsights", "dynamodb:UpdateItem", "dynamodb:UpdateTable", "dynamodb:UpdateTableReplicaAutoScaling", "dynamodb:UpdateTimeToLive"],
108
+ Resource: [pulumi.interpolate`${params.primaryDynamodbTableArn}`, pulumi.interpolate`${params.primaryDynamodbTableArn}/*`]
109
+ }, {
110
+ Sid: "PermissionForS3",
111
+ Effect: "Allow",
112
+ Action: ["s3:GetObjectAcl", "s3:DeleteObject", "s3:PutObjectAcl", "s3:PutObject", "s3:GetObject"],
113
+ Resource: pulumi.interpolate`arn:aws:s3:::${params.fileManagerBucketId}/*`
114
+ }, {
115
+ Sid: "PermissionForLambda",
116
+ Effect: "Allow",
117
+ Action: ["lambda:InvokeFunction"],
118
+ Resource: pulumi.interpolate`arn:aws:lambda:${params.awsRegion}:${params.awsAccountId}:function:*`
119
+ }, {
120
+ Sid: "PermissionForCognitoIdp",
121
+ Effect: "Allow",
122
+ Action: "cognito-idp:*",
123
+ Resource: pulumi.interpolate`${params.cognitoUserPoolArn}`
124
+ }]
125
+ }
126
+ }
127
+ });
128
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ApiGraphql.ts"],"names":["ApiGraphql","name","config","app","params","policy","createGraphqlLambdaPolicy","role","output","vpc","graphql","addResource","aws","lambda","Function","runtime","handler","arn","timeout","memorySize","code","pulumi","asset","AssetArchive","FileArchive","path","join","ctx","appDir","environment","variables","env","AWS_NODEJS_CONNECTION_REUSE_ENABLED","WCP_ENVIRONMENT_API_KEY","String","process","vpcConfig","subnetIds","subnets","private","map","subNet","id","securityGroupIds","defaultSecurityGroupId","undefined","dynamodb","TableItem","tableName","primaryDynamodbTableName","hashKey","primaryDynamodbTableHashKey","rangeKey","primaryDynamodbTableRangeKey","apply","key","item","interpolate","apwSchedulerEventRule","apwSchedulerEventTarget","targetId","functions","iam","Policy","description","Version","Statement","Sid","Effect","Action","Resource","primaryDynamodbTableArn","fileManagerBucketId","awsRegion","awsAccountId","cognitoUserPoolArn"],"mappings":"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","sourcesContent":["import path from \"path\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nimport { defineAppModule, PulumiApp, PulumiAppModule } from \"@webiny/pulumi-sdk\";\nimport { Vpc } from \"./ApiVpc\";\nimport { createLambdaRole } from \"./ApiLambdaUtils\";\n\ninterface GraphqlParams {\n env: Record<string, any>;\n primaryDynamodbTableArn: pulumi.Input<string>;\n primaryDynamodbTableName: pulumi.Input<string>;\n primaryDynamodbTableHashKey: pulumi.Input<string>;\n primaryDynamodbTableRangeKey: pulumi.Input<string>;\n fileManagerBucketId: pulumi.Input<string>;\n cognitoUserPoolArn: pulumi.Input<string>;\n apwSchedulerEventRule: pulumi.Output<aws.cloudwatch.EventRule>;\n apwSchedulerEventTarget: pulumi.Output<aws.cloudwatch.EventTarget>;\n awsAccountId: pulumi.Input<string>;\n awsRegion: pulumi.Input<string>;\n vpc: Vpc | undefined;\n}\n\nexport type ApiGraphql = PulumiAppModule<typeof ApiGraphql>;\n\nexport const ApiGraphql = defineAppModule({\n name: \"ApiGraphql\",\n config(app: PulumiApp, params: GraphqlParams) {\n const policy = createGraphqlLambdaPolicy(app, params);\n const role = createLambdaRole(app, {\n name: \"api-lambda-role\",\n policy: policy.output,\n vpc: params.vpc\n });\n\n const graphql = app.addResource(aws.lambda.Function, {\n name: \"graphql\",\n config: {\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n role: role.output.arn,\n timeout: 30,\n memorySize: 512,\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.ctx.appDir, \"code/graphql/build\")\n )\n }),\n environment: {\n variables: {\n ...params.env,\n AWS_NODEJS_CONNECTION_REUSE_ENABLED: \"1\",\n WCP_ENVIRONMENT_API_KEY: String(process.env[\"WCP_ENVIRONMENT_API_KEY\"])\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 /**\n * Store meta information like \"mainGraphqlFunctionArn\" in APW settings at deploy time.\n *\n * Note: We can't pass \"mainGraphqlFunctionArn\" as env variable due to circular dependency between\n * \"graphql\" lambda and \"api-apw-scheduler-execute-action\" lambda.\n */\n app.addResource(aws.dynamodb.TableItem, {\n name: \"apwSettings\",\n config: {\n tableName: params.primaryDynamodbTableName,\n hashKey: params.primaryDynamodbTableHashKey,\n rangeKey: pulumi\n .output(params.primaryDynamodbTableRangeKey)\n .apply(key => key || \"SK\"),\n item: pulumi.interpolate`{\n \"PK\": {\"S\": \"APW#SETTINGS\"},\n \"SK\": {\"S\": \"A\"},\n \"mainGraphqlFunctionArn\": {\"S\": \"${graphql.output.arn}\"},\n \"eventRuleName\": {\"S\": \"${params.apwSchedulerEventRule.name}\"},\n \"eventTargetId\": {\"S\": \"${params.apwSchedulerEventTarget.targetId}\"}\n }`\n }\n });\n\n return {\n role,\n policy,\n functions: {\n graphql\n }\n };\n }\n});\n\nfunction createGraphqlLambdaPolicy(app: PulumiApp, params: GraphqlParams) {\n return app.addResource(aws.iam.Policy, {\n name: \"ApiGraphqlLambdaPolicy\",\n config: {\n description: \"This policy enables access to 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:ConditionCheckItem\",\n \"dynamodb:CreateBackup\",\n \"dynamodb:CreateTable\",\n \"dynamodb:CreateTableReplica\",\n \"dynamodb:DeleteBackup\",\n \"dynamodb:DeleteItem\",\n \"dynamodb:DeleteTable\",\n \"dynamodb:DeleteTableReplica\",\n \"dynamodb:DescribeBackup\",\n \"dynamodb:DescribeContinuousBackups\",\n \"dynamodb:DescribeContributorInsights\",\n \"dynamodb:DescribeExport\",\n \"dynamodb:DescribeKinesisStreamingDestination\",\n \"dynamodb:DescribeLimits\",\n \"dynamodb:DescribeReservedCapacity\",\n \"dynamodb:DescribeReservedCapacityOfferings\",\n \"dynamodb:DescribeStream\",\n \"dynamodb:DescribeTable\",\n \"dynamodb:DescribeTableReplicaAutoScaling\",\n \"dynamodb:DescribeTimeToLive\",\n \"dynamodb:DisableKinesisStreamingDestination\",\n \"dynamodb:EnableKinesisStreamingDestination\",\n \"dynamodb:ExportTableToPointInTime\",\n \"dynamodb:GetItem\",\n \"dynamodb:GetRecords\",\n \"dynamodb:GetShardIterator\",\n \"dynamodb:ListBackups\",\n \"dynamodb:ListContributorInsights\",\n \"dynamodb:ListExports\",\n \"dynamodb:ListStreams\",\n \"dynamodb:ListTables\",\n \"dynamodb:ListTagsOfResource\",\n \"dynamodb:PartiQLDelete\",\n \"dynamodb:PartiQLInsert\",\n \"dynamodb:PartiQLSelect\",\n \"dynamodb:PartiQLUpdate\",\n \"dynamodb:PurchaseReservedCapacityOfferings\",\n \"dynamodb:PutItem\",\n \"dynamodb:Query\",\n \"dynamodb:RestoreTableFromBackup\",\n \"dynamodb:RestoreTableToPointInTime\",\n \"dynamodb:Scan\",\n \"dynamodb:UpdateContinuousBackups\",\n \"dynamodb:UpdateContributorInsights\",\n \"dynamodb:UpdateItem\",\n \"dynamodb:UpdateTable\",\n \"dynamodb:UpdateTableReplicaAutoScaling\",\n \"dynamodb:UpdateTimeToLive\"\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 ],\n Resource: pulumi.interpolate`arn:aws:s3:::${params.fileManagerBucketId}/*`\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,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 HeadlessCMSParams {
6
+ env: Record<string, any>;
7
+ primaryDynamodbTableArn: pulumi.Input<string>;
8
+ vpc: Vpc | undefined;
9
+ }
10
+ export declare type ApiHeadlessCMS = PulumiAppModule<typeof ApiHeadlessCMS>;
11
+ export declare const ApiHeadlessCMS: import("@webiny/pulumi-sdk").PulumiAppModuleDefinition<{
12
+ role: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.iam.Role>;
13
+ policy: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.iam.Policy>;
14
+ functions: {
15
+ graphql: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.lambda.Function>;
16
+ };
17
+ }, HeadlessCMSParams>;
18
+ export {};
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ApiHeadlessCMS = 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
+ 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
+ const ApiHeadlessCMS = (0, _pulumiSdk.defineAppModule)({
31
+ name: "ApiHeadlessCMS",
32
+
33
+ config(app, params) {
34
+ const policy = createHeadlessCmsLambdaPolicy(app, params);
35
+ const role = (0, _ApiLambdaUtils.createLambdaRole)(app, {
36
+ name: "headless-cms-lambda-role",
37
+ policy: policy.output,
38
+ vpc: params.vpc
39
+ });
40
+ const graphql = app.addResource(aws.lambda.Function, {
41
+ name: "headless-cms",
42
+ config: {
43
+ runtime: "nodejs14.x",
44
+ handler: "handler.handler",
45
+ role: role.output.arn,
46
+ timeout: 30,
47
+ memorySize: 512,
48
+ code: new pulumi.asset.AssetArchive({
49
+ ".": new pulumi.asset.FileArchive(_path.default.join(app.ctx.appDir, "code/headlessCMS/build"))
50
+ }),
51
+ environment: {
52
+ variables: _objectSpread(_objectSpread({}, params.env), {}, {
53
+ AWS_NODEJS_CONNECTION_REUSE_ENABLED: "1"
54
+ })
55
+ },
56
+ vpcConfig: params.vpc ? {
57
+ subnetIds: params.vpc.subnets.private.map(subNet => subNet.output.id),
58
+ securityGroupIds: [params.vpc.vpc.output.defaultSecurityGroupId]
59
+ } : undefined
60
+ }
61
+ });
62
+ return {
63
+ role,
64
+ policy,
65
+ functions: {
66
+ graphql
67
+ }
68
+ };
69
+ }
70
+
71
+ });
72
+ exports.ApiHeadlessCMS = ApiHeadlessCMS;
73
+
74
+ function createHeadlessCmsLambdaPolicy(app, params) {
75
+ return app.addResource(aws.iam.Policy, {
76
+ name: "HeadlessCmsLambdaPolicy",
77
+ config: {
78
+ description: "This policy enables access to Dynamodb streams",
79
+ policy: {
80
+ Version: "2012-10-17",
81
+ Statement: [{
82
+ Sid: "PermissionDynamodb",
83
+ Effect: "Allow",
84
+ Action: ["dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:ConditionCheckItem", "dynamodb:CreateBackup", "dynamodb:CreateTable", "dynamodb:CreateTableReplica", "dynamodb:DeleteBackup", "dynamodb:DeleteItem", "dynamodb:DeleteTable", "dynamodb:DeleteTableReplica", "dynamodb:DescribeBackup", "dynamodb:DescribeContinuousBackups", "dynamodb:DescribeContributorInsights", "dynamodb:DescribeExport", "dynamodb:DescribeKinesisStreamingDestination", "dynamodb:DescribeLimits", "dynamodb:DescribeReservedCapacity", "dynamodb:DescribeReservedCapacityOfferings", "dynamodb:DescribeStream", "dynamodb:DescribeTable", "dynamodb:DescribeTableReplicaAutoScaling", "dynamodb:DescribeTimeToLive", "dynamodb:DisableKinesisStreamingDestination", "dynamodb:EnableKinesisStreamingDestination", "dynamodb:ExportTableToPointInTime", "dynamodb:GetItem", "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:ListBackups", "dynamodb:ListContributorInsights", "dynamodb:ListExports", "dynamodb:ListStreams", "dynamodb:ListTables", "dynamodb:ListTagsOfResource", "dynamodb:PartiQLDelete", "dynamodb:PartiQLInsert", "dynamodb:PartiQLSelect", "dynamodb:PartiQLUpdate", "dynamodb:PurchaseReservedCapacityOfferings", "dynamodb:PutItem", "dynamodb:Query", "dynamodb:RestoreTableFromBackup", "dynamodb:RestoreTableToPointInTime", "dynamodb:Scan", "dynamodb:UpdateContinuousBackups", "dynamodb:UpdateContributorInsights", "dynamodb:UpdateItem", "dynamodb:UpdateTable", "dynamodb:UpdateTableReplicaAutoScaling", "dynamodb:UpdateTimeToLive"],
85
+ Resource: [pulumi.interpolate`${params.primaryDynamodbTableArn}`, pulumi.interpolate`${params.primaryDynamodbTableArn}/*`]
86
+ }]
87
+ }
88
+ }
89
+ });
90
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ApiHeadlessCMS.ts"],"names":["ApiHeadlessCMS","name","config","app","params","policy","createHeadlessCmsLambdaPolicy","role","output","vpc","graphql","addResource","aws","lambda","Function","runtime","handler","arn","timeout","memorySize","code","pulumi","asset","AssetArchive","FileArchive","path","join","ctx","appDir","environment","variables","env","AWS_NODEJS_CONNECTION_REUSE_ENABLED","vpcConfig","subnetIds","subnets","private","map","subNet","id","securityGroupIds","defaultSecurityGroupId","undefined","functions","iam","Policy","description","Version","Statement","Sid","Effect","Action","Resource","interpolate","primaryDynamodbTableArn"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AAGA;;;;;;;;;;AAUO,MAAMA,cAAc,GAAG,gCAAgB;AAC1CC,EAAAA,IAAI,EAAE,gBADoC;;AAE1CC,EAAAA,MAAM,CAACC,GAAD,EAAiBC,MAAjB,EAA4C;AAC9C,UAAMC,MAAM,GAAGC,6BAA6B,CAACH,GAAD,EAAMC,MAAN,CAA5C;AACA,UAAMG,IAAI,GAAG,sCAAiBJ,GAAjB,EAAsB;AAC/BF,MAAAA,IAAI,EAAE,0BADyB;AAE/BI,MAAAA,MAAM,EAAEA,MAAM,CAACG,MAFgB;AAG/BC,MAAAA,GAAG,EAAEL,MAAM,CAACK;AAHmB,KAAtB,CAAb;AAMA,UAAMC,OAAO,GAAGP,GAAG,CAACQ,WAAJ,CAAgBC,GAAG,CAACC,MAAJ,CAAWC,QAA3B,EAAqC;AACjDb,MAAAA,IAAI,EAAE,cAD2C;AAEjDC,MAAAA,MAAM,EAAE;AACJa,QAAAA,OAAO,EAAE,YADL;AAEJC,QAAAA,OAAO,EAAE,iBAFL;AAGJT,QAAAA,IAAI,EAAEA,IAAI,CAACC,MAAL,CAAYS,GAHd;AAIJC,QAAAA,OAAO,EAAE,EAJL;AAKJC,QAAAA,UAAU,EAAE,GALR;AAMJC,QAAAA,IAAI,EAAE,IAAIC,MAAM,CAACC,KAAP,CAAaC,YAAjB,CAA8B;AAChC,eAAK,IAAIF,MAAM,CAACC,KAAP,CAAaE,WAAjB,CACDC,cAAKC,IAAL,CAAUvB,GAAG,CAACwB,GAAJ,CAAQC,MAAlB,EAA0B,wBAA1B,CADC;AAD2B,SAA9B,CANF;AAWJC,QAAAA,WAAW,EAAE;AACTC,UAAAA,SAAS,kCACF1B,MAAM,CAAC2B,GADL;AAELC,YAAAA,mCAAmC,EAAE;AAFhC;AADA,SAXT;AAiBJC,QAAAA,SAAS,EAAE7B,MAAM,CAACK,GAAP,GACL;AACIyB,UAAAA,SAAS,EAAE9B,MAAM,CAACK,GAAP,CAAW0B,OAAX,CAAmBC,OAAnB,CAA2BC,GAA3B,CAA+BC,MAAM,IAAIA,MAAM,CAAC9B,MAAP,CAAc+B,EAAvD,CADf;AAEIC,UAAAA,gBAAgB,EAAE,CAACpC,MAAM,CAACK,GAAP,CAAWA,GAAX,CAAeD,MAAf,CAAsBiC,sBAAvB;AAFtB,SADK,GAKLC;AAtBF;AAFyC,KAArC,CAAhB;AA4BA,WAAO;AACHnC,MAAAA,IADG;AAEHF,MAAAA,MAFG;AAGHsC,MAAAA,SAAS,EAAE;AACPjC,QAAAA;AADO;AAHR,KAAP;AAOH;;AA7CyC,CAAhB,CAAvB;;;AAgDP,SAASJ,6BAAT,CAAuCH,GAAvC,EAAuDC,MAAvD,EAAkF;AAC9E,SAAOD,GAAG,CAACQ,WAAJ,CAAgBC,GAAG,CAACgC,GAAJ,CAAQC,MAAxB,EAAgC;AACnC5C,IAAAA,IAAI,EAAE,yBAD6B;AAEnCC,IAAAA,MAAM,EAAE;AACJ4C,MAAAA,WAAW,EAAE,gDADT;AAEJzC,MAAAA,MAAM,EAAE;AACJ0C,QAAAA,OAAO,EAAE,YADL;AAEJC,QAAAA,SAAS,EAAE,CACP;AACIC,UAAAA,GAAG,EAAE,oBADT;AAEIC,UAAAA,MAAM,EAAE,OAFZ;AAGIC,UAAAA,MAAM,EAAE,CACJ,uBADI,EAEJ,yBAFI,EAGJ,6BAHI,EAIJ,uBAJI,EAKJ,sBALI,EAMJ,6BANI,EAOJ,uBAPI,EAQJ,qBARI,EASJ,sBATI,EAUJ,6BAVI,EAWJ,yBAXI,EAYJ,oCAZI,EAaJ,sCAbI,EAcJ,yBAdI,EAeJ,8CAfI,EAgBJ,yBAhBI,EAiBJ,mCAjBI,EAkBJ,4CAlBI,EAmBJ,yBAnBI,EAoBJ,wBApBI,EAqBJ,0CArBI,EAsBJ,6BAtBI,EAuBJ,6CAvBI,EAwBJ,4CAxBI,EAyBJ,mCAzBI,EA0BJ,kBA1BI,EA2BJ,qBA3BI,EA4BJ,2BA5BI,EA6BJ,sBA7BI,EA8BJ,kCA9BI,EA+BJ,sBA/BI,EAgCJ,sBAhCI,EAiCJ,qBAjCI,EAkCJ,6BAlCI,EAmCJ,wBAnCI,EAoCJ,wBApCI,EAqCJ,wBArCI,EAsCJ,wBAtCI,EAuCJ,4CAvCI,EAwCJ,kBAxCI,EAyCJ,gBAzCI,EA0CJ,iCA1CI,EA2CJ,oCA3CI,EA4CJ,eA5CI,EA6CJ,kCA7CI,EA8CJ,oCA9CI,EA+CJ,qBA/CI,EAgDJ,sBAhDI,EAiDJ,wCAjDI,EAkDJ,2BAlDI,CAHZ;AAuDIC,UAAAA,QAAQ,EAAE,CACN/B,MAAM,CAACgC,WAAY,GAAEjD,MAAM,CAACkD,uBAAwB,EAD9C,EAENjC,MAAM,CAACgC,WAAY,GAAEjD,MAAM,CAACkD,uBAAwB,IAF9C;AAvDd,SADO;AAFP;AAFJ;AAF2B,GAAhC,CAAP;AAuEH","sourcesContent":["import path from \"path\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nimport { defineAppModule, PulumiApp, PulumiAppModule } from \"@webiny/pulumi-sdk\";\n\nimport { Vpc } from \"./ApiVpc\";\nimport { createLambdaRole } from \"./ApiLambdaUtils\";\n\ninterface HeadlessCMSParams {\n env: Record<string, any>;\n primaryDynamodbTableArn: pulumi.Input<string>;\n vpc: Vpc | undefined;\n}\n\nexport type ApiHeadlessCMS = PulumiAppModule<typeof ApiHeadlessCMS>;\n\nexport const ApiHeadlessCMS = defineAppModule({\n name: \"ApiHeadlessCMS\",\n config(app: PulumiApp, params: HeadlessCMSParams) {\n const policy = createHeadlessCmsLambdaPolicy(app, params);\n const role = createLambdaRole(app, {\n name: \"headless-cms-lambda-role\",\n policy: policy.output,\n vpc: params.vpc\n });\n\n const graphql = app.addResource(aws.lambda.Function, {\n name: \"headless-cms\",\n config: {\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n role: role.output.arn,\n timeout: 30,\n memorySize: 512,\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.ctx.appDir, \"code/headlessCMS/build\")\n )\n }),\n environment: {\n variables: {\n ...params.env,\n AWS_NODEJS_CONNECTION_REUSE_ENABLED: \"1\"\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 graphql\n }\n };\n }\n});\n\nfunction createHeadlessCmsLambdaPolicy(app: PulumiApp, params: HeadlessCMSParams) {\n return app.addResource(aws.iam.Policy, {\n name: \"HeadlessCmsLambdaPolicy\",\n config: {\n description: \"This policy enables access to Dynamodb streams\",\n policy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Sid: \"PermissionDynamodb\",\n Effect: \"Allow\",\n Action: [\n \"dynamodb:BatchGetItem\",\n \"dynamodb:BatchWriteItem\",\n \"dynamodb:ConditionCheckItem\",\n \"dynamodb:CreateBackup\",\n \"dynamodb:CreateTable\",\n \"dynamodb:CreateTableReplica\",\n \"dynamodb:DeleteBackup\",\n \"dynamodb:DeleteItem\",\n \"dynamodb:DeleteTable\",\n \"dynamodb:DeleteTableReplica\",\n \"dynamodb:DescribeBackup\",\n \"dynamodb:DescribeContinuousBackups\",\n \"dynamodb:DescribeContributorInsights\",\n \"dynamodb:DescribeExport\",\n \"dynamodb:DescribeKinesisStreamingDestination\",\n \"dynamodb:DescribeLimits\",\n \"dynamodb:DescribeReservedCapacity\",\n \"dynamodb:DescribeReservedCapacityOfferings\",\n \"dynamodb:DescribeStream\",\n \"dynamodb:DescribeTable\",\n \"dynamodb:DescribeTableReplicaAutoScaling\",\n \"dynamodb:DescribeTimeToLive\",\n \"dynamodb:DisableKinesisStreamingDestination\",\n \"dynamodb:EnableKinesisStreamingDestination\",\n \"dynamodb:ExportTableToPointInTime\",\n \"dynamodb:GetItem\",\n \"dynamodb:GetRecords\",\n \"dynamodb:GetShardIterator\",\n \"dynamodb:ListBackups\",\n \"dynamodb:ListContributorInsights\",\n \"dynamodb:ListExports\",\n \"dynamodb:ListStreams\",\n \"dynamodb:ListTables\",\n \"dynamodb:ListTagsOfResource\",\n \"dynamodb:PartiQLDelete\",\n \"dynamodb:PartiQLInsert\",\n \"dynamodb:PartiQLSelect\",\n \"dynamodb:PartiQLUpdate\",\n \"dynamodb:PurchaseReservedCapacityOfferings\",\n \"dynamodb:PutItem\",\n \"dynamodb:Query\",\n \"dynamodb:RestoreTableFromBackup\",\n \"dynamodb:RestoreTableToPointInTime\",\n \"dynamodb:Scan\",\n \"dynamodb:UpdateContinuousBackups\",\n \"dynamodb:UpdateContributorInsights\",\n \"dynamodb:UpdateItem\",\n \"dynamodb:UpdateTable\",\n \"dynamodb:UpdateTableReplicaAutoScaling\",\n \"dynamodb:UpdateTimeToLive\"\n ],\n Resource: [\n pulumi.interpolate`${params.primaryDynamodbTableArn}`,\n pulumi.interpolate`${params.primaryDynamodbTableArn}/*`\n ]\n }\n ]\n }\n }\n });\n}\n"]}
@@ -0,0 +1,11 @@
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 LambdaRoleParams {
6
+ name: string;
7
+ policy: pulumi.Output<aws.iam.Policy>;
8
+ vpc: Vpc | undefined;
9
+ }
10
+ export declare function createLambdaRole(app: PulumiApp, params: LambdaRoleParams): import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.iam.Role>;
11
+ export {};
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createLambdaRole = createLambdaRole;
7
+
8
+ var aws = _interopRequireWildcard(require("@pulumi/aws"));
9
+
10
+ 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); }
11
+
12
+ 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; }
13
+
14
+ function createLambdaRole(app, params) {
15
+ const role = app.addResource(aws.iam.Role, {
16
+ name: params.name,
17
+ config: {
18
+ assumeRolePolicy: {
19
+ Version: "2012-10-17",
20
+ Statement: [{
21
+ Action: "sts:AssumeRole",
22
+ Principal: {
23
+ Service: "lambda.amazonaws.com"
24
+ },
25
+ Effect: "Allow"
26
+ }]
27
+ }
28
+ }
29
+ });
30
+ app.addResource(aws.iam.RolePolicyAttachment, {
31
+ name: `${params.name}-policy`,
32
+ config: {
33
+ role: role.output,
34
+ policyArn: params.policy.arn
35
+ }
36
+ });
37
+ app.addResource(aws.iam.RolePolicyAttachment, {
38
+ name: `${params.name}-execution-role`,
39
+ config: {
40
+ role: role.output,
41
+ policyArn: params.vpc ? aws.iam.ManagedPolicy.AWSLambdaVPCAccessExecutionRole : aws.iam.ManagedPolicy.AWSLambdaBasicExecutionRole
42
+ }
43
+ });
44
+ return role;
45
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ApiLambdaUtils.ts"],"names":["createLambdaRole","app","params","role","addResource","aws","iam","Role","name","config","assumeRolePolicy","Version","Statement","Action","Principal","Service","Effect","RolePolicyAttachment","output","policyArn","policy","arn","vpc","ManagedPolicy","AWSLambdaVPCAccessExecutionRole","AWSLambdaBasicExecutionRole"],"mappings":";;;;;;;AACA;;;;;;AAWO,SAASA,gBAAT,CAA0BC,GAA1B,EAA0CC,MAA1C,EAAoE;AACvE,QAAMC,IAAI,GAAGF,GAAG,CAACG,WAAJ,CAAgBC,GAAG,CAACC,GAAJ,CAAQC,IAAxB,EAA8B;AACvCC,IAAAA,IAAI,EAAEN,MAAM,CAACM,IAD0B;AAEvCC,IAAAA,MAAM,EAAE;AACJC,MAAAA,gBAAgB,EAAE;AACdC,QAAAA,OAAO,EAAE,YADK;AAEdC,QAAAA,SAAS,EAAE,CACP;AACIC,UAAAA,MAAM,EAAE,gBADZ;AAEIC,UAAAA,SAAS,EAAE;AACPC,YAAAA,OAAO,EAAE;AADF,WAFf;AAKIC,UAAAA,MAAM,EAAE;AALZ,SADO;AAFG;AADd;AAF+B,GAA9B,CAAb;AAkBAf,EAAAA,GAAG,CAACG,WAAJ,CAAgBC,GAAG,CAACC,GAAJ,CAAQW,oBAAxB,EAA8C;AAC1CT,IAAAA,IAAI,EAAG,GAAEN,MAAM,CAACM,IAAK,SADqB;AAE1CC,IAAAA,MAAM,EAAE;AACJN,MAAAA,IAAI,EAAEA,IAAI,CAACe,MADP;AAEJC,MAAAA,SAAS,EAAEjB,MAAM,CAACkB,MAAP,CAAcC;AAFrB;AAFkC,GAA9C;AAQApB,EAAAA,GAAG,CAACG,WAAJ,CAAgBC,GAAG,CAACC,GAAJ,CAAQW,oBAAxB,EAA8C;AAC1CT,IAAAA,IAAI,EAAG,GAAEN,MAAM,CAACM,IAAK,iBADqB;AAE1CC,IAAAA,MAAM,EAAE;AACJN,MAAAA,IAAI,EAAEA,IAAI,CAACe,MADP;AAEJC,MAAAA,SAAS,EAAEjB,MAAM,CAACoB,GAAP,GACLjB,GAAG,CAACC,GAAJ,CAAQiB,aAAR,CAAsBC,+BADjB,GAELnB,GAAG,CAACC,GAAJ,CAAQiB,aAAR,CAAsBE;AAJxB;AAFkC,GAA9C;AAUA,SAAOtB,IAAP;AACH","sourcesContent":["import * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport { PulumiApp } from \"@webiny/pulumi-sdk\";\n\nimport { Vpc } from \"./ApiVpc\";\n\ninterface LambdaRoleParams {\n name: string;\n policy: pulumi.Output<aws.iam.Policy>;\n vpc: Vpc | undefined;\n}\n\nexport function createLambdaRole(app: PulumiApp, params: LambdaRoleParams) {\n const role = app.addResource(aws.iam.Role, {\n name: params.name,\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 app.addResource(aws.iam.RolePolicyAttachment, {\n name: `${params.name}-policy`,\n config: {\n role: role.output,\n policyArn: params.policy.arn\n }\n });\n\n app.addResource(aws.iam.RolePolicyAttachment, {\n name: `${params.name}-execution-role`,\n config: {\n role: role.output,\n policyArn: params.vpc\n ? aws.iam.ManagedPolicy.AWSLambdaVPCAccessExecutionRole\n : aws.iam.ManagedPolicy.AWSLambdaBasicExecutionRole\n }\n });\n\n return role;\n}\n"]}
@@ -0,0 +1,40 @@
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 PageBuilderParams {
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 type ApiPageBuilder = PulumiAppModule<typeof ApiPageBuilder>;
15
+ export declare const ApiPageBuilder: import("@webiny/pulumi-sdk").PulumiAppModuleDefinition<{
16
+ updateSettings: {
17
+ role: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.iam.Role>;
18
+ policy: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.iam.Policy>;
19
+ functions: {
20
+ update: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.lambda.Function>;
21
+ };
22
+ };
23
+ exportPages: {
24
+ role: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.iam.Role>;
25
+ policy: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.iam.Policy>;
26
+ functions: {
27
+ process: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.lambda.Function>;
28
+ combine: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.lambda.Function>;
29
+ };
30
+ };
31
+ importPages: {
32
+ role: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.iam.Role>;
33
+ policy: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.iam.Policy>;
34
+ functions: {
35
+ create: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.lambda.Function>;
36
+ process: import("@webiny/pulumi-sdk").PulumiAppResource<typeof aws.lambda.Function>;
37
+ };
38
+ };
39
+ }, PageBuilderParams>;
40
+ export {};