@webiny/pulumi-aws 5.29.0 → 5.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/apps/admin/createAdminPulumiApp.d.ts +3 -2
  2. package/apps/admin/createAdminPulumiApp.js +11 -8
  3. package/apps/admin/createAdminPulumiApp.js.map +1 -1
  4. package/apps/api/ApiApwScheduler.js +3 -3
  5. package/apps/api/ApiApwScheduler.js.map +1 -1
  6. package/apps/api/ApiFileManager.js +6 -6
  7. package/apps/api/ApiFileManager.js.map +1 -1
  8. package/apps/api/ApiGraphql.d.ts +3 -0
  9. package/apps/api/ApiGraphql.js +25 -2
  10. package/apps/api/ApiGraphql.js.map +1 -1
  11. package/apps/api/ApiHeadlessCMS.js +2 -2
  12. package/apps/api/ApiHeadlessCMS.js.map +1 -1
  13. package/apps/api/ApiPageBuilder.js +8 -8
  14. package/apps/api/ApiPageBuilder.js.map +1 -1
  15. package/apps/api/createApiPulumiApp.d.ts +17 -2
  16. package/apps/api/createApiPulumiApp.js +31 -10
  17. package/apps/api/createApiPulumiApp.js.map +1 -1
  18. package/apps/core/createCorePulumiApp.d.ts +2 -1
  19. package/apps/core/createCorePulumiApp.js +8 -5
  20. package/apps/core/createCorePulumiApp.js.map +1 -1
  21. package/apps/lambdaUtils.d.ts +1 -2
  22. package/apps/lambdaUtils.js +17 -22
  23. package/apps/lambdaUtils.js.map +1 -1
  24. package/apps/website/WebsitePrerendering.js +6 -6
  25. package/apps/website/WebsitePrerendering.js.map +1 -1
  26. package/apps/website/createWebsitePulumiApp.d.ts +3 -2
  27. package/apps/website/createWebsitePulumiApp.js +14 -10
  28. package/apps/website/createWebsitePulumiApp.js.map +1 -1
  29. package/package.json +9 -9
  30. package/utils/index.d.ts +1 -0
  31. package/utils/index.js +21 -1
  32. package/utils/index.js.map +1 -1
  33. package/utils/lambdaEnvVariables.d.ts +20 -0
  34. package/utils/lambdaEnvVariables.js +82 -0
  35. package/utils/lambdaEnvVariables.js.map +1 -0
@@ -1 +1 @@
1
- {"version":3,"names":["createPrerenderingService","app","params","queue","addResource","aws","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","pulumi","interpolate","run","variant","appUrl","deliveryUrl","bucket","cloudfrontId","url","apply","v","JSON","stringify","Converter","marshall","parse","core","getModule","CoreOutput","role","createLambdaRole","executionRole","iam","ManagedPolicy","AWSLambdaBasicExecutionRole","lambda","Function","arn","runtime","handler","timeout","memorySize","environment","variables","getCommonLambdaEnvVariables","DB_TABLE","description","code","asset","AssetArchive","FileArchive","path","join","paths","workspace","vpcConfig","VpcConfig","functionVpcConfig","eventRule","cloudwatch","EventRule","eventBusName","eventBusArn","eventPattern","eventPermission","Permission","action","function","principal","sourceArn","eventTarget","EventTarget","rule","AWSLambdaSQSQueueExecutionRole","layers","getLayerArn","eventSourceMapping","EventSourceMapping","functionName","eventSourceArn","batchSize","awsAccountId","getAwsAccountId","Policy","Version","Statement","Sid","Effect","Action","Resource","s","resources","primaryDynamodbTableArn","elasticsearchDynamodbTableArn","push","fileManagerBucketId"],"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);\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 executionRole: aws.iam.ManagedPolicy.AWSLambdaBasicExecutionRole\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: {\n ...getCommonLambdaEnvVariables(),\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: {\n ...getCommonLambdaEnvVariables(),\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 executionRole: aws.iam.ManagedPolicy.AWSLambdaBasicExecutionRole\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: {\n ...getCommonLambdaEnvVariables(),\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(app: PulumiApp, queue: pulumi.Output<aws.sqs.Queue>) {\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: [\n \"s3:DeleteObject\",\n \"s3:GetObject\",\n \"s3:GetObjectAcl\",\n \"s3:PutObject\",\n \"s3:PutObjectAcl\"\n ],\n Resource: [\n pulumi.interpolate`arn:aws:s3:::${core.fileManagerBucketId}/*`,\n /**\n * We're using the hard-coded value for \"delivery\" S3 bucket because;\n * It is created during deployment of the `apps/website` stack which is after the api stack,\n * so, we don't know its ARN.\n */\n \"arn:aws:s3:::delivery-*/*\"\n ]\n },\n {\n Sid: \"PermissionForCloudfront\",\n Effect: \"Allow\",\n Action: \"cloudfront:CreateInvalidation\",\n Resource: pulumi.interpolate`arn:aws:cloudfront::${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":["createPrerenderingService","app","params","queue","addResource","aws","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","pulumi","interpolate","run","variant","appUrl","deliveryUrl","bucket","cloudfrontId","url","apply","v","JSON","stringify","Converter","marshall","parse","core","getModule","CoreOutput","role","createLambdaRole","executionRole","iam","ManagedPolicy","AWSLambdaBasicExecutionRole","lambda","Function","arn","runtime","handler","timeout","memorySize","environment","variables","getCommonLambdaEnvVariables","value","DB_TABLE","description","code","asset","AssetArchive","FileArchive","path","join","paths","workspace","vpcConfig","VpcConfig","functionVpcConfig","eventRule","cloudwatch","EventRule","eventBusName","eventBusArn","eventPattern","eventPermission","Permission","action","function","principal","sourceArn","eventTarget","EventTarget","rule","AWSLambdaSQSQueueExecutionRole","layers","getLayerArn","eventSourceMapping","EventSourceMapping","functionName","eventSourceArn","batchSize","awsAccountId","getAwsAccountId","Policy","Version","Statement","Sid","Effect","Action","Resource","s","resources","primaryDynamodbTableArn","elasticsearchDynamodbTableArn","push","fileManagerBucketId"],"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);\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 executionRole: aws.iam.ManagedPolicy.AWSLambdaBasicExecutionRole\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 executionRole: aws.iam.ManagedPolicy.AWSLambdaBasicExecutionRole\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(app: PulumiApp, queue: pulumi.Output<aws.sqs.Queue>) {\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: [\n \"s3:DeleteObject\",\n \"s3:GetObject\",\n \"s3:GetObjectAcl\",\n \"s3:PutObject\",\n \"s3:PutObjectAcl\"\n ],\n Resource: [\n pulumi.interpolate`arn:aws:s3:::${core.fileManagerBucketId}/*`,\n /**\n * We're using the hard-coded value for \"delivery\" S3 bucket because;\n * It is created during deployment of the `apps/website` stack which is after the api stack,\n * so, we don't know its ARN.\n */\n \"arn:aws:s3:::delivery-*/*\"\n ]\n },\n {\n Sid: \"PermissionForCloudfront\",\n Effect: \"Allow\",\n Action: \"cloudfront:CreateInvalidation\",\n Resource: pulumi.interpolate`arn:aws:cloudfront::${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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"}
@@ -2,6 +2,7 @@ import * as pulumi from "@pulumi/pulumi";
2
2
  import * as aws from "@pulumi/aws";
