@webiny/pulumi-aws 5.37.8-beta.0 → 5.38.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/admin/createAdminPulumiApp.js +3 -1
- package/apps/admin/index.js +3 -1
- package/apps/api/ApiApwScheduler.js +6 -3
- package/apps/api/ApiApwScheduler.js.map +1 -1
- package/apps/api/ApiCloudfront.js +3 -1
- package/apps/api/ApiFileManager.js +7 -4
- package/apps/api/ApiFileManager.js.map +1 -1
- package/apps/api/ApiGateway.js +3 -1
- package/apps/api/ApiGraphql.js +5 -2
- package/apps/api/ApiGraphql.js.map +1 -1
- package/apps/api/ApiMigration.js +5 -2
- package/apps/api/ApiMigration.js.map +1 -1
- package/apps/api/ApiOutput.js +3 -1
- package/apps/api/ApiPageBuilder.js +8 -5
- package/apps/api/ApiPageBuilder.js.map +1 -1
- package/apps/api/createApiPulumiApp.js +8 -3
- package/apps/api/createApiPulumiApp.js.map +1 -1
- package/apps/api/index.js +3 -1
- package/apps/awsUtils.d.ts +1 -1
- package/apps/awsUtils.js +3 -1
- package/apps/common/CoreOutput.js +3 -1
- package/apps/common/VpcConfig.js +3 -1
- package/apps/common/index.js +3 -1
- package/apps/core/CoreCognito.js +3 -1
- package/apps/core/CoreDynamo.js +3 -1
- package/apps/core/CoreElasticSearch.js +5 -2
- package/apps/core/CoreElasticSearch.js.map +1 -1
- package/apps/core/CoreEventBus.js +3 -1
- package/apps/core/CoreFileManager.js +3 -1
- package/apps/core/CoreVpc.js +3 -1
- package/apps/core/cognitoIdentityProviders/amazon.js +3 -1
- package/apps/core/cognitoIdentityProviders/apple.js +3 -1
- package/apps/core/cognitoIdentityProviders/configure.js +3 -1
- package/apps/core/cognitoIdentityProviders/facebook.js +3 -1
- package/apps/core/cognitoIdentityProviders/getIdpConfig.js +3 -1
- package/apps/core/cognitoIdentityProviders/google.js +3 -1
- package/apps/core/cognitoIdentityProviders/index.js +3 -1
- package/apps/core/createCorePulumiApp.d.ts +2 -1
- package/apps/core/createCorePulumiApp.js +6 -1
- package/apps/core/createCorePulumiApp.js.map +1 -1
- package/apps/core/index.js +3 -1
- package/apps/createAppBucket.js +3 -1
- package/apps/customDomain.js +3 -1
- package/apps/index.js +3 -1
- package/apps/lambdaUtils.js +3 -1
- package/apps/react/createReactPulumiApp.js +3 -1
- package/apps/react/index.js +3 -1
- package/apps/tenantRouter.js +5 -2
- package/apps/tenantRouter.js.map +1 -1
- package/apps/website/WebsitePrerendering.js +7 -4
- package/apps/website/WebsitePrerendering.js.map +1 -1
- package/apps/website/createWebsitePulumiApp.d.ts +6 -5
- package/apps/website/createWebsitePulumiApp.js +3 -1
- package/apps/website/deliveryViewerRequest.js +3 -1
- package/apps/website/index.js +3 -1
- package/components/tenantRouter/WebsiteTenantRouter.js +5 -2
- package/components/tenantRouter/WebsiteTenantRouter.js.map +1 -1
- package/components/tenantRouter/functions/origin/request.js +3 -1
- package/constants.d.ts +1 -0
- package/constants.js +11 -0
- package/constants.js.map +1 -0
- package/enterprise/createAdminPulumiApp.js +3 -1
- package/enterprise/createApiPulumiApp.js +3 -1
- package/enterprise/createCorePulumiApp.js +3 -1
- package/enterprise/createWebsitePulumiApp.js +3 -1
- package/enterprise/index.js +3 -1
- package/index.d.ts +1 -0
- package/index.js +15 -1
- package/index.js.map +1 -1
- package/package.json +8 -8
- package/utils/addDomainsUrlsOutputs.js +3 -1
- package/utils/crawlDirectory.js +3 -1
- package/utils/getPresignedPost.js +3 -1
- package/utils/index.js +3 -1
- package/utils/lambdaEnvVariables.js +3 -1
- package/utils/storageMigrate.js +3 -1
- package/utils/tagResources.js +3 -1
- package/utils/uploadFolderToS3.js +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_pulumi","require","_CoreCognito","_CoreDynamo","_CoreElasticSearch","_CoreEventBus","_CoreFileManager","_CoreVpc","_utils","createCorePulumiApp","projectAppParams","createPulumiApp","name","path","config","program","app","elasticSearch","getParam","domainName","process","env","AWS_ELASTIC_SEARCH_DOMAIN_NAME","indexPrefix","ELASTIC_SEARCH_INDEX_PREFIX","pulumiResourceNamePrefix","onResource","resource","startsWith","pulumi","addHandler","productionEnvironments","params","create","isProduction","includes","run","protect","legacyConfig","legacy","dynamoDbTable","addModule","CoreDynamo","vpcEnabled","vpc","CoreVpc","cognito","CoreCognito","useEmailAsUsername","eventBus","CoreEventBus","bucket","fileManagerBucket","CoreFileManger","ElasticSearch","addOutputs","fileManagerBucketId","output","id","primaryDynamodbTableArn","arn","primaryDynamodbTableName","primaryDynamodbTableHashKey","hashKey","primaryDynamodbTableRangeKey","rangeKey","cognitoUserPoolId","userPool","cognitoUserPoolArn","cognitoUserPoolPasswordPolicy","passwordPolicy","cognitoAppClientId","userPoolClient","eventBusArn","tagResources","WbyProjectName","String","WbyEnvironment","_objectSpread2","default"],"sources":["createCorePulumiApp.ts"],"sourcesContent":["import { createPulumiApp, PulumiAppParam } from \"@webiny/pulumi\";\nimport { CoreCognito } from \"./CoreCognito\";\nimport { CoreDynamo } from \"./CoreDynamo\";\nimport { ElasticSearch } from \"./CoreElasticSearch\";\nimport { CoreEventBus } from \"./CoreEventBus\";\nimport { CoreFileManger } from \"./CoreFileManager\";\nimport { CoreVpc } from \"./CoreVpc\";\nimport { tagResources } from \"~/utils\";\n\nexport type CorePulumiApp = ReturnType<typeof createCorePulumiApp>;\n\nexport interface CreateCorePulumiAppParams {\n /**\n * Secures against deleting database by accident.\n * By default enabled in production environments.\n */\n protect?: PulumiAppParam<boolean>;\n\n /**\n * Enables ElasticSearch infrastructure.\n * Note that it requires also changes in application code.\n */\n elasticSearch?: PulumiAppParam<\n | boolean\n | Partial<{\n domainName: string;\n indexPrefix: string;\n }>\n >;\n\n /**\n * Enables VPC for the application.\n * By default enabled in production environments.\n */\n vpc?: PulumiAppParam<boolean>;\n\n /**\n * Additional settings for backwards compatibility.\n */\n legacy?: PulumiAppParam<CoreAppLegacyConfig>;\n\n /**\n * Provides a way to adjust existing Pulumi code (cloud infrastructure resources)\n * or add additional ones into the mix.\n */\n pulumi?: (app: CorePulumiApp) => void | Promise<void>;\n\n /**\n * Prefixes names of all Pulumi cloud infrastructure resource with given prefix.\n */\n pulumiResourceNamePrefix?: PulumiAppParam<string>;\n\n /**\n * Treats provided environments as production environments, which\n * are deployed in production deployment mode.\n * https://www.webiny.com/docs/architecture/deployment-modes/production\n */\n productionEnvironments?: PulumiAppParam<string[]>;\n}\n\nexport interface CoreAppLegacyConfig {\n useEmailAsUsername?: boolean;\n}\n\nexport function createCorePulumiApp(projectAppParams: CreateCorePulumiAppParams = {}) {\n return createPulumiApp({\n name: \"core\",\n path: \"apps/core\",\n config: projectAppParams,\n program: async app => {\n if (projectAppParams.elasticSearch) {\n const elasticSearch = app.getParam(projectAppParams.elasticSearch);\n if (typeof elasticSearch === \"object\") {\n if (elasticSearch.domainName) {\n process.env.AWS_ELASTIC_SEARCH_DOMAIN_NAME = elasticSearch.domainName;\n }\n\n if (elasticSearch.indexPrefix) {\n process.env.ELASTIC_SEARCH_INDEX_PREFIX = elasticSearch.indexPrefix;\n }\n }\n }\n\n const pulumiResourceNamePrefix = app.getParam(\n projectAppParams.pulumiResourceNamePrefix\n );\n if (pulumiResourceNamePrefix) {\n app.onResource(resource => {\n if (!resource.name.startsWith(pulumiResourceNamePrefix)) {\n resource.name = `${pulumiResourceNamePrefix}${resource.name}`;\n }\n });\n }\n\n // Overrides must be applied via a handler, registered at the very start of the program.\n // By doing this, we're ensuring user's adjustments are not applied to late.\n if (projectAppParams.pulumi) {\n app.addHandler(() => {\n return projectAppParams.pulumi!(app as CorePulumiApp);\n });\n }\n\n const productionEnvironments = app.params.create.productionEnvironments || [\"prod\"];\n const isProduction = productionEnvironments.includes(app.params.run.env);\n\n const protect = app.getParam(projectAppParams.protect) ?? isProduction;\n const legacyConfig = app.getParam(projectAppParams.legacy) || {};\n\n // Setup DynamoDB table\n const dynamoDbTable = app.addModule(CoreDynamo, { protect });\n\n // Setup VPC\n const vpcEnabled = app.getParam(projectAppParams?.vpc) ?? isProduction;\n const vpc = vpcEnabled ? app.addModule(CoreVpc) : null;\n\n // Setup Cognito\n const cognito = app.addModule(CoreCognito, {\n protect,\n useEmailAsUsername: legacyConfig.useEmailAsUsername ?? false\n });\n\n // Setup event bus\n const eventBus = app.addModule(CoreEventBus);\n\n // Setup file core bucket\n const { bucket: fileManagerBucket } = app.addModule(CoreFileManger, { protect });\n\n const elasticSearch = app.getParam(projectAppParams?.elasticSearch)\n ? app.addModule(ElasticSearch, { protect })\n : null;\n\n app.addOutputs({\n fileManagerBucketId: fileManagerBucket.output.id,\n primaryDynamodbTableArn: dynamoDbTable.output.arn,\n primaryDynamodbTableName: dynamoDbTable.output.name,\n primaryDynamodbTableHashKey: dynamoDbTable.output.hashKey,\n primaryDynamodbTableRangeKey: dynamoDbTable.output.rangeKey,\n cognitoUserPoolId: cognito.userPool.output.id,\n cognitoUserPoolArn: cognito.userPool.output.arn,\n cognitoUserPoolPasswordPolicy: cognito.userPool.output.passwordPolicy,\n cognitoAppClientId: cognito.userPoolClient.output.id,\n eventBusArn: eventBus.output.arn\n });\n\n tagResources({\n WbyProjectName: String(process.env[\"WEBINY_PROJECT_NAME\"]),\n WbyEnvironment: String(process.env[\"WEBINY_ENV\"])\n });\n\n return {\n dynamoDbTable,\n vpc,\n ...cognito,\n fileManagerBucket,\n eventBus,\n elasticSearch\n };\n }\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["aws","_interopRequireWildcard","require","_pulumi","_CoreCognito","_CoreDynamo","_CoreElasticSearch","_CoreEventBus","_CoreFileManager","_CoreVpc","_utils","createCorePulumiApp","projectAppParams","createPulumiApp","name","path","config","program","app","elasticSearch","getParam","domainName","process","env","AWS_ELASTIC_SEARCH_DOMAIN_NAME","indexPrefix","ELASTIC_SEARCH_INDEX_PREFIX","pulumiResourceNamePrefix","onResource","resource","startsWith","pulumi","addHandler","productionEnvironments","params","create","isProduction","includes","run","protect","legacyConfig","legacy","dynamoDbTable","addModule","CoreDynamo","vpcEnabled","vpc","CoreVpc","cognito","CoreCognito","useEmailAsUsername","eventBus","CoreEventBus","bucket","fileManagerBucket","CoreFileManger","ElasticSearch","addOutputs","region","fileManagerBucketId","output","id","primaryDynamodbTableArn","arn","primaryDynamodbTableName","primaryDynamodbTableHashKey","hashKey","primaryDynamodbTableRangeKey","rangeKey","cognitoUserPoolId","userPool","cognitoUserPoolArn","cognitoUserPoolPasswordPolicy","passwordPolicy","cognitoAppClientId","userPoolClient","eventBusArn","tagResources","WbyProjectName","String","WbyEnvironment","_objectSpread2","default"],"sources":["createCorePulumiApp.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport { createPulumiApp, PulumiAppParam } from \"@webiny/pulumi\";\nimport { CoreCognito } from \"./CoreCognito\";\nimport { CoreDynamo } from \"./CoreDynamo\";\nimport { ElasticSearch } from \"./CoreElasticSearch\";\nimport { CoreEventBus } from \"./CoreEventBus\";\nimport { CoreFileManger } from \"./CoreFileManager\";\nimport { CoreVpc } from \"./CoreVpc\";\nimport { tagResources } from \"~/utils\";\n\nexport type CorePulumiApp = ReturnType<typeof createCorePulumiApp>;\n\nexport interface CreateCorePulumiAppParams {\n /**\n * Secures against deleting database by accident.\n * By default enabled in production environments.\n */\n protect?: PulumiAppParam<boolean>;\n\n /**\n * Enables ElasticSearch infrastructure.\n * Note that it requires also changes in application code.\n */\n elasticSearch?: PulumiAppParam<\n | boolean\n | Partial<{\n domainName: string;\n indexPrefix: string;\n }>\n >;\n\n /**\n * Enables VPC for the application.\n * By default enabled in production environments.\n */\n vpc?: PulumiAppParam<boolean>;\n\n /**\n * Additional settings for backwards compatibility.\n */\n legacy?: PulumiAppParam<CoreAppLegacyConfig>;\n\n /**\n * Provides a way to adjust existing Pulumi code (cloud infrastructure resources)\n * or add additional ones into the mix.\n */\n pulumi?: (app: CorePulumiApp) => void | Promise<void>;\n\n /**\n * Prefixes names of all Pulumi cloud infrastructure resource with given prefix.\n */\n pulumiResourceNamePrefix?: PulumiAppParam<string>;\n\n /**\n * Treats provided environments as production environments, which\n * are deployed in production deployment mode.\n * https://www.webiny.com/docs/architecture/deployment-modes/production\n */\n productionEnvironments?: PulumiAppParam<string[]>;\n}\n\nexport interface CoreAppLegacyConfig {\n useEmailAsUsername?: boolean;\n}\n\nexport function createCorePulumiApp(projectAppParams: CreateCorePulumiAppParams = {}) {\n return createPulumiApp({\n name: \"core\",\n path: \"apps/core\",\n config: projectAppParams,\n program: async app => {\n if (projectAppParams.elasticSearch) {\n const elasticSearch = app.getParam(projectAppParams.elasticSearch);\n if (typeof elasticSearch === \"object\") {\n if (elasticSearch.domainName) {\n process.env.AWS_ELASTIC_SEARCH_DOMAIN_NAME = elasticSearch.domainName;\n }\n\n if (elasticSearch.indexPrefix) {\n process.env.ELASTIC_SEARCH_INDEX_PREFIX = elasticSearch.indexPrefix;\n }\n }\n }\n\n const pulumiResourceNamePrefix = app.getParam(\n projectAppParams.pulumiResourceNamePrefix\n );\n if (pulumiResourceNamePrefix) {\n app.onResource(resource => {\n if (!resource.name.startsWith(pulumiResourceNamePrefix)) {\n resource.name = `${pulumiResourceNamePrefix}${resource.name}`;\n }\n });\n }\n\n // Overrides must be applied via a handler, registered at the very start of the program.\n // By doing this, we're ensuring user's adjustments are not applied to late.\n if (projectAppParams.pulumi) {\n app.addHandler(() => {\n return projectAppParams.pulumi!(app as CorePulumiApp);\n });\n }\n\n const productionEnvironments = app.params.create.productionEnvironments || [\"prod\"];\n const isProduction = productionEnvironments.includes(app.params.run.env);\n\n const protect = app.getParam(projectAppParams.protect) ?? isProduction;\n const legacyConfig = app.getParam(projectAppParams.legacy) || {};\n\n // Setup DynamoDB table\n const dynamoDbTable = app.addModule(CoreDynamo, { protect });\n\n // Setup VPC\n const vpcEnabled = app.getParam(projectAppParams?.vpc) ?? isProduction;\n const vpc = vpcEnabled ? app.addModule(CoreVpc) : null;\n\n // Setup Cognito\n const cognito = app.addModule(CoreCognito, {\n protect,\n useEmailAsUsername: legacyConfig.useEmailAsUsername ?? false\n });\n\n // Setup event bus\n const eventBus = app.addModule(CoreEventBus);\n\n // Setup file core bucket\n const { bucket: fileManagerBucket } = app.addModule(CoreFileManger, { protect });\n\n const elasticSearch = app.getParam(projectAppParams?.elasticSearch)\n ? app.addModule(ElasticSearch, { protect })\n : null;\n\n app.addOutputs({\n region: aws.config.region,\n fileManagerBucketId: fileManagerBucket.output.id,\n primaryDynamodbTableArn: dynamoDbTable.output.arn,\n primaryDynamodbTableName: dynamoDbTable.output.name,\n primaryDynamodbTableHashKey: dynamoDbTable.output.hashKey,\n primaryDynamodbTableRangeKey: dynamoDbTable.output.rangeKey,\n cognitoUserPoolId: cognito.userPool.output.id,\n cognitoUserPoolArn: cognito.userPool.output.arn,\n cognitoUserPoolPasswordPolicy: cognito.userPool.output.passwordPolicy,\n cognitoAppClientId: cognito.userPoolClient.output.id,\n eventBusArn: eventBus.output.arn\n });\n\n tagResources({\n WbyProjectName: String(process.env[\"WEBINY_PROJECT_NAME\"]),\n WbyEnvironment: String(process.env[\"WEBINY_ENV\"])\n });\n\n return {\n dynamoDbTable,\n vpc,\n ...cognito,\n fileManagerBucket,\n eventBus,\n elasticSearch\n };\n }\n });\n}\n"],"mappings":"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"}
|
package/apps/core/index.js
CHANGED
package/apps/createAppBucket.js
CHANGED
package/apps/customDomain.js
CHANGED
package/apps/index.js
CHANGED
package/apps/lambdaUtils.js
CHANGED
package/apps/react/index.js
CHANGED
package/apps/tenantRouter.js
CHANGED
|
@@ -11,6 +11,7 @@ var _fs = require("fs");
|
|
|
11
11
|
var pulumi = _interopRequireWildcard(require("@pulumi/pulumi"));
|
|
12
12
|
var aws = _interopRequireWildcard(require("@pulumi/aws"));
|
|
13
13
|
var _common = require("./common");
|
|
14
|
+
var _constants = require("../constants");
|
|
14
15
|
function createFunctionArchive({
|
|
15
16
|
dynamoDbTable,
|
|
16
17
|
region
|
|
@@ -70,7 +71,7 @@ function applyTenantRouter(app, cloudfront) {
|
|
|
70
71
|
name: `${PREFIX}-origin-request`,
|
|
71
72
|
config: {
|
|
72
73
|
publish: true,
|
|
73
|
-
runtime:
|
|
74
|
+
runtime: _constants.LAMBDA_RUNTIME,
|
|
74
75
|
handler: "index.handler",
|
|
75
76
|
role: role.output.arn,
|
|
76
77
|
timeout: 5,
|
|
@@ -115,4 +116,6 @@ function applyTenantRouter(app, cloudfront) {
|
|
|
115
116
|
return {
|
|
116
117
|
originLambda
|
|
117
118
|
};
|
|
118
|
-
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
//# sourceMappingURL=tenantRouter.js.map
|
package/apps/tenantRouter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_fs","require","pulumi","_interopRequireWildcard","aws","_common","createFunctionArchive","dynamoDbTable","region","handler","readFileSync","__dirname","source","replace","asset","AssetArchive","StringAsset","PREFIX","applyTenantRouter","app","cloudfront","String","process","env","AWS_REGION","core","getModule","CoreOutput","primaryDynamodbTableName","inlinePolicies","all","getCallerIdentity","apply","identity","name","policy","JSON","stringify","Version","Statement","Sid","Effect","Action","Resource","accountId","role","addResource","iam","Role","config","managedPolicyArns","ManagedPolicies","AWSLambdaBasicExecutionRole","assumeRolePolicy","Principal","Principals","LambdaPrincipal","EdgeLambdaPrincipal","awsUsEast1","Provider","originLambda","lambda","Function","publish","runtime","output","arn","timeout","memorySize","code","opts","provider","retainOnDelete","meta","canUseVpc","defaultCacheBehavior","value","_value$forwardedValue","_value$forwardedValue2","_value$forwardedValue3","_objectSpread2","default","forwardedValues","queryString","cookies","forward","headers","lambdaFunctionAssociations","eventType","includeBody","lambdaArn","qualifiedArn"],"sources":["tenantRouter.ts"],"sourcesContent":["import { readFileSync } from \"fs\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport { PulumiApp, PulumiAppResource } from \"@webiny/pulumi\";\nimport { CoreOutput } from \"./common\";\n\ninterface Params {\n region: string;\n dynamoDbTable: string;\n}\n\nfunction createFunctionArchive({ dynamoDbTable, region }: Params) {\n const handler = readFileSync(\n __dirname + \"/../components/tenantRouter/functions/origin/request.js\",\n \"utf-8\"\n );\n\n const source = handler\n .replace(\"{DB_TABLE_NAME}\", dynamoDbTable)\n .replace(\"{DB_TABLE_REGION}\", region);\n\n return new pulumi.asset.AssetArchive({\n \"index.js\": new pulumi.asset.StringAsset(source)\n });\n}\n\nconst PREFIX = \"website-router\";\n\nexport function applyTenantRouter(\n app: PulumiApp,\n cloudfront: PulumiAppResource<typeof aws.cloudfront.Distribution>\n) {\n const region = String(process.env.AWS_REGION);\n\n // Get Core app output\n const core = app.getModule(CoreOutput);\n\n // `primaryDynamodbTableName` is a string, hence the type cast here.\n const dynamoDbTable = core.primaryDynamodbTableName;\n\n // Because of JSON.stringify, we need to resolve promises upfront.\n const inlinePolicies = pulumi\n .all([aws.getCallerIdentity({}), dynamoDbTable])\n .apply(([identity, dynamoDbTable]) => [\n {\n name: \"tenant-router-policy\",\n policy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [\n {\n Sid: \"PermissionForDynamodb\",\n Effect: \"Allow\",\n Action: [\"dynamodb:GetItem\", \"dynamodb:Query\"],\n Resource: [\n `arn:aws:dynamodb:${region}:${identity.accountId}:table/${dynamoDbTable}`,\n `arn:aws:dynamodb:${region}:${identity.accountId}:table/${dynamoDbTable}/*`\n ]\n }\n ]\n })\n }\n ]);\n\n const role = app.addResource(aws.iam.Role, {\n name: `${PREFIX}-role`,\n config: {\n inlinePolicies,\n managedPolicyArns: [aws.iam.ManagedPolicies.AWSLambdaBasicExecutionRole],\n assumeRolePolicy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Action: \"sts:AssumeRole\",\n Principal: aws.iam.Principals.LambdaPrincipal,\n Effect: \"Allow\"\n },\n {\n Action: \"sts:AssumeRole\",\n Principal: aws.iam.Principals.EdgeLambdaPrincipal,\n Effect: \"Allow\"\n }\n ]\n }\n }\n });\n\n const awsUsEast1 = new aws.Provider(\"us-east-1\", { region: \"us-east-1\" });\n\n const originLambda = app.addResource(aws.lambda.Function, {\n name: `${PREFIX}-origin-request`,\n config: {\n publish: true,\n runtime:
|
|
1
|
+
{"version":3,"names":["_fs","require","pulumi","_interopRequireWildcard","aws","_common","_constants","createFunctionArchive","dynamoDbTable","region","handler","readFileSync","__dirname","source","replace","asset","AssetArchive","StringAsset","PREFIX","applyTenantRouter","app","cloudfront","String","process","env","AWS_REGION","core","getModule","CoreOutput","primaryDynamodbTableName","inlinePolicies","all","getCallerIdentity","apply","identity","name","policy","JSON","stringify","Version","Statement","Sid","Effect","Action","Resource","accountId","role","addResource","iam","Role","config","managedPolicyArns","ManagedPolicies","AWSLambdaBasicExecutionRole","assumeRolePolicy","Principal","Principals","LambdaPrincipal","EdgeLambdaPrincipal","awsUsEast1","Provider","originLambda","lambda","Function","publish","runtime","LAMBDA_RUNTIME","output","arn","timeout","memorySize","code","opts","provider","retainOnDelete","meta","canUseVpc","defaultCacheBehavior","value","_value$forwardedValue","_value$forwardedValue2","_value$forwardedValue3","_objectSpread2","default","forwardedValues","queryString","cookies","forward","headers","lambdaFunctionAssociations","eventType","includeBody","lambdaArn","qualifiedArn"],"sources":["tenantRouter.ts"],"sourcesContent":["import { readFileSync } from \"fs\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport { PulumiApp, PulumiAppResource } from \"@webiny/pulumi\";\nimport { CoreOutput } from \"./common\";\nimport { LAMBDA_RUNTIME } from \"~/constants\";\n\ninterface Params {\n region: string;\n dynamoDbTable: string;\n}\n\nfunction createFunctionArchive({ dynamoDbTable, region }: Params) {\n const handler = readFileSync(\n __dirname + \"/../components/tenantRouter/functions/origin/request.js\",\n \"utf-8\"\n );\n\n const source = handler\n .replace(\"{DB_TABLE_NAME}\", dynamoDbTable)\n .replace(\"{DB_TABLE_REGION}\", region);\n\n return new pulumi.asset.AssetArchive({\n \"index.js\": new pulumi.asset.StringAsset(source)\n });\n}\n\nconst PREFIX = \"website-router\";\n\nexport function applyTenantRouter(\n app: PulumiApp,\n cloudfront: PulumiAppResource<typeof aws.cloudfront.Distribution>\n) {\n const region = String(process.env.AWS_REGION);\n\n // Get Core app output\n const core = app.getModule(CoreOutput);\n\n // `primaryDynamodbTableName` is a string, hence the type cast here.\n const dynamoDbTable = core.primaryDynamodbTableName;\n\n // Because of JSON.stringify, we need to resolve promises upfront.\n const inlinePolicies = pulumi\n .all([aws.getCallerIdentity({}), dynamoDbTable])\n .apply(([identity, dynamoDbTable]) => [\n {\n name: \"tenant-router-policy\",\n policy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [\n {\n Sid: \"PermissionForDynamodb\",\n Effect: \"Allow\",\n Action: [\"dynamodb:GetItem\", \"dynamodb:Query\"],\n Resource: [\n `arn:aws:dynamodb:${region}:${identity.accountId}:table/${dynamoDbTable}`,\n `arn:aws:dynamodb:${region}:${identity.accountId}:table/${dynamoDbTable}/*`\n ]\n }\n ]\n })\n }\n ]);\n\n const role = app.addResource(aws.iam.Role, {\n name: `${PREFIX}-role`,\n config: {\n inlinePolicies,\n managedPolicyArns: [aws.iam.ManagedPolicies.AWSLambdaBasicExecutionRole],\n assumeRolePolicy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Action: \"sts:AssumeRole\",\n Principal: aws.iam.Principals.LambdaPrincipal,\n Effect: \"Allow\"\n },\n {\n Action: \"sts:AssumeRole\",\n Principal: aws.iam.Principals.EdgeLambdaPrincipal,\n Effect: \"Allow\"\n }\n ]\n }\n }\n });\n\n const awsUsEast1 = new aws.Provider(\"us-east-1\", { region: \"us-east-1\" });\n\n const originLambda = app.addResource(aws.lambda.Function, {\n name: `${PREFIX}-origin-request`,\n config: {\n publish: true,\n runtime: LAMBDA_RUNTIME,\n handler: \"index.handler\",\n role: role.output.arn,\n timeout: 5,\n memorySize: 128,\n code: dynamoDbTable.apply(dynamoDbTable => {\n return createFunctionArchive({\n region,\n dynamoDbTable\n });\n })\n },\n // With the `retainOnDelete` option set to `true`, the Lambda function will not be deleted when\n // the environment is destroyed. Users need to delete the function manually. We decided to use\n // this option here because it enables us to avoid annoying AWS Lambda function replication\n // errors upon destroying the stack (see https://github.com/pulumi/pulumi-aws/issues/2178).\n opts: { provider: awsUsEast1, retainOnDelete: true },\n meta: {\n canUseVpc: false\n }\n });\n\n cloudfront.config.defaultCacheBehavior(value => {\n return {\n ...value,\n // We need to forward the `Host` header so the Lambda@Edge knows what custom domain was requested.\n forwardedValues: {\n ...value.forwardedValues,\n queryString: value.forwardedValues?.queryString || false,\n cookies: value.forwardedValues?.cookies || { forward: \"none\" },\n headers: [...(value.forwardedValues?.headers || []), \"Host\"]\n },\n lambdaFunctionAssociations: [\n ...(value.lambdaFunctionAssociations || []),\n {\n eventType: \"origin-request\",\n includeBody: false,\n lambdaArn: originLambda.output.qualifiedArn\n }\n ]\n };\n });\n\n return { originLambda };\n}\n"],"mappings":";;;;;;;;;AAAA,IAAAA,GAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,uBAAA,CAAAF,OAAA;AACA,IAAAG,GAAA,GAAAD,uBAAA,CAAAF,OAAA;AAEA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,UAAA,GAAAL,OAAA;AAOA,SAASM,qBAAqBA,CAAC;EAAEC,aAAa;EAAEC;AAAe,CAAC,EAAE;EAC9D,MAAMC,OAAO,GAAG,IAAAC,gBAAY,EACxBC,SAAS,GAAG,yDAAyD,EACrE,OACJ,CAAC;EAED,MAAMC,MAAM,GAAGH,OAAO,CACjBI,OAAO,CAAC,iBAAiB,EAAEN,aAAa,CAAC,CACzCM,OAAO,CAAC,mBAAmB,EAAEL,MAAM,CAAC;EAEzC,OAAO,IAAIP,MAAM,CAACa,KAAK,CAACC,YAAY,CAAC;IACjC,UAAU,EAAE,IAAId,MAAM,CAACa,KAAK,CAACE,WAAW,CAACJ,MAAM;EACnD,CAAC,CAAC;AACN;AAEA,MAAMK,MAAM,GAAG,gBAAgB;AAExB,SAASC,iBAAiBA,CAC7BC,GAAc,EACdC,UAAiE,EACnE;EACE,MAAMZ,MAAM,GAAGa,MAAM,CAACC,OAAO,CAACC,GAAG,CAACC,UAAU,CAAC;;EAE7C;EACA,MAAMC,IAAI,GAAGN,GAAG,CAACO,SAAS,CAACC,kBAAU,CAAC;;EAEtC;EACA,MAAMpB,aAAa,GAAGkB,IAAI,CAACG,wBAAwB;;EAEnD;EACA,MAAMC,cAAc,GAAG5B,MAAM,CACxB6B,GAAG,CAAC,CAAC3B,GAAG,CAAC4B,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAExB,aAAa,CAAC,CAAC,CAC/CyB,KAAK,CAAC,CAAC,CAACC,QAAQ,EAAE1B,aAAa,CAAC,KAAK,CAClC;IACI2B,IAAI,EAAE,sBAAsB;IAC5BC,MAAM,EAAEC,IAAI,CAACC,SAAS,CAAC;MACnBC,OAAO,EAAE,YAAY;MACrBC,SAAS,EAAE,CACP;QACIC,GAAG,EAAE,uBAAuB;QAC5BC,MAAM,EAAE,OAAO;QACfC,MAAM,EAAE,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;QAC9CC,QAAQ,EAAE,CACL,oBAAmBnC,MAAO,IAAGyB,QAAQ,CAACW,SAAU,UAASrC,aAAc,EAAC,EACxE,oBAAmBC,MAAO,IAAGyB,QAAQ,CAACW,SAAU,UAASrC,aAAc,IAAG;MAEnF,CAAC;IAET,CAAC;EACL,CAAC,CACJ,CAAC;EAEN,MAAMsC,IAAI,GAAG1B,GAAG,CAAC2B,WAAW,CAAC3C,GAAG,CAAC4C,GAAG,CAACC,IAAI,EAAE;IACvCd,IAAI,EAAG,GAAEjB,MAAO,OAAM;IACtBgC,MAAM,EAAE;MACJpB,cAAc;MACdqB,iBAAiB,EAAE,CAAC/C,GAAG,CAAC4C,GAAG,CAACI,eAAe,CAACC,2BAA2B,CAAC;MACxEC,gBAAgB,EAAE;QACdf,OAAO,EAAE,YAAY;QACrBC,SAAS,EAAE,CACP;UACIG,MAAM,EAAE,gBAAgB;UACxBY,SAAS,EAAEnD,GAAG,CAAC4C,GAAG,CAACQ,UAAU,CAACC,eAAe;UAC7Cf,MAAM,EAAE;QACZ,CAAC,EACD;UACIC,MAAM,EAAE,gBAAgB;UACxBY,SAAS,EAAEnD,GAAG,CAAC4C,GAAG,CAACQ,UAAU,CAACE,mBAAmB;UACjDhB,MAAM,EAAE;QACZ,CAAC;MAET;IACJ;EACJ,CAAC,CAAC;EAEF,MAAMiB,UAAU,GAAG,IAAIvD,GAAG,CAACwD,QAAQ,CAAC,WAAW,EAAE;IAAEnD,MAAM,EAAE;EAAY,CAAC,CAAC;EAEzE,MAAMoD,YAAY,GAAGzC,GAAG,CAAC2B,WAAW,CAAC3C,GAAG,CAAC0D,MAAM,CAACC,QAAQ,EAAE;IACtD5B,IAAI,EAAG,GAAEjB,MAAO,iBAAgB;IAChCgC,MAAM,EAAE;MACJc,OAAO,EAAE,IAAI;MACbC,OAAO,EAAEC,yBAAc;MACvBxD,OAAO,EAAE,eAAe;MACxBoC,IAAI,EAAEA,IAAI,CAACqB,MAAM,CAACC,GAAG;MACrBC,OAAO,EAAE,CAAC;MACVC,UAAU,EAAE,GAAG;MACfC,IAAI,EAAE/D,aAAa,CAACyB,KAAK,CAACzB,aAAa,IAAI;QACvC,OAAOD,qBAAqB,CAAC;UACzBE,MAAM;UACND;QACJ,CAAC,CAAC;MACN,CAAC;IACL,CAAC;IACD;IACA;IACA;IACA;IACAgE,IAAI,EAAE;MAAEC,QAAQ,EAAEd,UAAU;MAAEe,cAAc,EAAE;IAAK,CAAC;IACpDC,IAAI,EAAE;MACFC,SAAS,EAAE;IACf;EACJ,CAAC,CAAC;EAEFvD,UAAU,CAAC6B,MAAM,CAAC2B,oBAAoB,CAACC,KAAK,IAAI;IAAA,IAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;IAC5C,WAAAC,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACOL,KAAK;MACR;MACAM,eAAe,MAAAF,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACRL,KAAK,CAACM,eAAe;QACxBC,WAAW,EAAE,EAAAN,qBAAA,GAAAD,KAAK,CAACM,eAAe,cAAAL,qBAAA,uBAArBA,qBAAA,CAAuBM,WAAW,KAAI,KAAK;QACxDC,OAAO,EAAE,EAAAN,sBAAA,GAAAF,KAAK,CAACM,eAAe,cAAAJ,sBAAA,uBAArBA,sBAAA,CAAuBM,OAAO,KAAI;UAAEC,OAAO,EAAE;QAAO,CAAC;QAC9DC,OAAO,EAAE,CAAC,IAAI,EAAAP,sBAAA,GAAAH,KAAK,CAACM,eAAe,cAAAH,sBAAA,uBAArBA,sBAAA,CAAuBO,OAAO,KAAI,EAAE,CAAC,EAAE,MAAM;MAAC,EAC/D;MACDC,0BAA0B,EAAE,CACxB,IAAIX,KAAK,CAACW,0BAA0B,IAAI,EAAE,CAAC,EAC3C;QACIC,SAAS,EAAE,gBAAgB;QAC3BC,WAAW,EAAE,KAAK;QAClBC,SAAS,EAAE/B,YAAY,CAACM,MAAM,CAAC0B;MACnC,CAAC;IACJ;EAET,CAAC,CAAC;EAEF,OAAO;IAAEhC;EAAa,CAAC;AAC3B"}
|
|
@@ -15,6 +15,7 @@ var _awsLayers = require("@webiny/aws-layers");
|
|
|
15
15
|
var _lambdaUtils = require("../lambdaUtils");
|
|
16
16
|
var _common = require("../common");
|
|
17
17
|
var _awsUtils = require("../awsUtils");
|
|
18
|
+
var _constants = require("../../constants");
|
|
18
19
|
// @ts-ignore
|
|
19
20
|
|
|
20
21
|
function createPrerenderingService(app, params) {
|
|
@@ -80,7 +81,7 @@ function createRenderSubscriber(app, policy, params) {
|
|
|
80
81
|
name: "ps-render-subscriber-lambda",
|
|
81
82
|
config: {
|
|
82
83
|
role: role.output.arn,
|
|
83
|
-
runtime:
|
|
84
|
+
runtime: _constants.LAMBDA_RUNTIME,
|
|
84
85
|
handler: "handler.handler",
|
|
85
86
|
timeout: 30,
|
|
86
87
|
memorySize: 512,
|
|
@@ -148,7 +149,7 @@ function createRenderer(app, queue, policy, params) {
|
|
|
148
149
|
name: "ps-render-lambda",
|
|
149
150
|
config: {
|
|
150
151
|
role: role.output.arn,
|
|
151
|
-
runtime:
|
|
152
|
+
runtime: _constants.LAMBDA_RUNTIME,
|
|
152
153
|
handler: "handler.handler",
|
|
153
154
|
timeout: 300,
|
|
154
155
|
memorySize: 2048,
|
|
@@ -190,7 +191,7 @@ function createFlushService(app, policy, params) {
|
|
|
190
191
|
name: "ps-flush-lambda",
|
|
191
192
|
config: {
|
|
192
193
|
role: role.output.arn,
|
|
193
|
-
runtime:
|
|
194
|
+
runtime: _constants.LAMBDA_RUNTIME,
|
|
194
195
|
handler: "handler.handler",
|
|
195
196
|
timeout: 30,
|
|
196
197
|
memorySize: 512,
|
|
@@ -283,4 +284,6 @@ function createLambdaPolicy(app, queue, params) {
|
|
|
283
284
|
}
|
|
284
285
|
}
|
|
285
286
|
});
|
|
286
|
-
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
//# sourceMappingURL=WebsitePrerendering.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["path","_interopRequireWildcard","require","pulumi","aws","_dynamodb","_awsLayers","_lambdaUtils","_common","_awsUtils","createPrerenderingService","app","params","queue","addResource","sqs","Queue","name","config","visibilityTimeoutSeconds","fifoQueue","policy","createLambdaPolicy","output","renderer","createRenderer","subscriber","createRenderSubscriber","flush","createFlushService","settings","createPrerenderingSettingsDbItem","tableItem","dynamodb","TableItem","tableName","dbTableName","hashKey","dbTableHashKey","rangeKey","dbTableRangeKey","item","interpolate","run","variant","appUrl","deliveryUrl","bucket","cloudfrontId","url","apply","v","JSON","stringify","Converter","marshall","parse","core","getModule","CoreOutput","role","createLambdaRole","lambda","Function","arn","runtime","handler","timeout","memorySize","environment","variables","getCommonLambdaEnvVariables","value","_objectSpread2","default","DB_TABLE","description","code","asset","AssetArchive","FileArchive","join","paths","workspace","vpcConfig","VpcConfig","functionVpcConfig","eventRule","cloudwatch","EventRule","eventBusName","eventBusArn","eventPattern","eventPermission","Permission","action","function","principal","sourceArn","eventTarget","EventTarget","rule","executionRole","iam","ManagedPolicy","AWSLambdaSQSQueueExecutionRole","layers","getLayerArn","eventSourceMapping","EventSourceMapping","functionName","eventSourceArn","batchSize","awsAccountId","getAwsAccountId","Policy","Version","Statement","Sid","Effect","Action","Resource","s","resources","primaryDynamodbTableArn","elasticsearchDynamodbTableArn","push"],"sources":["WebsitePrerendering.ts"],"sourcesContent":["import * as path from \"path\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport { Converter } from \"aws-sdk/clients/dynamodb\";\n\nimport { PulumiApp } from \"@webiny/pulumi\";\n// @ts-ignore\nimport { getLayerArn } from \"@webiny/aws-layers\";\n\nimport { createLambdaRole, getCommonLambdaEnvVariables } from \"../lambdaUtils\";\nimport { CoreOutput, VpcConfig } from \"../common\";\nimport { getAwsAccountId } from \"../awsUtils\";\n\ninterface PreRenderingServiceParams {\n dbTableName: pulumi.Output<string>;\n dbTableHashKey: pulumi.Output<string>;\n dbTableRangeKey: pulumi.Output<string>;\n appUrl: pulumi.Output<string>;\n deliveryUrl: pulumi.Output<string>;\n bucket: pulumi.Output<string>;\n cloudfrontId: pulumi.Output<string>;\n}\n\nexport function createPrerenderingService(app: PulumiApp, params: PreRenderingServiceParams) {\n const queue = app.addResource(aws.sqs.Queue, {\n name: \"ps-render-queue\",\n config: {\n visibilityTimeoutSeconds: 300,\n fifoQueue: true\n }\n });\n\n const policy = createLambdaPolicy(app, queue.output, params);\n const renderer = createRenderer(app, queue.output, policy.output, params);\n const subscriber = createRenderSubscriber(app, policy.output, params);\n const flush = createFlushService(app, policy.output, params);\n const settings = createPrerenderingSettingsDbItem(app, queue.output, params);\n\n return {\n subscriber,\n renderer,\n flush,\n settings\n };\n}\n\nfunction createPrerenderingSettingsDbItem(\n app: PulumiApp,\n queue: pulumi.Output<aws.sqs.Queue>,\n params: PreRenderingServiceParams\n) {\n /**\n * To handle everything related to prerendering, we need the following information:\n * - appUrl - SPA URL used to prerender HTML\n * - bucket - name of the S3 bucket used for storage of HTML snapshots\n * - cloudfrontId - for cache invalidation\n * - sqsQueueUrl - an SQS queue for prerendering tasks (messages)\n */\n const tableItem = app.addResource(aws.dynamodb.TableItem, {\n name: \"psSettings\",\n config: {\n tableName: params.dbTableName,\n hashKey: params.dbTableHashKey,\n rangeKey: params.dbTableRangeKey,\n item: pulumi.interpolate`{\n \"PK\": \"PS#SETTINGS\",\n \"SK\": \"${app.params.run.variant || \"default\"}\",\n \"data\": {\n \"appUrl\": \"${params.appUrl}\",\n \"deliveryUrl\": \"${params.deliveryUrl}\",\n \"bucket\": \"${params.bucket}\",\n \"cloudfrontId\": \"${params.cloudfrontId}\",\n \"sqsQueueUrl\": \"${queue.url}\"\n }\n }`\n // We're using the native DynamoDB converter to avoid building those nested objects ourselves.\n .apply(v => JSON.stringify(Converter.marshall(JSON.parse(v))))\n }\n });\n\n return { tableItem };\n}\n\nfunction createRenderSubscriber(\n app: PulumiApp,\n policy: pulumi.Output<aws.iam.Policy>,\n params: PreRenderingServiceParams\n) {\n const core = app.getModule(CoreOutput);\n\n const role = createLambdaRole(app, {\n name: \"ps-render-subscriber-role\",\n policy: policy\n });\n\n const lambda = app.addResource(aws.lambda.Function, {\n name: \"ps-render-subscriber-lambda\",\n config: {\n role: role.output.arn,\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n timeout: 30,\n memorySize: 512,\n environment: {\n variables: getCommonLambdaEnvVariables().apply(value => ({\n ...value,\n DB_TABLE: params.dbTableName\n }))\n },\n description: \"Subscribes to render events on event bus\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.paths.workspace, \"prerendering/subscribe/build\")\n )\n }),\n vpcConfig: app.getModule(VpcConfig).functionVpcConfig\n }\n });\n\n /**\n * TODO: when we get to staged rollouts and variants, maybe we can create per-variant event rules,\n * to avoid invocation of all variant lambdas just to do a `detail-type` check and exit early.\n * That way, we would be publishing events scoped to a variant, like \"RenderPages-{variant}\".\n */\n\n const eventRule = app.addResource(aws.cloudwatch.EventRule, {\n name: \"ps-render-subscriber-event-rule\",\n config: {\n eventBusName: core.eventBusArn,\n eventPattern: JSON.stringify({\n \"detail-type\": [\"RenderPages\"]\n })\n }\n });\n\n const eventPermission = app.addResource(aws.lambda.Permission, {\n name: \"ps-render-subscriber-event-permission\",\n config: {\n action: \"lambda:InvokeFunction\",\n function: lambda.output.arn,\n principal: \"events.amazonaws.com\",\n sourceArn: eventRule.output.arn\n }\n });\n\n const eventTarget = app.addResource(aws.cloudwatch.EventTarget, {\n name: \"ps-render-subscriber-event-target\",\n config: {\n rule: eventRule.output.name,\n eventBusName: core.eventBusArn,\n arn: lambda.output.arn\n }\n });\n\n return {\n policy,\n role,\n lambda,\n eventRule,\n eventPermission,\n eventTarget\n };\n}\n\nfunction createRenderer(\n app: PulumiApp,\n queue: pulumi.Output<aws.sqs.Queue>,\n policy: pulumi.Output<aws.iam.Policy>,\n params: PreRenderingServiceParams\n) {\n const role = createLambdaRole(app, {\n name: \"ps-render-lambda-role\",\n policy: policy,\n executionRole: aws.iam.ManagedPolicy.AWSLambdaSQSQueueExecutionRole\n });\n\n const lambda = app.addResource(aws.lambda.Function, {\n name: \"ps-render-lambda\",\n config: {\n role: role.output.arn,\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n timeout: 300,\n memorySize: 2048,\n layers: [getLayerArn(\"shelf-io-chrome-aws-lambda-layer\")],\n environment: {\n variables: getCommonLambdaEnvVariables().apply(value => ({\n ...value,\n DB_TABLE: params.dbTableName\n }))\n },\n description: \"Renders pages and stores output in an S3 bucket of choice.\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.paths.workspace, \"prerendering/render/build\")\n )\n }),\n vpcConfig: app.getModule(VpcConfig).functionVpcConfig\n }\n });\n\n const eventSourceMapping = app.addResource(aws.lambda.EventSourceMapping, {\n name: \"ps-render-event-source-mapping\",\n config: {\n functionName: lambda.output.arn,\n eventSourceArn: queue.arn,\n batchSize: 1\n }\n });\n\n return {\n policy,\n role,\n lambda,\n eventSourceMapping\n };\n}\n\nfunction createFlushService(\n app: PulumiApp,\n policy: pulumi.Output<aws.iam.Policy>,\n params: PreRenderingServiceParams\n) {\n const core = app.getModule(CoreOutput);\n\n const role = createLambdaRole(app, {\n name: \"ps-flush-lambda-role\",\n policy: policy\n });\n\n const lambda = app.addResource(aws.lambda.Function, {\n name: \"ps-flush-lambda\",\n config: {\n role: role.output.arn,\n runtime: \"nodejs14.x\",\n handler: \"handler.handler\",\n timeout: 30,\n memorySize: 512,\n environment: {\n variables: getCommonLambdaEnvVariables().apply(value => ({\n ...value,\n DB_TABLE: params.dbTableName\n }))\n },\n description: \"Subscribes to flush events on event bus\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.paths.workspace, \"prerendering/flush/build\")\n )\n }),\n vpcConfig: app.getModule(VpcConfig).functionVpcConfig\n }\n });\n\n const eventRule = app.addResource(aws.cloudwatch.EventRule, {\n name: \"ps-flush-event-rule\",\n config: {\n eventBusName: core.eventBusArn,\n eventPattern: JSON.stringify({\n \"detail-type\": [\"FlushPages\"]\n })\n }\n });\n\n const eventPermission = app.addResource(aws.lambda.Permission, {\n name: \"ps-flush-event-permission\",\n config: {\n action: \"lambda:InvokeFunction\",\n function: lambda.output.arn,\n principal: \"events.amazonaws.com\",\n sourceArn: eventRule.output.arn\n }\n });\n\n const eventTarget = app.addResource(aws.cloudwatch.EventTarget, {\n name: \"ps-flush-event-target\",\n config: {\n rule: eventRule.output.name,\n eventBusName: core.eventBusArn,\n arn: lambda.output.arn\n }\n });\n\n return {\n policy,\n role,\n lambda,\n eventRule,\n eventPermission,\n eventTarget\n };\n}\n\nfunction createLambdaPolicy(\n app: PulumiApp,\n queue: pulumi.Output<aws.sqs.Queue>,\n params: PreRenderingServiceParams\n) {\n const core = app.getModule(CoreOutput);\n const awsAccountId = getAwsAccountId(app);\n\n return app.addResource(aws.iam.Policy, {\n name: \"ps-lambda-policy\",\n config: {\n description: \"This policy enables access to Lambda, S3, Cloudfront, SQS and Dynamodb\",\n policy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Sid: \"PermissionForDynamodb\",\n Effect: \"Allow\",\n Action: [\n \"dynamodb:BatchGetItem\",\n \"dynamodb:BatchWriteItem\",\n \"dynamodb:DeleteItem\",\n \"dynamodb:GetItem\",\n \"dynamodb:PutItem\",\n \"dynamodb:Query\",\n \"dynamodb:Scan\",\n \"dynamodb:UpdateItem\"\n ],\n Resource: core.apply(s => {\n // Add permissions to DynamoDB table\n const resources = [\n `${s.primaryDynamodbTableArn}`,\n `${s.primaryDynamodbTableArn}/*`\n ];\n\n // Attach permissions for elastic search dynamo as well (if ES is enabled).\n if (s.elasticsearchDynamodbTableArn) {\n resources.push(\n `${s.elasticsearchDynamodbTableArn}`,\n `${s.elasticsearchDynamodbTableArn}/*`\n );\n }\n\n return resources;\n })\n },\n {\n Sid: \"PermissionForS3\",\n Effect: \"Allow\",\n Action: [\"s3:DeleteObject\", \"s3:GetObject\", \"s3:PutObject\"],\n Resource: [pulumi.interpolate`arn:aws:s3:::${params.bucket}/*`]\n },\n {\n Sid: \"PermissionForCloudfront\",\n Effect: \"Allow\",\n Action: \"cloudfront:CreateInvalidation\",\n Resource: pulumi.interpolate`arn:aws:cloudfront::${awsAccountId}:distribution/*`\n },\n {\n Sid: \"PermissionForSQS\",\n Effect: \"Allow\",\n Action: [\"sqs:SendMessage\", \"sqs:SendMessageBatch\"],\n Resource: queue.arn\n }\n ]\n }\n }\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["path","_interopRequireWildcard","require","pulumi","aws","_dynamodb","_awsLayers","_lambdaUtils","_common","_awsUtils","_constants","createPrerenderingService","app","params","queue","addResource","sqs","Queue","name","config","visibilityTimeoutSeconds","fifoQueue","policy","createLambdaPolicy","output","renderer","createRenderer","subscriber","createRenderSubscriber","flush","createFlushService","settings","createPrerenderingSettingsDbItem","tableItem","dynamodb","TableItem","tableName","dbTableName","hashKey","dbTableHashKey","rangeKey","dbTableRangeKey","item","interpolate","run","variant","appUrl","deliveryUrl","bucket","cloudfrontId","url","apply","v","JSON","stringify","Converter","marshall","parse","core","getModule","CoreOutput","role","createLambdaRole","lambda","Function","arn","runtime","LAMBDA_RUNTIME","handler","timeout","memorySize","environment","variables","getCommonLambdaEnvVariables","value","_objectSpread2","default","DB_TABLE","description","code","asset","AssetArchive","FileArchive","join","paths","workspace","vpcConfig","VpcConfig","functionVpcConfig","eventRule","cloudwatch","EventRule","eventBusName","eventBusArn","eventPattern","eventPermission","Permission","action","function","principal","sourceArn","eventTarget","EventTarget","rule","executionRole","iam","ManagedPolicy","AWSLambdaSQSQueueExecutionRole","layers","getLayerArn","eventSourceMapping","EventSourceMapping","functionName","eventSourceArn","batchSize","awsAccountId","getAwsAccountId","Policy","Version","Statement","Sid","Effect","Action","Resource","s","resources","primaryDynamodbTableArn","elasticsearchDynamodbTableArn","push"],"sources":["WebsitePrerendering.ts"],"sourcesContent":["import * as path from \"path\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport { Converter } from \"aws-sdk/clients/dynamodb\";\n\nimport { PulumiApp } from \"@webiny/pulumi\";\n// @ts-ignore\nimport { getLayerArn } from \"@webiny/aws-layers\";\n\nimport { createLambdaRole, getCommonLambdaEnvVariables } from \"../lambdaUtils\";\nimport { CoreOutput, VpcConfig } from \"../common\";\nimport { getAwsAccountId } from \"../awsUtils\";\nimport { LAMBDA_RUNTIME } from \"~/constants\";\n\ninterface PreRenderingServiceParams {\n dbTableName: pulumi.Output<string>;\n dbTableHashKey: pulumi.Output<string>;\n dbTableRangeKey: pulumi.Output<string>;\n appUrl: pulumi.Output<string>;\n deliveryUrl: pulumi.Output<string>;\n bucket: pulumi.Output<string>;\n cloudfrontId: pulumi.Output<string>;\n}\n\nexport function createPrerenderingService(app: PulumiApp, params: PreRenderingServiceParams) {\n const queue = app.addResource(aws.sqs.Queue, {\n name: \"ps-render-queue\",\n config: {\n visibilityTimeoutSeconds: 300,\n fifoQueue: true\n }\n });\n\n const policy = createLambdaPolicy(app, queue.output, params);\n const renderer = createRenderer(app, queue.output, policy.output, params);\n const subscriber = createRenderSubscriber(app, policy.output, params);\n const flush = createFlushService(app, policy.output, params);\n const settings = createPrerenderingSettingsDbItem(app, queue.output, params);\n\n return {\n subscriber,\n renderer,\n flush,\n settings\n };\n}\n\nfunction createPrerenderingSettingsDbItem(\n app: PulumiApp,\n queue: pulumi.Output<aws.sqs.Queue>,\n params: PreRenderingServiceParams\n) {\n /**\n * To handle everything related to prerendering, we need the following information:\n * - appUrl - SPA URL used to prerender HTML\n * - bucket - name of the S3 bucket used for storage of HTML snapshots\n * - cloudfrontId - for cache invalidation\n * - sqsQueueUrl - an SQS queue for prerendering tasks (messages)\n */\n const tableItem = app.addResource(aws.dynamodb.TableItem, {\n name: \"psSettings\",\n config: {\n tableName: params.dbTableName,\n hashKey: params.dbTableHashKey,\n rangeKey: params.dbTableRangeKey,\n item: pulumi.interpolate`{\n \"PK\": \"PS#SETTINGS\",\n \"SK\": \"${app.params.run.variant || \"default\"}\",\n \"data\": {\n \"appUrl\": \"${params.appUrl}\",\n \"deliveryUrl\": \"${params.deliveryUrl}\",\n \"bucket\": \"${params.bucket}\",\n \"cloudfrontId\": \"${params.cloudfrontId}\",\n \"sqsQueueUrl\": \"${queue.url}\"\n }\n }`\n // We're using the native DynamoDB converter to avoid building those nested objects ourselves.\n .apply(v => JSON.stringify(Converter.marshall(JSON.parse(v))))\n }\n });\n\n return { tableItem };\n}\n\nfunction createRenderSubscriber(\n app: PulumiApp,\n policy: pulumi.Output<aws.iam.Policy>,\n params: PreRenderingServiceParams\n) {\n const core = app.getModule(CoreOutput);\n\n const role = createLambdaRole(app, {\n name: \"ps-render-subscriber-role\",\n policy: policy\n });\n\n const lambda = app.addResource(aws.lambda.Function, {\n name: \"ps-render-subscriber-lambda\",\n config: {\n role: role.output.arn,\n runtime: LAMBDA_RUNTIME,\n handler: \"handler.handler\",\n timeout: 30,\n memorySize: 512,\n environment: {\n variables: getCommonLambdaEnvVariables().apply(value => ({\n ...value,\n DB_TABLE: params.dbTableName\n }))\n },\n description: \"Subscribes to render events on event bus\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.paths.workspace, \"prerendering/subscribe/build\")\n )\n }),\n vpcConfig: app.getModule(VpcConfig).functionVpcConfig\n }\n });\n\n /**\n * TODO: when we get to staged rollouts and variants, maybe we can create per-variant event rules,\n * to avoid invocation of all variant lambdas just to do a `detail-type` check and exit early.\n * That way, we would be publishing events scoped to a variant, like \"RenderPages-{variant}\".\n */\n\n const eventRule = app.addResource(aws.cloudwatch.EventRule, {\n name: \"ps-render-subscriber-event-rule\",\n config: {\n eventBusName: core.eventBusArn,\n eventPattern: JSON.stringify({\n \"detail-type\": [\"RenderPages\"]\n })\n }\n });\n\n const eventPermission = app.addResource(aws.lambda.Permission, {\n name: \"ps-render-subscriber-event-permission\",\n config: {\n action: \"lambda:InvokeFunction\",\n function: lambda.output.arn,\n principal: \"events.amazonaws.com\",\n sourceArn: eventRule.output.arn\n }\n });\n\n const eventTarget = app.addResource(aws.cloudwatch.EventTarget, {\n name: \"ps-render-subscriber-event-target\",\n config: {\n rule: eventRule.output.name,\n eventBusName: core.eventBusArn,\n arn: lambda.output.arn\n }\n });\n\n return {\n policy,\n role,\n lambda,\n eventRule,\n eventPermission,\n eventTarget\n };\n}\n\nfunction createRenderer(\n app: PulumiApp,\n queue: pulumi.Output<aws.sqs.Queue>,\n policy: pulumi.Output<aws.iam.Policy>,\n params: PreRenderingServiceParams\n) {\n const role = createLambdaRole(app, {\n name: \"ps-render-lambda-role\",\n policy: policy,\n executionRole: aws.iam.ManagedPolicy.AWSLambdaSQSQueueExecutionRole\n });\n\n const lambda = app.addResource(aws.lambda.Function, {\n name: \"ps-render-lambda\",\n config: {\n role: role.output.arn,\n runtime: LAMBDA_RUNTIME,\n handler: \"handler.handler\",\n timeout: 300,\n memorySize: 2048,\n layers: [getLayerArn(\"shelf-io-chrome-aws-lambda-layer\")],\n environment: {\n variables: getCommonLambdaEnvVariables().apply(value => ({\n ...value,\n DB_TABLE: params.dbTableName\n }))\n },\n description: \"Renders pages and stores output in an S3 bucket of choice.\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.paths.workspace, \"prerendering/render/build\")\n )\n }),\n vpcConfig: app.getModule(VpcConfig).functionVpcConfig\n }\n });\n\n const eventSourceMapping = app.addResource(aws.lambda.EventSourceMapping, {\n name: \"ps-render-event-source-mapping\",\n config: {\n functionName: lambda.output.arn,\n eventSourceArn: queue.arn,\n batchSize: 1\n }\n });\n\n return {\n policy,\n role,\n lambda,\n eventSourceMapping\n };\n}\n\nfunction createFlushService(\n app: PulumiApp,\n policy: pulumi.Output<aws.iam.Policy>,\n params: PreRenderingServiceParams\n) {\n const core = app.getModule(CoreOutput);\n\n const role = createLambdaRole(app, {\n name: \"ps-flush-lambda-role\",\n policy: policy\n });\n\n const lambda = app.addResource(aws.lambda.Function, {\n name: \"ps-flush-lambda\",\n config: {\n role: role.output.arn,\n runtime: LAMBDA_RUNTIME,\n handler: \"handler.handler\",\n timeout: 30,\n memorySize: 512,\n environment: {\n variables: getCommonLambdaEnvVariables().apply(value => ({\n ...value,\n DB_TABLE: params.dbTableName\n }))\n },\n description: \"Subscribes to flush events on event bus\",\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.paths.workspace, \"prerendering/flush/build\")\n )\n }),\n vpcConfig: app.getModule(VpcConfig).functionVpcConfig\n }\n });\n\n const eventRule = app.addResource(aws.cloudwatch.EventRule, {\n name: \"ps-flush-event-rule\",\n config: {\n eventBusName: core.eventBusArn,\n eventPattern: JSON.stringify({\n \"detail-type\": [\"FlushPages\"]\n })\n }\n });\n\n const eventPermission = app.addResource(aws.lambda.Permission, {\n name: \"ps-flush-event-permission\",\n config: {\n action: \"lambda:InvokeFunction\",\n function: lambda.output.arn,\n principal: \"events.amazonaws.com\",\n sourceArn: eventRule.output.arn\n }\n });\n\n const eventTarget = app.addResource(aws.cloudwatch.EventTarget, {\n name: \"ps-flush-event-target\",\n config: {\n rule: eventRule.output.name,\n eventBusName: core.eventBusArn,\n arn: lambda.output.arn\n }\n });\n\n return {\n policy,\n role,\n lambda,\n eventRule,\n eventPermission,\n eventTarget\n };\n}\n\nfunction createLambdaPolicy(\n app: PulumiApp,\n queue: pulumi.Output<aws.sqs.Queue>,\n params: PreRenderingServiceParams\n) {\n const core = app.getModule(CoreOutput);\n const awsAccountId = getAwsAccountId(app);\n\n return app.addResource(aws.iam.Policy, {\n name: \"ps-lambda-policy\",\n config: {\n description: \"This policy enables access to Lambda, S3, Cloudfront, SQS and Dynamodb\",\n policy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Sid: \"PermissionForDynamodb\",\n Effect: \"Allow\",\n Action: [\n \"dynamodb:BatchGetItem\",\n \"dynamodb:BatchWriteItem\",\n \"dynamodb:DeleteItem\",\n \"dynamodb:GetItem\",\n \"dynamodb:PutItem\",\n \"dynamodb:Query\",\n \"dynamodb:Scan\",\n \"dynamodb:UpdateItem\"\n ],\n Resource: core.apply(s => {\n // Add permissions to DynamoDB table\n const resources = [\n `${s.primaryDynamodbTableArn}`,\n `${s.primaryDynamodbTableArn}/*`\n ];\n\n // Attach permissions for elastic search dynamo as well (if ES is enabled).\n if (s.elasticsearchDynamodbTableArn) {\n resources.push(\n `${s.elasticsearchDynamodbTableArn}`,\n `${s.elasticsearchDynamodbTableArn}/*`\n );\n }\n\n return resources;\n })\n },\n {\n Sid: \"PermissionForS3\",\n Effect: \"Allow\",\n Action: [\"s3:DeleteObject\", \"s3:GetObject\", \"s3:PutObject\"],\n Resource: [pulumi.interpolate`arn:aws:s3:::${params.bucket}/*`]\n },\n {\n Sid: \"PermissionForCloudfront\",\n Effect: \"Allow\",\n Action: \"cloudfront:CreateInvalidation\",\n Resource: pulumi.interpolate`arn:aws:cloudfront::${awsAccountId}:distribution/*`\n },\n {\n Sid: \"PermissionForSQS\",\n Effect: \"Allow\",\n Action: [\"sqs:SendMessage\", \"sqs:SendMessageBatch\"],\n Resource: queue.arn\n }\n ]\n }\n }\n });\n}\n"],"mappings":"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"}
|
|
@@ -43,6 +43,11 @@ export declare const createWebsitePulumiApp: (projectAppParams?: CreateWebsitePu
|
|
|
43
43
|
eventPermission: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/lambda/permission").Permission>;
|
|
44
44
|
eventTarget: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/cloudwatch/eventTarget").EventTarget>;
|
|
45
45
|
};
|
|
46
|
+
/**
|
|
47
|
+
* Treats provided environments as production environments, which
|
|
48
|
+
* are deployed in production deployment mode.
|
|
49
|
+
* https://www.webiny.com/docs/architecture/deployment-modes/production
|
|
50
|
+
*/
|
|
46
51
|
renderer: {
|
|
47
52
|
policy: pulumi.Output<import("@pulumi/aws/iam/policy").Policy>;
|
|
48
53
|
role: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/iam/role").Role>;
|
|
@@ -59,11 +64,7 @@ export declare const createWebsitePulumiApp: (projectAppParams?: CreateWebsitePu
|
|
|
59
64
|
};
|
|
60
65
|
settings: {
|
|
61
66
|
tableItem: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/dynamodb/tableItem").TableItem>;
|
|
62
|
-
};
|
|
63
|
-
* Treats provided environments as production environments, which
|
|
64
|
-
* are deployed in production deployment mode.
|
|
65
|
-
* https://www.webiny.com/docs/architecture/deployment-modes/production
|
|
66
|
-
*/
|
|
67
|
+
};
|
|
67
68
|
};
|
|
68
69
|
preview: {
|
|
69
70
|
cloudfront: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/cloudfront/distribution").Distribution>;
|
|
@@ -258,4 +258,6 @@ const createWebsitePulumiApp = (projectAppParams = {}) => {
|
|
|
258
258
|
});
|
|
259
259
|
return (0, _utils.withCommonLambdaEnvVariables)(app);
|
|
260
260
|
};
|
|
261
|
-
exports.createWebsitePulumiApp = createWebsitePulumiApp;
|
|
261
|
+
exports.createWebsitePulumiApp = createWebsitePulumiApp;
|
|
262
|
+
|
|
263
|
+
//# sourceMappingURL=createWebsitePulumiApp.js.map
|
package/apps/website/index.js
CHANGED
|
@@ -11,6 +11,7 @@ var _fs = require("fs");
|
|
|
11
11
|
var pulumi = _interopRequireWildcard(require("@pulumi/pulumi"));
|
|
12
12
|
var aws = _interopRequireWildcard(require("@pulumi/aws"));
|
|
13
13
|
var _utils = require("@webiny/cli-plugin-deploy-pulumi/utils");
|
|
14
|
+
var _constants = require("../../constants");
|
|
14
15
|
function createFunctionArchive({
|
|
15
16
|
dynamoDbTable,
|
|
16
17
|
region
|
|
@@ -69,7 +70,7 @@ class WebsiteTenantRouter extends pulumi.ComponentResource {
|
|
|
69
70
|
});
|
|
70
71
|
this.originRequest = new aws.lambda.Function(`${name}-origin-request`, {
|
|
71
72
|
publish: true,
|
|
72
|
-
runtime:
|
|
73
|
+
runtime: _constants.LAMBDA_RUNTIME,
|
|
73
74
|
handler: "index.handler",
|
|
74
75
|
role: role.arn,
|
|
75
76
|
timeout: 5,
|
|
@@ -85,4 +86,6 @@ class WebsiteTenantRouter extends pulumi.ComponentResource {
|
|
|
85
86
|
this.registerOutputs();
|
|
86
87
|
}
|
|
87
88
|
}
|
|
88
|
-
exports.WebsiteTenantRouter = WebsiteTenantRouter;
|
|
89
|
+
exports.WebsiteTenantRouter = WebsiteTenantRouter;
|
|
90
|
+
|
|
91
|
+
//# sourceMappingURL=WebsiteTenantRouter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_fs","require","pulumi","_interopRequireWildcard","aws","_utils","createFunctionArchive","dynamoDbTable","region","handler","readFileSync","__dirname","source","replace","asset","AssetArchive","StringAsset","WebsiteTenantRouter","ComponentResource","constructor","name","config","opts","_defineProperty2","default","getStackOutput","folder","apiFolder","env","apiEnv","String","process","WEBINY_ENV","inlinePolicies","Promise","all","getCallerIdentity","then","callerIdentity","policy","JSON","stringify","Version","Statement","Sid","Effect","Action","Resource","accountId","role","iam","Role","managedPolicyArns","ManagedPolicies","AWSLambdaBasicExecutionRole","assumeRolePolicy","Principal","Principals","LambdaPrincipal","EdgeLambdaPrincipal","parent","awsUsEast1","Provider","originRequest","lambda","Function","publish","runtime","arn","timeout","memorySize","code","provider","registerOutputs","exports"],"sources":["WebsiteTenantRouter.ts"],"sourcesContent":["import { readFileSync } from \"fs\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport { getStackOutput } from \"@webiny/cli-plugin-deploy-pulumi/utils\";\n\ninterface Config {\n apiFolder?: string;\n apiEnv?: string;\n}\n\ninterface Params {\n region: string;\n dynamoDbTable: string;\n}\n\nfunction createFunctionArchive({ dynamoDbTable, region }: Params) {\n const handler = readFileSync(__dirname + \"/functions/origin/request.js\", \"utf-8\");\n\n const source = handler\n .replace(\"{DB_TABLE_NAME}\", dynamoDbTable)\n .replace(\"{DB_TABLE_REGION}\", region);\n\n return new pulumi.asset.AssetArchive({\n \"index.js\": new pulumi.asset.StringAsset(source)\n });\n}\n\nexport class WebsiteTenantRouter extends pulumi.ComponentResource {\n public readonly originRequest: aws.lambda.Function;\n\n constructor(name: string, config: Config = {}, opts = {}) {\n super(\"webiny:aws:WebsiteTenantRouter\", name, {}, opts);\n\n const { region, dynamoDbTable } = getStackOutput<{ region: string; dynamoDbTable: string }>(\n {\n folder: config.apiFolder || \"api\",\n env: config.apiEnv || String(process.env.WEBINY_ENV)\n }\n );\n\n const inlinePolicies = Promise.all([aws.getCallerIdentity({})]).then(([callerIdentity]) => [\n {\n name: \"dynamodb-policy\",\n policy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [\n {\n Sid: \"PermissionForDynamodb\",\n Effect: \"Allow\",\n Action: [\"dynamodb:GetItem\", \"dynamodb:Query\"],\n Resource: [\n `arn:aws:dynamodb:${region}:${callerIdentity.accountId}:table/${dynamoDbTable}`,\n `arn:aws:dynamodb:${region}:${callerIdentity.accountId}:table/${dynamoDbTable}/*`\n ]\n }\n ]\n })\n }\n ]);\n\n const role = new aws.iam.Role(\n `${name}-role`,\n {\n inlinePolicies,\n managedPolicyArns: [aws.iam.ManagedPolicies.AWSLambdaBasicExecutionRole],\n assumeRolePolicy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Action: \"sts:AssumeRole\",\n Principal: aws.iam.Principals.LambdaPrincipal,\n Effect: \"Allow\"\n },\n {\n Action: \"sts:AssumeRole\",\n Principal: aws.iam.Principals.EdgeLambdaPrincipal,\n Effect: \"Allow\"\n }\n ]\n }\n },\n { parent: this }\n );\n\n // Some resources _must_ be put in us-east-1, such as Lambda at Edge.\n const awsUsEast1 = new aws.Provider(\"us-east-1\", { region: \"us-east-1\" });\n\n this.originRequest = new aws.lambda.Function(\n `${name}-origin-request`,\n {\n publish: true,\n runtime:
|
|
1
|
+
{"version":3,"names":["_fs","require","pulumi","_interopRequireWildcard","aws","_utils","_constants","createFunctionArchive","dynamoDbTable","region","handler","readFileSync","__dirname","source","replace","asset","AssetArchive","StringAsset","WebsiteTenantRouter","ComponentResource","constructor","name","config","opts","_defineProperty2","default","getStackOutput","folder","apiFolder","env","apiEnv","String","process","WEBINY_ENV","inlinePolicies","Promise","all","getCallerIdentity","then","callerIdentity","policy","JSON","stringify","Version","Statement","Sid","Effect","Action","Resource","accountId","role","iam","Role","managedPolicyArns","ManagedPolicies","AWSLambdaBasicExecutionRole","assumeRolePolicy","Principal","Principals","LambdaPrincipal","EdgeLambdaPrincipal","parent","awsUsEast1","Provider","originRequest","lambda","Function","publish","runtime","LAMBDA_RUNTIME","arn","timeout","memorySize","code","provider","registerOutputs","exports"],"sources":["WebsiteTenantRouter.ts"],"sourcesContent":["import { readFileSync } from \"fs\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport { getStackOutput } from \"@webiny/cli-plugin-deploy-pulumi/utils\";\nimport { LAMBDA_RUNTIME } from \"~/constants\";\n\ninterface Config {\n apiFolder?: string;\n apiEnv?: string;\n}\n\ninterface Params {\n region: string;\n dynamoDbTable: string;\n}\n\nfunction createFunctionArchive({ dynamoDbTable, region }: Params) {\n const handler = readFileSync(__dirname + \"/functions/origin/request.js\", \"utf-8\");\n\n const source = handler\n .replace(\"{DB_TABLE_NAME}\", dynamoDbTable)\n .replace(\"{DB_TABLE_REGION}\", region);\n\n return new pulumi.asset.AssetArchive({\n \"index.js\": new pulumi.asset.StringAsset(source)\n });\n}\n\nexport class WebsiteTenantRouter extends pulumi.ComponentResource {\n public readonly originRequest: aws.lambda.Function;\n\n constructor(name: string, config: Config = {}, opts = {}) {\n super(\"webiny:aws:WebsiteTenantRouter\", name, {}, opts);\n\n const { region, dynamoDbTable } = getStackOutput<{ region: string; dynamoDbTable: string }>(\n {\n folder: config.apiFolder || \"api\",\n env: config.apiEnv || String(process.env.WEBINY_ENV)\n }\n );\n\n const inlinePolicies = Promise.all([aws.getCallerIdentity({})]).then(([callerIdentity]) => [\n {\n name: \"dynamodb-policy\",\n policy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [\n {\n Sid: \"PermissionForDynamodb\",\n Effect: \"Allow\",\n Action: [\"dynamodb:GetItem\", \"dynamodb:Query\"],\n Resource: [\n `arn:aws:dynamodb:${region}:${callerIdentity.accountId}:table/${dynamoDbTable}`,\n `arn:aws:dynamodb:${region}:${callerIdentity.accountId}:table/${dynamoDbTable}/*`\n ]\n }\n ]\n })\n }\n ]);\n\n const role = new aws.iam.Role(\n `${name}-role`,\n {\n inlinePolicies,\n managedPolicyArns: [aws.iam.ManagedPolicies.AWSLambdaBasicExecutionRole],\n assumeRolePolicy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Action: \"sts:AssumeRole\",\n Principal: aws.iam.Principals.LambdaPrincipal,\n Effect: \"Allow\"\n },\n {\n Action: \"sts:AssumeRole\",\n Principal: aws.iam.Principals.EdgeLambdaPrincipal,\n Effect: \"Allow\"\n }\n ]\n }\n },\n { parent: this }\n );\n\n // Some resources _must_ be put in us-east-1, such as Lambda at Edge.\n const awsUsEast1 = new aws.Provider(\"us-east-1\", { region: \"us-east-1\" });\n\n this.originRequest = new aws.lambda.Function(\n `${name}-origin-request`,\n {\n publish: true,\n runtime: LAMBDA_RUNTIME,\n handler: \"index.handler\",\n role: role.arn,\n timeout: 5,\n memorySize: 128,\n code: createFunctionArchive({ region, dynamoDbTable })\n },\n { provider: awsUsEast1, parent: this }\n );\n\n this.registerOutputs();\n }\n}\n"],"mappings":"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"}
|
package/constants.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const LAMBDA_RUNTIME: "nodejs16.x";
|
package/constants.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.LAMBDA_RUNTIME = void 0;
|
|
7
|
+
var _aws = require("@pulumi/aws");
|
|
8
|
+
const LAMBDA_RUNTIME = _aws.lambda.Runtime.NodeJS16dX;
|
|
9
|
+
exports.LAMBDA_RUNTIME = LAMBDA_RUNTIME;
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=constants.js.map
|
package/constants.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_aws","require","LAMBDA_RUNTIME","lambda","Runtime","NodeJS16dX","exports"],"sources":["constants.ts"],"sourcesContent":["import { lambda } from \"@pulumi/aws\";\n\nexport const LAMBDA_RUNTIME = lambda.Runtime.NodeJS16dX;\n"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AAEO,MAAMC,cAAc,GAAGC,WAAM,CAACC,OAAO,CAACC,UAAU;AAACC,OAAA,CAAAJ,cAAA,GAAAA,cAAA"}
|
|
@@ -21,4 +21,6 @@ Object.defineProperty(exports, "createAdminPulumiApp", {
|
|
|
21
21
|
return _createAdminPulumiApp.createAdminPulumiApp;
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
|
-
var _createAdminPulumiApp = require("../apps/admin/createAdminPulumiApp");
|
|
24
|
+
var _createAdminPulumiApp = require("../apps/admin/createAdminPulumiApp");
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=createAdminPulumiApp.js.map
|
|
@@ -69,4 +69,6 @@ function createApiPulumiApp(projectAppParams = {}) {
|
|
|
69
69
|
return (_projectAppParams$pul2 = projectAppParams.pulumi) === null || _projectAppParams$pul2 === void 0 ? void 0 : _projectAppParams$pul2.call(projectAppParams, ...args);
|
|
70
70
|
}
|
|
71
71
|
}));
|
|
72
|
-
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
//# sourceMappingURL=createApiPulumiApp.js.map
|
|
@@ -143,4 +143,6 @@ function createCorePulumiApp(projectAppParams = {}) {
|
|
|
143
143
|
return (_projectAppParams$pul3 = projectAppParams.pulumi) === null || _projectAppParams$pul3 === void 0 ? void 0 : _projectAppParams$pul3.call(projectAppParams, ...args);
|
|
144
144
|
}
|
|
145
145
|
}));
|
|
146
|
-
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
//# sourceMappingURL=createCorePulumiApp.js.map
|
|
@@ -67,4 +67,6 @@ function createWebsitePulumiApp(projectAppParams = {}) {
|
|
|
67
67
|
return (_projectAppParams$pul2 = projectAppParams.pulumi) === null || _projectAppParams$pul2 === void 0 ? void 0 : _projectAppParams$pul2.call(projectAppParams, ...args);
|
|
68
68
|
}
|
|
69
69
|
}));
|
|
70
|
-
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=createWebsitePulumiApp.js.map
|
package/enterprise/index.js
CHANGED
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -36,4 +36,18 @@ Object.keys(_utils).forEach(function (key) {
|
|
|
36
36
|
return _utils[key];
|
|
37
37
|
}
|
|
38
38
|
});
|
|
39
|
-
});
|
|
39
|
+
});
|
|
40
|
+
var _constants = require("./constants");
|
|
41
|
+
Object.keys(_constants).forEach(function (key) {
|
|
42
|
+
if (key === "default" || key === "__esModule") return;
|
|
43
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
44
|
+
if (key in exports && exports[key] === _constants[key]) return;
|
|
45
|
+
Object.defineProperty(exports, key, {
|
|
46
|
+
enumerable: true,
|
|
47
|
+
get: function () {
|
|
48
|
+
return _constants[key];
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_WebsiteTenantRouter","require","_apps","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_utils"],"sources":["index.ts"],"sourcesContent":["export { WebsiteTenantRouter } from \"./components/tenantRouter/WebsiteTenantRouter\";\nexport * from \"./apps\";\nexport * from \"./utils\";\n"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,oBAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAF,KAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,KAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,KAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,MAAA,GAAAd,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAW,MAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,MAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,MAAA,CAAAT,GAAA;IAAA;EAAA;AAAA"}
|
|
1
|
+
{"version":3,"names":["_WebsiteTenantRouter","require","_apps","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_utils","_constants"],"sources":["index.ts"],"sourcesContent":["export { WebsiteTenantRouter } from \"./components/tenantRouter/WebsiteTenantRouter\";\nexport * from \"./apps\";\nexport * from \"./utils\";\nexport * from \"./constants\";\n"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,oBAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAF,KAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,KAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,KAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,MAAA,GAAAd,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAW,MAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,MAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,MAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AACA,IAAAU,UAAA,GAAAf,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAY,UAAA,EAAAX,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAU,UAAA,CAAAV,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,UAAA,CAAAV,GAAA;IAAA;EAAA;AAAA"}
|