@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.
- package/apps/admin/AdminApp.d.ts +14 -0
- package/apps/admin/AdminApp.js +134 -0
- package/apps/admin/AdminApp.js.map +1 -0
- package/apps/admin/AdminUpload.d.ts +6 -0
- package/apps/admin/AdminUpload.js +50 -0
- package/apps/admin/AdminUpload.js.map +1 -0
- package/apps/api/ApiApp.d.ts +66 -0
- package/apps/api/ApiApp.js +223 -0
- package/apps/api/ApiApp.js.map +1 -0
- package/apps/api/ApiApwScheduler.d.ts +23 -0
- package/apps/api/ApiApwScheduler.js +240 -0
- package/apps/api/ApiApwScheduler.js.map +1 -0
- package/apps/api/ApiCloudfront.d.ts +4 -0
- package/apps/api/ApiCloudfront.js +103 -0
- package/apps/api/ApiCloudfront.js.map +1 -0
- package/apps/api/ApiFileManager.d.ts +18 -0
- package/apps/api/ApiFileManager.js +168 -0
- package/apps/api/ApiFileManager.js.map +1 -0
- package/apps/api/ApiGateway.d.ts +19 -0
- package/apps/api/ApiGateway.js +90 -0
- package/apps/api/ApiGateway.js.map +1 -0
- package/apps/api/ApiGraphql.d.ts +27 -0
- package/apps/api/ApiGraphql.js +128 -0
- package/apps/api/ApiGraphql.js.map +1 -0
- package/apps/api/ApiHeadlessCMS.d.ts +18 -0
- package/apps/api/ApiHeadlessCMS.js +90 -0
- package/apps/api/ApiHeadlessCMS.js.map +1 -0
- package/apps/api/ApiLambdaUtils.d.ts +11 -0
- package/apps/api/ApiLambdaUtils.js +45 -0
- package/apps/api/ApiLambdaUtils.js.map +1 -0
- package/apps/api/ApiPageBuilder.d.ts +40 -0
- package/apps/api/ApiPageBuilder.js +289 -0
- package/apps/api/ApiPageBuilder.js.map +1 -0
- package/apps/api/ApiPrerendering.d.ts +24 -0
- package/apps/api/ApiPrerendering.js +200 -0
- package/apps/api/ApiPrerendering.js.map +1 -0
- package/apps/api/ApiVpc.d.ts +10 -0
- package/apps/api/ApiVpc.js +129 -0
- package/apps/api/ApiVpc.js.map +1 -0
- package/apps/api/index.d.ts +8 -0
- package/apps/api/index.js +109 -0
- package/apps/api/index.js.map +1 -0
- package/apps/awsUtils.d.ts +3 -0
- package/apps/awsUtils.js +25 -0
- package/apps/awsUtils.js.map +1 -0
- package/apps/createAppBucket.d.ts +13 -0
- package/apps/createAppBucket.js +107 -0
- package/apps/createAppBucket.js.map +1 -0
- package/apps/customDomain.d.ts +9 -0
- package/apps/customDomain.js +14 -0
- package/apps/customDomain.js.map +1 -0
- package/apps/getStorageOutput.d.ts +13 -0
- package/apps/getStorageOutput.js +29 -0
- package/apps/getStorageOutput.js.map +1 -0
- package/apps/index.d.ts +5 -0
- package/apps/index.js +72 -0
- package/apps/index.js.map +1 -0
- package/apps/storage/StorageApp.d.ts +16 -0
- package/apps/storage/StorageApp.js +90 -0
- package/apps/storage/StorageApp.js.map +1 -0
- package/apps/storage/StorageCognito.d.ts +11 -0
- package/apps/storage/StorageCognito.js +102 -0
- package/apps/storage/StorageCognito.js.map +1 -0
- package/apps/storage/StorageDynamo.d.ts +6 -0
- package/apps/storage/StorageDynamo.js +53 -0
- package/apps/storage/StorageDynamo.js.map +1 -0
- package/apps/storage/StorageFileManager.d.ts +6 -0
- package/apps/storage/StorageFileManager.js +40 -0
- package/apps/storage/StorageFileManager.js.map +1 -0
- package/apps/storage/index.d.ts +4 -0
- package/apps/storage/index.js +57 -0
- package/apps/storage/index.js.map +1 -0
- package/apps/website/WebsiteApp.d.ts +22 -0
- package/apps/website/WebsiteApp.js +206 -0
- package/apps/website/WebsiteApp.js.map +1 -0
- package/apps/website/WebsiteHookRender.d.ts +1 -0
- package/apps/website/WebsiteHookRender.js +65 -0
- package/apps/website/WebsiteHookRender.js.map +1 -0
- package/apps/website/WebsiteHookUpdatePbSettings.d.ts +5 -0
- package/apps/website/WebsiteHookUpdatePbSettings.js +80 -0
- package/apps/website/WebsiteHookUpdatePbSettings.js.map +1 -0
- package/apps/website/WebsiteHookUpload.d.ts +1 -0
- package/apps/website/WebsiteHookUpload.js +65 -0
- package/apps/website/WebsiteHookUpload.js.map +1 -0
- package/components/tenantRouter/functions/origin/request.js +54 -8
- package/components/tenantRouter/functions/origin/request.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +18 -1
- package/index.js.map +1 -1
- package/package.json +10 -6
- package/types.d.ts +2 -0
- package/types.js +5 -0
- 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":";;;;;;;AAAA;;AAEA;;;;;;AAUO,MAAMA,UAAU,GAAG,gCAAgB;AACtCC,EAAAA,IAAI,EAAE,YADgC;;AAEtCC,EAAAA,MAAM,CAACC,GAAD,EAAiBC,YAAjB,EAA+D;AACjE,UAAMC,GAAG,GAAGF,GAAG,CAACG,WAAJ,CAAgBC,GAAG,CAACC,YAAJ,CAAiBC,GAAjC,EAAsC;AAC9CR,MAAAA,IAAI,EAAE,aADwC;AAE9CC,MAAAA,MAAM,EAAE;AACJQ,QAAAA,YAAY,EAAE,MADV;AAEJC,QAAAA,WAAW,EAAE;AAFT;AAFsC,KAAtC,CAAZ;AAQA,UAAMC,KAAK,GAAGT,GAAG,CAACG,WAAJ,CAAgBC,GAAG,CAACC,YAAJ,CAAiBK,KAAjC,EAAwC;AAClDZ,MAAAA,IAAI,EAAE,SAD4C;AAElDC,MAAAA,MAAM,EAAE;AACJY,QAAAA,KAAK,EAAET,GAAG,CAACU,MAAJ,CAAWC,EADd;AAEJC,QAAAA,UAAU,EAAE;AAFR;AAF0C,KAAxC,CAAd;AAQA,UAAMC,MAAsD,GAAG,EAA/D;;AAEA,SAAK,MAAMjB,IAAX,IAAmBkB,MAAM,CAACC,IAAP,CAAYhB,YAAZ,CAAnB,EAA8C;AAC1CiB,MAAAA,QAAQ,CAACpB,IAAD,EAAOG,YAAY,CAACH,IAAD,CAAnB,CAAR;AACH;;AAED,WAAO;AACHI,MAAAA,GADG;AAEHO,MAAAA,KAFG;AAGHM,MAAAA,MAHG;AAIHG,MAAAA;AAJG,KAAP;;AAOA,aAASA,QAAT,CAAkBpB,IAAlB,EAAgCqB,MAAhC,EAAwD;AACpD,YAAMC,KAAK,GAAGC,WAAW,CAACrB,GAAD,EAAME,GAAG,CAACU,MAAV,EAAkBd,IAAlB,EAAwBqB,MAAxB,CAAzB;AACAJ,MAAAA,MAAM,CAACjB,IAAD,CAAN,GAAesB,KAAf;AACH;AACJ;;AApCqC,CAAhB,CAAnB;;;AAuCP,SAASC,WAAT,CACIrB,GADJ,EAEIE,GAFJ,EAGIJ,IAHJ,EAIIqB,MAJJ,EAKE;AACE,QAAMG,WAAW,GAAGtB,GAAG,CAACG,WAAJ,CAAgBC,GAAG,CAACC,YAAJ,CAAiBkB,WAAjC,EAA8C;AAC9DzB,IAAAA,IAAI,EAAEA,IADwD;AAE9DC,IAAAA,MAAM,EAAE;AACJS,MAAAA,WAAW,EAAE,yBADT;AAEJG,MAAAA,KAAK,EAAET,GAAG,CAACW,EAFP;AAGJW,MAAAA,eAAe,EAAE,WAHb;AAIJC,MAAAA,iBAAiB,EAAEN,MAAM,CAACO,MAJtB;AAKJC,MAAAA,cAAc,EAAER,MAAM,CAACS,QALnB;AAMJC,MAAAA,mBAAmB,EAAE;AANjB;AAFsD,GAA9C,CAApB;AAYA,QAAMT,KAAK,GAAGpB,GAAG,CAACG,WAAJ,CAAgBC,GAAG,CAACC,YAAJ,CAAiByB,KAAjC,EAAwC;AAClDhC,IAAAA,IAAI,EAAEA,IAD4C;AAElDC,IAAAA,MAAM,EAAE;AACJY,MAAAA,KAAK,EAAET,GAAG,CAACW,EADP;AAEJkB,MAAAA,QAAQ,EAAG,GAAEZ,MAAM,CAACO,MAAO,IAAGP,MAAM,CAACa,IAAK,EAFtC;AAGJC,MAAAA,MAAM,EAAEX,WAAW,CAACV,MAAZ,CAAmBC,EAAnB,CAAsBqB,KAAtB,CAA4BC,KAAK,IAAK,gBAAeA,KAAM,EAA3D;AAHJ;AAF0C,GAAxC,CAAd;AASA,QAAMC,UAAU,GAAGpC,GAAG,CAACG,WAAJ,CAAgBC,GAAG,CAACiC,MAAJ,CAAWC,UAA3B,EAAuC;AACtDxC,IAAAA,IAAI,EAAG,SAAQA,IAAK,EADkC;AAEtDC,IAAAA,MAAM,EAAE;AACJwC,MAAAA,MAAM,EAAE,uBADJ;AAEJX,MAAAA,QAAQ,EAAET,MAAM,CAACS,QAFb;AAGJY,MAAAA,SAAS,EAAE,0BAHP;AAIJC,MAAAA,SAAS,EAAEvC,GAAG,CAACwC,YAAJ,CAAiBR,KAAjB,CAAuBS,GAAG,IAAK,GAAEA,GAAI,OAAMxB,MAAM,CAACa,IAAK,EAAvD;AAJP;AAF8C,GAAvC,CAAnB;AAUA,SAAO;AACHV,IAAAA,WADG;AAEHF,IAAAA,KAFG;AAGHgB,IAAAA;AAHG,GAAP;AAKH","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":";;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AAEA;;;;;;;;;;AAmBO,MAAMA,UAAU,GAAG,gCAAgB;AACtCC,EAAAA,IAAI,EAAE,YADgC;;AAEtCC,EAAAA,MAAM,CAACC,GAAD,EAAiBC,MAAjB,EAAwC;AAC1C,UAAMC,MAAM,GAAGC,yBAAyB,CAACH,GAAD,EAAMC,MAAN,CAAxC;AACA,UAAMG,IAAI,GAAG,sCAAiBJ,GAAjB,EAAsB;AAC/BF,MAAAA,IAAI,EAAE,iBADyB;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,SAD2C;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,oBAA1B,CADC;AAD2B,SAA9B,CANF;AAWJC,QAAAA,WAAW,EAAE;AACTC,UAAAA,SAAS,kCACF1B,MAAM,CAAC2B,GADL;AAELC,YAAAA,mCAAmC,EAAE,GAFhC;AAGLC,YAAAA,uBAAuB,EAAEC,MAAM,CAACC,OAAO,CAACJ,GAAR,CAAY,yBAAZ,CAAD;AAH1B;AADA,SAXT;AAkBJK,QAAAA,SAAS,EAAEhC,MAAM,CAACK,GAAP,GACL;AACI4B,UAAAA,SAAS,EAAEjC,MAAM,CAACK,GAAP,CAAW6B,OAAX,CAAmBC,OAAnB,CAA2BC,GAA3B,CAA+BC,MAAM,IAAIA,MAAM,CAACjC,MAAP,CAAckC,EAAvD,CADf;AAEIC,UAAAA,gBAAgB,EAAE,CAACvC,MAAM,CAACK,GAAP,CAAWA,GAAX,CAAeD,MAAf,CAAsBoC,sBAAvB;AAFtB,SADK,GAKLC;AAvBF;AAFyC,KAArC,CAAhB;AA6BA;AACR;AACA;AACA;AACA;AACA;;AACQ1C,IAAAA,GAAG,CAACQ,WAAJ,CAAgBC,GAAG,CAACkC,QAAJ,CAAaC,SAA7B,EAAwC;AACpC9C,MAAAA,IAAI,EAAE,aAD8B;AAEpCC,MAAAA,MAAM,EAAE;AACJ8C,QAAAA,SAAS,EAAE5C,MAAM,CAAC6C,wBADd;AAEJC,QAAAA,OAAO,EAAE9C,MAAM,CAAC+C,2BAFZ;AAGJC,QAAAA,QAAQ,EAAE/B,MAAM,CACXb,MADK,CACEJ,MAAM,CAACiD,4BADT,EAELC,KAFK,CAECC,GAAG,IAAIA,GAAG,IAAI,IAFf,CAHN;AAMJC,QAAAA,IAAI,EAAEnC,MAAM,CAACoC,WAAY;AACzC;AACA;AACA,iDAAiD/C,OAAO,CAACF,MAAR,CAAeS,GAAI;AACpE,wCAAwCb,MAAM,CAACsD,qBAAP,CAA6BzD,IAAK;AAC1E,wCAAwCG,MAAM,CAACuD,uBAAP,CAA+BC,QAAS;AAChF;AAZoB;AAF4B,KAAxC;AAkBA,WAAO;AACHrD,MAAAA,IADG;AAEHF,MAAAA,MAFG;AAGHwD,MAAAA,SAAS,EAAE;AACPnD,QAAAA;AADO;AAHR,KAAP;AAOH;;AAtEqC,CAAhB,CAAnB;;;AAyEP,SAASJ,yBAAT,CAAmCH,GAAnC,EAAmDC,MAAnD,EAA0E;AACtE,SAAOD,GAAG,CAACQ,WAAJ,CAAgBC,GAAG,CAACkD,GAAJ,CAAQC,MAAxB,EAAgC;AACnC9D,IAAAA,IAAI,EAAE,wBAD6B;AAEnCC,IAAAA,MAAM,EAAE;AACJ8D,MAAAA,WAAW,EAAE,oEADT;AAEJ3D,MAAAA,MAAM,EAAE;AACJ4D,QAAAA,OAAO,EAAE,YADL;AAEJC,QAAAA,SAAS,EAAE,CACP;AACIC,UAAAA,GAAG,EAAE,uBADT;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,CACNjD,MAAM,CAACoC,WAAY,GAAErD,MAAM,CAACmE,uBAAwB,EAD9C,EAENlD,MAAM,CAACoC,WAAY,GAAErD,MAAM,CAACmE,uBAAwB,IAF9C;AAvDd,SADO,EA6DP;AACIJ,UAAAA,GAAG,EAAE,iBADT;AAEIC,UAAAA,MAAM,EAAE,OAFZ;AAGIC,UAAAA,MAAM,EAAE,CACJ,iBADI,EAEJ,iBAFI,EAGJ,iBAHI,EAIJ,cAJI,EAKJ,cALI,CAHZ;AAUIC,UAAAA,QAAQ,EAAEjD,MAAM,CAACoC,WAAY,gBAAerD,MAAM,CAACoE,mBAAoB;AAV3E,SA7DO,EAyEP;AACIL,UAAAA,GAAG,EAAE,qBADT;AAEIC,UAAAA,MAAM,EAAE,OAFZ;AAGIC,UAAAA,MAAM,EAAE,CAAC,uBAAD,CAHZ;AAIIC,UAAAA,QAAQ,EAAEjD,MAAM,CAACoC,WAAY,kBAAiBrD,MAAM,CAACqE,SAAU,IAAGrE,MAAM,CAACsE,YAAa;AAJ1F,SAzEO,EA+EP;AACIP,UAAAA,GAAG,EAAE,yBADT;AAEIC,UAAAA,MAAM,EAAE,OAFZ;AAGIC,UAAAA,MAAM,EAAE,eAHZ;AAIIC,UAAAA,QAAQ,EAAEjD,MAAM,CAACoC,WAAY,GAAErD,MAAM,CAACuE,kBAAmB;AAJ7D,SA/EO;AAFP;AAFJ;AAF2B,GAAhC,CAAP;AA+FH","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":"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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\";\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 {};
|