3
3
  import { PulumiAppParamCallback, PulumiAppParam } from "@webiny/pulumi";
4
4
  import { CustomDomainParams } from "../customDomain";
5
+ export declare type WebsitePulumiApp = ReturnType<typeof createWebsitePulumiApp>;
5
6
  export interface CreateWebsitePulumiAppParams {
6
7
  /** Custom domain configuration */
7
8
  domains?: PulumiAppParamCallback<CustomDomainParams>;
@@ -14,7 +15,7 @@ export interface CreateWebsitePulumiAppParams {
14
15
  * Provides a way to adjust existing Pulumi code (cloud infrastructure resources)
15
16
  * or add additional ones into the mix.
16
17
  */
17
- pulumi?: (app: ReturnType<typeof createWebsitePulumiApp>) => void | Promise<void>;
18
+ pulumi?: (app: WebsitePulumiApp) => void | Promise<void>;
18
19
  }
19
20
  export declare const createWebsitePulumiApp: (projectAppParams?: CreateWebsitePulumiAppParams) => import("@webiny/pulumi").PulumiApp<{
20
21
  prerendering: {
@@ -54,4 +55,4 @@ export declare const createWebsitePulumiApp: (projectAppParams?: CreateWebsitePu
54
55
  bucket: import("@webiny/pulumi").PulumiAppResource<typeof aws.s3.Bucket>;
55
56
  origin: aws.types.input.cloudfront.DistributionOrigin;
56
57
  };
57
- }>;
58
+ }> & import("../lambdaUtils").WithCommonLambdaEnvVariables;
@@ -21,7 +21,7 @@ var _customDomain = require("../customDomain");
21
21
 
22
22
  var _WebsitePrerendering = require("./WebsitePrerendering");
23
23
 
24
- var _common = require("../common");
24
+ var _ = require("./..");
25
25
 
26
26
  var _utils = require("../../utils");
27
27
 
@@ -36,15 +36,23 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
36
36
  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; }
37
37
 
38
38
  const createWebsitePulumiApp = (projectAppParams = {}) => {
39
- return (0, _pulumi2.createPulumiApp)({
39
+ const app = (0, _pulumi2.createPulumiApp)({
40
40
  name: "website",
41
41
  path: "apps/website",
42
42
  config: projectAppParams,
43
43
  program: async app => {
44
- // Register core output as a module available for all other modules
45
- const core = app.addModule(_common.CoreOutput); // Register VPC config module to be available to other modules
44
+ // Overrides must be applied via a handler, registered at the very start of the program.
45
+ // By doing this, we're ensuring user's adjustments are not applied to late.
46
+ if (projectAppParams.pulumi) {
47
+ app.addHandler(() => {
48
+ return projectAppParams.pulumi(app);
49
+ });
50
+ } // Register core output as a module available for all other modules
51
+
46
52
 
47
- app.addModule(_common.VpcConfig, {
53
+ const core = app.addModule(_.CoreOutput); // Register VPC config module to be available to other modules
54
+
55
+ app.addModule(_.VpcConfig, {
48
56
  enabled: app.getParam(projectAppParams.vpc)
49
57
  });
50
58
  const appBucket = (0, _createAppBucket.createPublicAppBucket)(app, "app");
@@ -189,11 +197,6 @@ const createWebsitePulumiApp = (projectAppParams = {}) => {
189
197
  WbyProjectName: String(process.env["WEBINY_PROJECT_NAME"]),
190
198
  WbyEnvironment: String(process.env["WEBINY_ENV"])
191
199
  });
192
-
193
- if (projectAppParams.pulumi) {
194
- await projectAppParams.pulumi(app);
195
- }
196
-
197
200
  return {
198
201
  prerendering,
199
202
  app: _objectSpread(_objectSpread({}, appBucket), {}, {
@@ -205,6 +208,7 @@ const createWebsitePulumiApp = (projectAppParams = {}) => {
205
208
  };
206
209
  }
207
210
  });
211
+ return (0, _utils.withCommonLambdaEnvVariables)(app);
208
212
  };
209
213
 
210
214
  exports.createWebsitePulumiApp = createWebsitePulumiApp;
@@ -1 +1 @@
1
- {"version":3,"names":["createWebsitePulumiApp","projectAppParams","createPulumiApp","name","path","config","program","app","core","addModule","CoreOutput","VpcConfig","enabled","getParam","vpc","appBucket","createPublicAppBucket","appCloudfront","addResource","aws","cloudfront","Distribution","waitForDeployment","origins","origin","defaultRootObject","defaultCacheBehavior","compress","targetOriginId","originId","viewerProtocolPolicy","allowedMethods","cachedMethods","forwardedValues","cookies","forward","queryString","minTtl","defaultTtl","maxTtl","priceClass","customErrorResponses","errorCode","responseCode","responsePagePath","restrictions","geoRestriction","restrictionType","viewerCertificate","cloudfrontDefaultCertificate","deliveryBucket","deliveryCloudfront","originRequestPolicyId","orderedCacheBehaviors","headers","pathPattern","prerendering","createPrerenderingService","dbTableName","primaryDynamodbTableName","dbTableHashKey","primaryDynamodbTableHashKey","dbTableRangeKey","primaryDynamodbTableRangeKey","appUrl","pulumi","interpolate","output","domainName","deliveryUrl","bucket","cloudfrontId","id","domains","applyCustomDomain","process","env","WCP_PROJECT_ENVIRONMENT","applyTenantRouter","addOutputs","appId","appStorage","apply","value","appDomain","deliveryId","deliveryStorage","deliveryDomain","tagResources","WbyProjectName","String","WbyEnvironment","delivery"],"sources":["createWebsitePulumiApp.ts"],"sourcesContent":["import * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport { createPulumiApp, PulumiAppParamCallback, PulumiAppParam } from \"@webiny/pulumi\";\nimport { createPublicAppBucket } from \"../createAppBucket\";\nimport { applyCustomDomain, CustomDomainParams } from \"../customDomain\";\nimport { createPrerenderingService } from \"./WebsitePrerendering\";\nimport { CoreOutput, VpcConfig } from \"../common\";\nimport { tagResources } from \"~/utils\";\nimport { applyTenantRouter } from \"~/apps/tenantRouter\";\n\nexport interface CreateWebsitePulumiAppParams {\n /** Custom domain configuration */\n domains?: PulumiAppParamCallback<CustomDomainParams>;\n\n /**\n * Enables or disables VPC for the API.\n * For VPC to work you also have to enable it in the `core` application.\n */\n vpc?: PulumiAppParam<boolean | undefined>;\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: ReturnType<typeof createWebsitePulumiApp>) => void | Promise<void>;\n}\n\nexport const createWebsitePulumiApp = (projectAppParams: CreateWebsitePulumiAppParams = {}) => {\n return createPulumiApp({\n name: \"website\",\n path: \"apps/website\",\n config: projectAppParams,\n program: async app => {\n // Register core output as a module available for all other modules\n const core = app.addModule(CoreOutput);\n\n // Register VPC config module to be available to other modules\n app.addModule(VpcConfig, {\n enabled: app.getParam(projectAppParams.vpc)\n });\n\n const appBucket = createPublicAppBucket(app, \"app\");\n\n const appCloudfront = app.addResource(aws.cloudfront.Distribution, {\n name: \"app\",\n config: {\n enabled: true,\n waitForDeployment: true,\n origins: [appBucket.origin],\n defaultRootObject: \"index.html\",\n defaultCacheBehavior: {\n compress: true,\n targetOriginId: appBucket.origin.originId,\n viewerProtocolPolicy: \"redirect-to-https\",\n allowedMethods: [\"GET\", \"HEAD\", \"OPTIONS\"],\n cachedMethods: [\"GET\", \"HEAD\", \"OPTIONS\"],\n forwardedValues: {\n cookies: { forward: \"none\" },\n queryString: false\n },\n // MinTTL <= DefaultTTL <= MaxTTL\n minTtl: 0,\n defaultTtl: 0,\n maxTtl: 0\n },\n priceClass: \"PriceClass_100\",\n customErrorResponses: [\n { errorCode: 404, responseCode: 404, responsePagePath: \"/index.html\" }\n ],\n restrictions: {\n geoRestriction: {\n restrictionType: \"none\"\n }\n },\n viewerCertificate: {\n cloudfrontDefaultCertificate: true\n }\n }\n });\n\n const deliveryBucket = createPublicAppBucket(app, \"delivery\");\n\n const deliveryCloudfront = app.addResource(aws.cloudfront.Distribution, {\n name: \"delivery\",\n config: {\n enabled: true,\n waitForDeployment: true,\n origins: [deliveryBucket.origin, appBucket.origin],\n defaultRootObject: \"index.html\",\n defaultCacheBehavior: {\n compress: true,\n targetOriginId: deliveryBucket.origin.originId,\n viewerProtocolPolicy: \"redirect-to-https\",\n allowedMethods: [\"GET\", \"HEAD\", \"OPTIONS\"],\n cachedMethods: [\"GET\", \"HEAD\", \"OPTIONS\"],\n originRequestPolicyId: \"\",\n forwardedValues: {\n cookies: { forward: \"none\" },\n queryString: true\n },\n // MinTTL <= DefaultTTL <= MaxTTL\n minTtl: 0,\n defaultTtl: 30,\n maxTtl: 30\n },\n orderedCacheBehaviors: [\n {\n compress: true,\n allowedMethods: [\"GET\", \"HEAD\", \"OPTIONS\"],\n cachedMethods: [\"GET\", \"HEAD\", \"OPTIONS\"],\n forwardedValues: {\n cookies: {\n forward: \"none\"\n },\n headers: [],\n queryString: false\n },\n pathPattern: \"/static/*\",\n viewerProtocolPolicy: \"allow-all\",\n targetOriginId: appBucket.origin.originId,\n // MinTTL <= DefaultTTL <= MaxTTL\n minTtl: 0,\n defaultTtl: 2592000, // 30 days\n maxTtl: 2592000\n }\n ],\n customErrorResponses: [\n {\n errorCode: 404,\n responseCode: 404,\n responsePagePath: \"/_NOT_FOUND_PAGE_/index.html\"\n }\n ],\n priceClass: \"PriceClass_100\",\n restrictions: {\n geoRestriction: {\n restrictionType: \"none\"\n }\n },\n viewerCertificate: {\n cloudfrontDefaultCertificate: true\n }\n }\n });\n\n const prerendering = createPrerenderingService(app, {\n dbTableName: core.primaryDynamodbTableName,\n dbTableHashKey: core.primaryDynamodbTableHashKey,\n dbTableRangeKey: core.primaryDynamodbTableRangeKey,\n appUrl: pulumi.interpolate`https://${appCloudfront.output.domainName}`,\n deliveryUrl: pulumi.interpolate`https://${deliveryCloudfront.output.domainName}`,\n bucket: deliveryBucket.bucket.output.bucket,\n cloudfrontId: deliveryCloudfront.output.id\n });\n\n const domains = app.getParam(projectAppParams.domains);\n if (domains) {\n applyCustomDomain(deliveryCloudfront, domains);\n }\n\n if (process.env.WCP_PROJECT_ENVIRONMENT) {\n applyTenantRouter(app, deliveryCloudfront);\n }\n\n app.addOutputs({\n // Cloudfront and S3 bucket used to host the single-page application (SPA). The URL of the distribution is mainly\n // utilized by the Page Builder app's prerendering engine. Using this URL, it accesses the SPA and creates HTML snapshots.\n // The files that are generated in that process are stored in the `deliveryStorage` S3 bucket further below.\n appId: appCloudfront.output.id,\n appStorage: appBucket.bucket.output.id,\n appUrl: appCloudfront.output.domainName.apply(value => `https://${value}`),\n appDomain: appCloudfront.output.domainName,\n // These are the Cloudfront and S3 bucket that will deliver static pages to the actual website visitors.\n // The static HTML snapshots delivered from them still rely on the app's S3 bucket\n // defined above, for serving static assets (JS, CSS, images).\n deliveryId: deliveryCloudfront.output.id,\n deliveryStorage: deliveryBucket.bucket.output.id,\n deliveryDomain: deliveryCloudfront.output.domainName,\n deliveryUrl: deliveryCloudfront.output.domainName.apply(value => `https://${value}`)\n });\n\n tagResources({\n WbyProjectName: String(process.env[\"WEBINY_PROJECT_NAME\"]),\n WbyEnvironment: String(process.env[\"WEBINY_ENV\"])\n });\n\n if (projectAppParams.pulumi) {\n await projectAppParams.pulumi(app as ReturnType<typeof createWebsitePulumiApp>);\n }\n\n return {\n prerendering,\n app: {\n ...appBucket,\n cloudfront: appCloudfront\n },\n delivery: {\n ...deliveryBucket,\n cloudfront: deliveryCloudfront\n }\n };\n }\n });\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["createWebsitePulumiApp","projectAppParams","app","createPulumiApp","name","path","config","program","pulumi","addHandler","core","addModule","CoreOutput","VpcConfig","enabled","getParam","vpc","appBucket","createPublicAppBucket","appCloudfront","addResource","aws","cloudfront","Distribution","waitForDeployment","origins","origin","defaultRootObject","defaultCacheBehavior","compress","targetOriginId","originId","viewerProtocolPolicy","allowedMethods","cachedMethods","forwardedValues","cookies","forward","queryString","minTtl","defaultTtl","maxTtl","priceClass","customErrorResponses","errorCode","responseCode","responsePagePath","restrictions","geoRestriction","restrictionType","viewerCertificate","cloudfrontDefaultCertificate","deliveryBucket","deliveryCloudfront","originRequestPolicyId","orderedCacheBehaviors","headers","pathPattern","prerendering","createPrerenderingService","dbTableName","primaryDynamodbTableName","dbTableHashKey","primaryDynamodbTableHashKey","dbTableRangeKey","primaryDynamodbTableRangeKey","appUrl","interpolate","output","domainName","deliveryUrl","bucket","cloudfrontId","id","domains","applyCustomDomain","process","env","WCP_PROJECT_ENVIRONMENT","applyTenantRouter","addOutputs","appId","appStorage","apply","value","appDomain","deliveryId","deliveryStorage","deliveryDomain","tagResources","WbyProjectName","String","WbyEnvironment","delivery","withCommonLambdaEnvVariables"],"sources":["createWebsitePulumiApp.ts"],"sourcesContent":["import * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport { createPulumiApp, PulumiAppParamCallback, PulumiAppParam } from \"@webiny/pulumi\";\nimport { createPublicAppBucket } from \"../createAppBucket\";\nimport { applyCustomDomain, CustomDomainParams } from \"../customDomain\";\nimport { createPrerenderingService } from \"./WebsitePrerendering\";\nimport { CoreOutput, VpcConfig } from \"~/apps\";\nimport { tagResources, withCommonLambdaEnvVariables } from \"~/utils\";\nimport { applyTenantRouter } from \"~/apps/tenantRouter\";\n\nexport type WebsitePulumiApp = ReturnType<typeof createWebsitePulumiApp>;\n\nexport interface CreateWebsitePulumiAppParams {\n /** Custom domain configuration */\n domains?: PulumiAppParamCallback<CustomDomainParams>;\n\n /**\n * Enables or disables VPC for the API.\n * For VPC to work you also have to enable it in the `core` application.\n */\n vpc?: PulumiAppParam<boolean | undefined>;\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: WebsitePulumiApp) => void | Promise<void>;\n}\n\nexport const createWebsitePulumiApp = (projectAppParams: CreateWebsitePulumiAppParams = {}) => {\n const app = createPulumiApp({\n name: \"website\",\n path: \"apps/website\",\n config: projectAppParams,\n program: async app => {\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 WebsitePulumiApp);\n });\n }\n\n // Register core output as a module available for all other modules\n const core = app.addModule(CoreOutput);\n\n // Register VPC config module to be available to other modules\n app.addModule(VpcConfig, {\n enabled: app.getParam(projectAppParams.vpc)\n });\n\n const appBucket = createPublicAppBucket(app, \"app\");\n\n const appCloudfront = app.addResource(aws.cloudfront.Distribution, {\n name: \"app\",\n config: {\n enabled: true,\n waitForDeployment: true,\n origins: [appBucket.origin],\n defaultRootObject: \"index.html\",\n defaultCacheBehavior: {\n compress: true,\n targetOriginId: appBucket.origin.originId,\n viewerProtocolPolicy: \"redirect-to-https\",\n allowedMethods: [\"GET\", \"HEAD\", \"OPTIONS\"],\n cachedMethods: [\"GET\", \"HEAD\", \"OPTIONS\"],\n forwardedValues: {\n cookies: { forward: \"none\" },\n queryString: false\n },\n // MinTTL <= DefaultTTL <= MaxTTL\n minTtl: 0,\n defaultTtl: 0,\n maxTtl: 0\n },\n priceClass: \"PriceClass_100\",\n customErrorResponses: [\n { errorCode: 404, responseCode: 404, responsePagePath: \"/index.html\" }\n ],\n restrictions: {\n geoRestriction: {\n restrictionType: \"none\"\n }\n },\n viewerCertificate: {\n cloudfrontDefaultCertificate: true\n }\n }\n });\n\n const deliveryBucket = createPublicAppBucket(app, \"delivery\");\n\n const deliveryCloudfront = app.addResource(aws.cloudfront.Distribution, {\n name: \"delivery\",\n config: {\n enabled: true,\n waitForDeployment: true,\n origins: [deliveryBucket.origin, appBucket.origin],\n defaultRootObject: \"index.html\",\n defaultCacheBehavior: {\n compress: true,\n targetOriginId: deliveryBucket.origin.originId,\n viewerProtocolPolicy: \"redirect-to-https\",\n allowedMethods: [\"GET\", \"HEAD\", \"OPTIONS\"],\n cachedMethods: [\"GET\", \"HEAD\", \"OPTIONS\"],\n originRequestPolicyId: \"\",\n forwardedValues: {\n cookies: { forward: \"none\" },\n queryString: true\n },\n // MinTTL <= DefaultTTL <= MaxTTL\n minTtl: 0,\n defaultTtl: 30,\n maxTtl: 30\n },\n orderedCacheBehaviors: [\n {\n compress: true,\n allowedMethods: [\"GET\", \"HEAD\", \"OPTIONS\"],\n cachedMethods: [\"GET\", \"HEAD\", \"OPTIONS\"],\n forwardedValues: {\n cookies: {\n forward: \"none\"\n },\n headers: [],\n queryString: false\n },\n pathPattern: \"/static/*\",\n viewerProtocolPolicy: \"allow-all\",\n targetOriginId: appBucket.origin.originId,\n // MinTTL <= DefaultTTL <= MaxTTL\n minTtl: 0,\n defaultTtl: 2592000, // 30 days\n maxTtl: 2592000\n }\n ],\n customErrorResponses: [\n {\n errorCode: 404,\n responseCode: 404,\n responsePagePath: \"/_NOT_FOUND_PAGE_/index.html\"\n }\n ],\n priceClass: \"PriceClass_100\",\n restrictions: {\n geoRestriction: {\n restrictionType: \"none\"\n }\n },\n viewerCertificate: {\n cloudfrontDefaultCertificate: true\n }\n }\n });\n\n const prerendering = createPrerenderingService(app, {\n dbTableName: core.primaryDynamodbTableName,\n dbTableHashKey: core.primaryDynamodbTableHashKey,\n dbTableRangeKey: core.primaryDynamodbTableRangeKey,\n appUrl: pulumi.interpolate`https://${appCloudfront.output.domainName}`,\n deliveryUrl: pulumi.interpolate`https://${deliveryCloudfront.output.domainName}`,\n bucket: deliveryBucket.bucket.output.bucket,\n cloudfrontId: deliveryCloudfront.output.id\n });\n\n const domains = app.getParam(projectAppParams.domains);\n if (domains) {\n applyCustomDomain(deliveryCloudfront, domains);\n }\n\n if (process.env.WCP_PROJECT_ENVIRONMENT) {\n applyTenantRouter(app, deliveryCloudfront);\n }\n\n app.addOutputs({\n // Cloudfront and S3 bucket used to host the single-page application (SPA). The URL of the distribution is mainly\n // utilized by the Page Builder app's prerendering engine. Using this URL, it accesses the SPA and creates HTML snapshots.\n // The files that are generated in that process are stored in the `deliveryStorage` S3 bucket further below.\n appId: appCloudfront.output.id,\n appStorage: appBucket.bucket.output.id,\n appUrl: appCloudfront.output.domainName.apply(value => `https://${value}`),\n appDomain: appCloudfront.output.domainName,\n // These are the Cloudfront and S3 bucket that will deliver static pages to the actual website visitors.\n // The static HTML snapshots delivered from them still rely on the app's S3 bucket\n // defined above, for serving static assets (JS, CSS, images).\n deliveryId: deliveryCloudfront.output.id,\n deliveryStorage: deliveryBucket.bucket.output.id,\n deliveryDomain: deliveryCloudfront.output.domainName,\n deliveryUrl: deliveryCloudfront.output.domainName.apply(value => `https://${value}`)\n });\n\n tagResources({\n WbyProjectName: String(process.env[\"WEBINY_PROJECT_NAME\"]),\n WbyEnvironment: String(process.env[\"WEBINY_ENV\"])\n });\n\n return {\n prerendering,\n app: {\n ...appBucket,\n cloudfront: appCloudfront\n },\n delivery: {\n ...deliveryBucket,\n cloudfront: deliveryCloudfront\n }\n };\n }\n });\n\n return withCommonLambdaEnvVariables(app);\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/pulumi-aws",
3
- "version": "5.29.0",
3
+ "version": "5.30.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/webiny/webiny-js.git"
@@ -15,8 +15,8 @@
15
15
  "dependencies": {
16
16
  "@pulumi/aws": "^5.8.0",
17
17
  "@pulumi/pulumi": "^3.34.0",
18
- "@webiny/cli-plugin-deploy-pulumi": "5.29.0",
19
- "@webiny/pulumi": "5.29.0"
18
+ "@webiny/cli-plugin-deploy-pulumi": "5.30.0",
19
+ "@webiny/pulumi": "5.30.0"
20
20
  },
21
21
  "devDependencies": {
22
22
  "@babel/cli": "^7.16.0",
@@ -24,16 +24,16 @@
24
24
  "@babel/preset-env": "^7.16.4",
25
25
  "@babel/preset-typescript": "^7.16.0",
26
26
  "@babel/runtime": "^7.16.3",
27
- "@webiny/api-page-builder": "^5.29.0",
28
- "@webiny/aws-layers": "^5.29.0",
29
- "@webiny/cli": "^5.29.0",
30
- "@webiny/project-utils": "^5.29.0",
27
+ "@webiny/api-page-builder": "^5.30.0",
28
+ "@webiny/aws-layers": "^5.30.0",
29
+ "@webiny/cli": "^5.30.0",
30
+ "@webiny/project-utils": "^5.30.0",
31
31
  "chalk": "^4.1.0",
32
32
  "lodash": "^4.5.0",
33
33
  "mime": "2.5.2",
34
34
  "rimraf": "^3.0.2",
35
35
  "ttypescript": "^1.5.12",
36
- "typescript": "4.5.5"
36
+ "typescript": "4.7.4"
37
37
  },
38
38
  "scripts": {
39
39
  "build": "yarn webiny run build",
@@ -47,5 +47,5 @@
47
47
  ]
48
48
  }
49
49
  },
50
- "gitHead": "8cf3d623d56105ad5a4bacbcb4140959e11477e6"
50
+ "gitHead": "3cadc5d26e565586b28772afbc18ae554ce7b782"
51
51
  }
package/utils/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from "./tagResources";
2
2
  export * from "./uploadFolderToS3";
3
+ export { withCommonLambdaEnvVariables, getCommonLambdaEnvVariables } from "./lambdaEnvVariables";
package/utils/index.js CHANGED
@@ -3,11 +3,28 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ var _exportNames = {
7
+ withCommonLambdaEnvVariables: true,
8
+ getCommonLambdaEnvVariables: true
9
+ };
10
+ Object.defineProperty(exports, "getCommonLambdaEnvVariables", {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _lambdaEnvVariables.getCommonLambdaEnvVariables;
14
+ }
15
+ });
16
+ Object.defineProperty(exports, "withCommonLambdaEnvVariables", {
17
+ enumerable: true,
18
+ get: function () {
19
+ return _lambdaEnvVariables.withCommonLambdaEnvVariables;
20
+ }
21
+ });
6
22
 
7
23
  var _tagResources = require("./tagResources");
8
24
 
9
25
  Object.keys(_tagResources).forEach(function (key) {
10
26
  if (key === "default" || key === "__esModule") return;
27
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
11
28
  if (key in exports && exports[key] === _tagResources[key]) return;
12
29
  Object.defineProperty(exports, key, {
13
30
  enumerable: true,
@@ -21,6 +38,7 @@ var _uploadFolderToS = require("./uploadFolderToS3");
21
38
 
22
39
  Object.keys(_uploadFolderToS).forEach(function (key) {
23
40
  if (key === "default" || key === "__esModule") return;
41
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
24
42
  if (key in exports && exports[key] === _uploadFolderToS[key]) return;
25
43
  Object.defineProperty(exports, key, {
26
44
  enumerable: true,
@@ -28,4 +46,6 @@ Object.keys(_uploadFolderToS).forEach(function (key) {
28
46
  return _uploadFolderToS[key];
29
47
  }
30
48
  });
31
- });
49
+ });
50
+
51
+ var _lambdaEnvVariables = require("./lambdaEnvVariables");
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./tagResources\";\nexport * from \"./uploadFolderToS3\";\n"],"mappings":";;;;;;AAAA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./tagResources\";\nexport * from \"./uploadFolderToS3\";\nexport { withCommonLambdaEnvVariables, getCommonLambdaEnvVariables } from \"./lambdaEnvVariables\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA"}
@@ -0,0 +1,20 @@
1
+ import * as pulumi from "@pulumi/pulumi";
2
+ import { PulumiApp } from "@webiny/pulumi";
3
+ declare type EnvVariables = Record<string, string>;
4
+ export declare let sealEnvVariables: () => void;
5
+ export declare function getCommonLambdaEnvVariables(): pulumi.Output<EnvVariables>;
6
+ export interface SetCommonLambdaEnvVariables {
7
+ (variables: EnvVariables): void;
8
+ }
9
+ export interface WithCommonLambdaEnvVariables {
10
+ /**
11
+ * Set ENV variables that wil be assigned to all Lambda functions in the current Pulumi app.
12
+ */
13
+ setCommonLambdaEnvVariables: SetCommonLambdaEnvVariables;
14
+ }
15
+ /**
16
+ * Augment the given app with `setCommonLambdaEnvVariables` functionality.
17
+ * @param {PulumiApp} app
18
+ */
19
+ export declare function withCommonLambdaEnvVariables<T extends PulumiApp>(app: T): T & WithCommonLambdaEnvVariables;
20
+ export {};
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.getCommonLambdaEnvVariables = getCommonLambdaEnvVariables;
9
+ exports.sealEnvVariables = void 0;
10
+ exports.withCommonLambdaEnvVariables = withCommonLambdaEnvVariables;
11
+
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+
14
+ var pulumi = _interopRequireWildcard(require("@pulumi/pulumi"));
15
+
16
+ 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); }
17
+
18
+ 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; }
19
+
20
+ 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; }
21
+
22
+ 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; }
23
+
24
+ const variablesRegistry = {};
25
+ let sealEnvVariables;
26
+ exports.sealEnvVariables = sealEnvVariables;
27
+ const variablesPromise = new Promise(resolve => {
28
+ exports.sealEnvVariables = sealEnvVariables = () => {
29
+ // Apart from a couple of basic environment variables like STAGED_ROLLOUTS_VARIANT and DEBUG,
30
+ // we also take into consideration variables that have `WEBINY_` and `WCP_` prefix in their names.
31
+ const baseVariables = Object.keys(process.env).reduce((current, environmentVariableName) => {
32
+ const startsWithWebiny = environmentVariableName.startsWith("WEBINY_");
33
+ const startsWithWcp = environmentVariableName.startsWith("WCP_");
34
+
35
+ if ((startsWithWebiny || startsWithWcp) && process.env[environmentVariableName] !== undefined) {
36
+ current[environmentVariableName] = String(process.env[environmentVariableName]);
37
+ }
38
+
39
+ return current;
40
+ }, {
41
+ // STAGED_ROLLOUTS_VARIANT: app.ctx.variant || "",
42
+ // Among other things, this determines the amount of information we reveal on runtime errors.
43
+ // https://www.webiny.com/docs/how-to-guides/environment-variables/#debug-environment-variable
44
+ DEBUG: String(process.env.DEBUG)
45
+ });
46
+ resolve(Object.assign({}, baseVariables, variablesRegistry));
47
+ };
48
+ });
49
+
50
+ function getCommonLambdaEnvVariables() {
51
+ return pulumi.output(variablesPromise);
52
+ }
53
+
54
+ function setCommonLambdaEnvVariables(variables) {
55
+ Object.assign(variablesRegistry, variables);
56
+ }
57
+
58
+ /**
59
+ * Augment the given app with `setCommonLambdaEnvVariables` functionality.
60
+ * @param {PulumiApp} app
61
+ */
62
+ function withCommonLambdaEnvVariables(app) {
63
+ const originalProgram = app.program;
64
+
65
+ app.program = async app => {
66
+ // We must first execute the original program, and pass in the augmented app.
67
+ const resources = await originalProgram(_objectSpread(_objectSpread({}, app), {}, {
68
+ // @ts-ignore because currently, we don't have a way of passing in a custom app type.
69
+ setCommonLambdaEnvVariables
70
+ })); // Once the program is executed, we need to seal the variables (this will resolve the pulumi.output promise).
71
+
72
+ app.addHandler(() => {
73
+ sealEnvVariables();
74
+ });
75
+ return resources;
76
+ }; // Augment the original PulumiApp.
77
+
78
+
79
+ return _objectSpread(_objectSpread({}, app), {}, {
80
+ setCommonLambdaEnvVariables
81
+ });
82
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["variablesRegistry","sealEnvVariables","variablesPromise","Promise","resolve","baseVariables","Object","keys","process","env","reduce","current","environmentVariableName","startsWithWebiny","startsWith","startsWithWcp","undefined","String","DEBUG","assign","getCommonLambdaEnvVariables","pulumi","output","setCommonLambdaEnvVariables","variables","withCommonLambdaEnvVariables","app","originalProgram","program","resources","addHandler"],"sources":["lambdaEnvVariables.ts"],"sourcesContent":["import * as pulumi from \"@pulumi/pulumi\";\nimport { PulumiApp } from \"@webiny/pulumi\";\n\ntype EnvVariables = Record<string, string>;\n\nconst variablesRegistry: EnvVariables = {};\n\nexport let sealEnvVariables: () => void;\n\nconst variablesPromise = new Promise<EnvVariables>(resolve => {\n sealEnvVariables = () => {\n // Apart from a couple of basic environment variables like STAGED_ROLLOUTS_VARIANT and DEBUG,\n // we also take into consideration variables that have `WEBINY_` and `WCP_` prefix in their names.\n const baseVariables = Object.keys(process.env).reduce<EnvVariables>(\n (current, environmentVariableName) => {\n const startsWithWebiny = environmentVariableName.startsWith(\"WEBINY_\");\n const startsWithWcp = environmentVariableName.startsWith(\"WCP_\");\n\n if (\n (startsWithWebiny || startsWithWcp) &&\n process.env[environmentVariableName] !== undefined\n ) {\n current[environmentVariableName] = String(process.env[environmentVariableName]);\n }\n return current;\n },\n {\n // STAGED_ROLLOUTS_VARIANT: app.ctx.variant || \"\",\n // Among other things, this determines the amount of information we reveal on runtime errors.\n // https://www.webiny.com/docs/how-to-guides/environment-variables/#debug-environment-variable\n DEBUG: String(process.env.DEBUG)\n }\n );\n\n resolve(Object.assign({}, baseVariables, variablesRegistry));\n };\n});\n\nexport function getCommonLambdaEnvVariables(): pulumi.Output<EnvVariables> {\n return pulumi.output(variablesPromise);\n}\n\nfunction setCommonLambdaEnvVariables(variables: EnvVariables) {\n Object.assign(variablesRegistry, variables);\n}\n\nexport interface SetCommonLambdaEnvVariables {\n (variables: EnvVariables): void;\n}\n\nexport interface WithCommonLambdaEnvVariables {\n /**\n * Set ENV variables that wil be assigned to all Lambda functions in the current Pulumi app.\n */\n setCommonLambdaEnvVariables: SetCommonLambdaEnvVariables;\n}\n\n/**\n * Augment the given app with `setCommonLambdaEnvVariables` functionality.\n * @param {PulumiApp} app\n */\nexport function withCommonLambdaEnvVariables<T extends PulumiApp>(\n app: T\n): T & WithCommonLambdaEnvVariables {\n const originalProgram = app.program;\n app.program = async app => {\n // We must first execute the original program, and pass in the augmented app.\n const resources = await originalProgram({\n ...app,\n // @ts-ignore because currently, we don't have a way of passing in a custom app type.\n setCommonLambdaEnvVariables\n });\n\n // Once the program is executed, we need to seal the variables (this will resolve the pulumi.output promise).\n app.addHandler(() => {\n sealEnvVariables();\n });\n\n return resources;\n };\n\n // Augment the original PulumiApp.\n return {\n ...app,\n setCommonLambdaEnvVariables\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;;;;;;;;;;AAKA,MAAMA,iBAA+B,GAAG,EAAxC;AAEO,IAAIC,gBAAJ;;AAEP,MAAMC,gBAAgB,GAAG,IAAIC,OAAJ,CAA0BC,OAAO,IAAI;EAC1D,2BAAAH,gBAAgB,GAAG,MAAM;IACrB;IACA;IACA,MAAMI,aAAa,GAAGC,MAAM,CAACC,IAAP,CAAYC,OAAO,CAACC,GAApB,EAAyBC,MAAzB,CAClB,CAACC,OAAD,EAAUC,uBAAV,KAAsC;MAClC,MAAMC,gBAAgB,GAAGD,uBAAuB,CAACE,UAAxB,CAAmC,SAAnC,CAAzB;MACA,MAAMC,aAAa,GAAGH,uBAAuB,CAACE,UAAxB,CAAmC,MAAnC,CAAtB;;MAEA,IACI,CAACD,gBAAgB,IAAIE,aAArB,KACAP,OAAO,CAACC,GAAR,CAAYG,uBAAZ,MAAyCI,SAF7C,EAGE;QACEL,OAAO,CAACC,uBAAD,CAAP,GAAmCK,MAAM,CAACT,OAAO,CAACC,GAAR,CAAYG,uBAAZ,CAAD,CAAzC;MACH;;MACD,OAAOD,OAAP;IACH,CAZiB,EAalB;MACI;MACA;MACA;MACAO,KAAK,EAAED,MAAM,CAACT,OAAO,CAACC,GAAR,CAAYS,KAAb;IAJjB,CAbkB,CAAtB;IAqBAd,OAAO,CAACE,MAAM,CAACa,MAAP,CAAc,EAAd,EAAkBd,aAAlB,EAAiCL,iBAAjC,CAAD,CAAP;EACH,CAzBD;AA0BH,CA3BwB,CAAzB;;AA6BO,SAASoB,2BAAT,GAAoE;EACvE,OAAOC,MAAM,CAACC,MAAP,CAAcpB,gBAAd,CAAP;AACH;;AAED,SAASqB,2BAAT,CAAqCC,SAArC,EAA8D;EAC1DlB,MAAM,CAACa,MAAP,CAAcnB,iBAAd,EAAiCwB,SAAjC;AACH;;AAaD;AACA;AACA;AACA;AACO,SAASC,4BAAT,CACHC,GADG,EAE6B;EAChC,MAAMC,eAAe,GAAGD,GAAG,CAACE,OAA5B;;EACAF,GAAG,CAACE,OAAJ,GAAc,MAAMF,GAAN,IAAa;IACvB;IACA,MAAMG,SAAS,GAAG,MAAMF,eAAe,iCAChCD,GADgC;MAEnC;MACAH;IAHmC,GAAvC,CAFuB,CAQvB;;IACAG,GAAG,CAACI,UAAJ,CAAe,MAAM;MACjB7B,gBAAgB;IACnB,CAFD;IAIA,OAAO4B,SAAP;EACH,CAdD,CAFgC,CAkBhC;;;EACA,uCACOH,GADP;IAEIH;EAFJ;AAIH"}