@webiny/pulumi-aws 5.42.4-beta.0 → 5.43.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/api/ApiGraphql.js +2 -2
- package/apps/api/ApiGraphql.js.map +1 -1
- package/apps/api/ApiMigration.js +2 -1
- package/apps/api/ApiMigration.js.map +1 -1
- package/apps/api/ApiOutput.js +2 -1
- package/apps/api/ApiOutput.js.map +1 -1
- package/apps/api/createApiPulumiApp.d.ts +9 -2
- package/apps/api/createApiPulumiApp.js +12 -14
- package/apps/api/createApiPulumiApp.js.map +1 -1
- package/apps/awsUtils.d.ts +1 -1
- package/apps/blueGreen/BlueGreenRouterApiGateway.d.ts +11 -0
- package/apps/blueGreen/BlueGreenRouterApiGateway.js +51 -0
- package/apps/blueGreen/BlueGreenRouterApiGateway.js.map +1 -0
- package/apps/blueGreen/BlueGreenRouterCloudFront.d.ts +17 -0
- package/apps/blueGreen/BlueGreenRouterCloudFront.js +106 -0
- package/apps/blueGreen/BlueGreenRouterCloudFront.js.map +1 -0
- package/apps/blueGreen/BlueGreenRouterCloudFrontStore.d.ts +10 -0
- package/apps/blueGreen/BlueGreenRouterCloudFrontStore.js +27 -0
- package/apps/blueGreen/BlueGreenRouterCloudFrontStore.js.map +1 -0
- package/apps/blueGreen/cloudfront/createCloudFrontDefaultCacheBehaviorPolicies.d.ts +7 -0
- package/apps/blueGreen/cloudfront/createCloudFrontDefaultCacheBehaviorPolicies.js +23 -0
- package/apps/blueGreen/cloudfront/createCloudFrontDefaultCacheBehaviorPolicies.js.map +1 -0
- package/apps/blueGreen/cloudfront/createCloudFrontFunctionDomainMap.d.ts +14 -0
- package/apps/blueGreen/cloudfront/createCloudFrontFunctionDomainMap.js +30 -0
- package/apps/blueGreen/cloudfront/createCloudFrontFunctionDomainMap.js.map +1 -0
- package/apps/blueGreen/cloudfront/createOriginId.d.ts +11 -0
- package/apps/blueGreen/cloudfront/createOriginId.js +18 -0
- package/apps/blueGreen/cloudfront/createOriginId.js.map +1 -0
- package/apps/blueGreen/constants.d.ts +3 -0
- package/apps/blueGreen/constants.js +11 -0
- package/apps/blueGreen/constants.js.map +1 -0
- package/apps/blueGreen/createBlueGreenPulumiApp.d.ts +73 -0
- package/apps/blueGreen/createBlueGreenPulumiApp.js +121 -0
- package/apps/blueGreen/createBlueGreenPulumiApp.js.map +1 -0
- package/apps/blueGreen/domains/attachDomainsToOutput.d.ts +9 -0
- package/apps/blueGreen/domains/attachDomainsToOutput.js +37 -0
- package/apps/blueGreen/domains/attachDomainsToOutput.js.map +1 -0
- package/apps/blueGreen/domains/convertApplicationDomains.d.ts +6 -0
- package/apps/blueGreen/domains/convertApplicationDomains.js +32 -0
- package/apps/blueGreen/domains/convertApplicationDomains.js.map +1 -0
- package/apps/blueGreen/domains/getApplicationDomains.d.ts +20 -0
- package/apps/blueGreen/domains/getApplicationDomains.js +107 -0
- package/apps/blueGreen/domains/getApplicationDomains.js.map +1 -0
- package/apps/blueGreen/domains/resolveDomains.d.ts +6 -0
- package/apps/blueGreen/domains/resolveDomains.js +48 -0
- package/apps/blueGreen/domains/resolveDomains.js.map +1 -0
- package/apps/blueGreen/functions/buildHandlerFunction.d.ts +15 -0
- package/apps/blueGreen/functions/buildHandlerFunction.js +25 -0
- package/apps/blueGreen/functions/buildHandlerFunction.js.map +1 -0
- package/apps/blueGreen/functions/handler.d.ts +1 -0
- package/apps/blueGreen/functions/handler.js +63 -0
- package/apps/blueGreen/functions/handler.js.map +1 -0
- package/apps/blueGreen/types.d.ts +78 -0
- package/apps/blueGreen/types.js +7 -0
- package/apps/blueGreen/types.js.map +1 -0
- package/apps/blueGreen/validation/validateDeployments.d.ts +2 -0
- package/apps/blueGreen/validation/validateDeployments.js +41 -0
- package/apps/blueGreen/validation/validateDeployments.js.map +1 -0
- package/apps/common/CoreOutput.js +3 -1
- package/apps/common/CoreOutput.js.map +1 -1
- package/apps/core/cognitoIdentityProviders/configure.js +2 -1
- package/apps/core/cognitoIdentityProviders/configure.js.map +1 -1
- package/apps/core/createCorePulumiApp.js +28 -6
- package/apps/core/createCorePulumiApp.js.map +1 -1
- package/apps/createAppBucket.js +2 -1
- package/apps/createAppBucket.js.map +1 -1
- package/apps/react/createReactPulumiApp.js +7 -3
- package/apps/react/createReactPulumiApp.js.map +1 -1
- package/apps/syncSystem/SyncSystemDynamo.d.ts +5 -0
- package/apps/syncSystem/SyncSystemDynamo.js +59 -0
- package/apps/syncSystem/SyncSystemDynamo.js.map +1 -0
- package/apps/syncSystem/SyncSystemLambda.d.ts +13 -0
- package/apps/syncSystem/SyncSystemLambda.js +104 -0
- package/apps/syncSystem/SyncSystemLambda.js.map +1 -0
- package/apps/syncSystem/SyncSystemSQS.d.ts +4 -0
- package/apps/syncSystem/SyncSystemSQS.js +40 -0
- package/apps/syncSystem/SyncSystemSQS.js.map +1 -0
- package/apps/syncSystem/addTableItems.d.ts +8 -0
- package/apps/syncSystem/addTableItems.js +59 -0
- package/apps/syncSystem/addTableItems.js.map +1 -0
- package/apps/syncSystem/createSyncSystemPulumiApp.d.ts +66 -0
- package/apps/syncSystem/createSyncSystemPulumiApp.js +63 -0
- package/apps/syncSystem/createSyncSystemPulumiApp.js.map +1 -0
- package/apps/tenantRouter.js +2 -1
- package/apps/tenantRouter.js.map +1 -1
- package/apps/website/WebsitePrerendering.js +1 -1
- package/apps/website/WebsitePrerendering.js.map +1 -1
- package/apps/website/createWebsitePulumiApp.d.ts +1 -1
- package/apps/website/createWebsitePulumiApp.js +6 -2
- package/apps/website/createWebsitePulumiApp.js.map +1 -1
- package/components/tenantRouter/WebsiteTenantRouter.d.ts +1 -0
- package/components/tenantRouter/WebsiteTenantRouter.js +6 -3
- package/components/tenantRouter/WebsiteTenantRouter.js.map +1 -1
- package/enterprise/createCorePulumiApp.d.ts +1 -0
- package/enterprise/createCorePulumiApp.js +10 -0
- package/enterprise/createCorePulumiApp.js.map +1 -1
- package/enterprise/createSyncSystemPulumiApp.d.ts +26 -0
- package/enterprise/createSyncSystemPulumiApp.js +71 -0
- package/enterprise/createSyncSystemPulumiApp.js.map +1 -0
- package/env/awsRegion.d.ts +1 -0
- package/env/awsRegion.js +12 -0
- package/env/awsRegion.js.map +1 -0
- package/env/base.d.ts +15 -0
- package/env/base.js +37 -0
- package/env/base.js.map +1 -0
- package/env/env.d.ts +1 -0
- package/env/env.js +12 -0
- package/env/env.js.map +1 -0
- package/env/projectName.d.ts +1 -0
- package/env/projectName.js +12 -0
- package/env/projectName.js.map +1 -0
- package/env/variant.d.ts +1 -0
- package/env/variant.js +13 -0
- package/env/variant.js.map +1 -0
- package/package.json +21 -18
- package/utils/addServiceManifestTableItem.js +1 -1
- package/utils/addServiceManifestTableItem.js.map +1 -1
- package/utils/dynamodb.d.ts +14 -0
- package/utils/dynamodb.js +36 -0
- package/utils/dynamodb.js.map +1 -0
- package/utils/lambdaEnvVariables.js +1 -2
- package/utils/lambdaEnvVariables.js.map +1 -1
- package/utils/uploadFolderToS3.js +2 -1
- package/utils/uploadFolderToS3.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["aws","_interopRequireWildcard","require","pulumi","_getIdpConfig","isString","value","configureAdminCognitoFederation","app","config","region","
|
|
1
|
+
{"version":3,"names":["aws","_interopRequireWildcard","require","pulumi","_getIdpConfig","_awsRegion","isString","value","configureAdminCognitoFederation","app","config","region","getEnvVariableAwsRegion","userPool","resources","appClient","userPoolClient","userPoolDomain","addResource","cognito","UserPoolDomain","name","domain","certificateArn","undefined","userPoolId","output","id","addOutput","interpolate","idpConfigs","idp","identityProviders","getIdpConfig","type","providerName","toString","toLowerCase","IdentityProvider","push","supportedIdentityProviders","map","providerType","allowedOauthScopes","allowedOauthFlows","allowedOauthFlowsUserPoolClient","callbackUrls","logoutUrls","exports"],"sources":["configure.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport { UserPoolDomainArgs } from \"@pulumi/aws/cognito/userPoolDomain\";\nimport { IdentityProviderArgs } from \"@pulumi/aws/cognito\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport { PulumiApp, PulumiAppResource, PulumiAppResourceConstructor } from \"@webiny/pulumi\";\nimport { getIdpConfig } from \"./getIdpConfig\";\nimport { getEnvVariableAwsRegion } from \"~/env/awsRegion\";\n\nexport type IdentityAttributeMapping = {\n \"custom:id\": string;\n username: string;\n email: string;\n family_name: string;\n given_name: string;\n [key: string]: string;\n};\n\nexport interface CognitoIdentityProvidersConfig {\n domain:\n | string\n | {\n name: UserPoolDomainArgs[\"domain\"];\n certificateArn?: UserPoolDomainArgs[\"certificateArn\"];\n };\n identityProviders: CognitoIdentityProviderConfig[];\n callbackUrls: string[];\n logoutUrls?: string[];\n}\n\nexport interface CognitoIdentityProviderConfig {\n name?: string;\n type: \"google\" | \"facebook\" | \"amazon\" | \"apple\" | \"oidc\";\n providerDetails: IdentityProviderArgs[\"providerDetails\"];\n idpIdentifiers?: IdentityProviderArgs[\"idpIdentifiers\"];\n attributeMapping?: IdentityAttributeMapping;\n}\n\nconst isString = (value?: any): value is string => {\n return typeof value === \"string\";\n};\n\nexport const configureAdminCognitoFederation = (\n app: PulumiApp,\n config: CognitoIdentityProvidersConfig\n) => {\n const region = getEnvVariableAwsRegion();\n\n const userPool = app.resources.userPool as PulumiAppResource<\n PulumiAppResourceConstructor<aws.cognito.UserPool>\n >;\n\n const appClient = app.resources.userPoolClient as PulumiAppResource<\n PulumiAppResourceConstructor<aws.cognito.UserPoolClient>\n >;\n\n /**\n * We need to create a user pool domain, which is used to interact with the federated identity providers.\n */\n const userPoolDomain = app.addResource(aws.cognito.UserPoolDomain, {\n name: \"cognitoUserPoolDomain\",\n config: {\n domain: isString(config.domain) ? config.domain : config.domain.name,\n certificateArn: isString(config.domain) ? undefined : config.domain.certificateArn,\n userPoolId: userPool.output.id\n }\n });\n\n app.addOutput(\n \"cognitoUserPoolDomain\",\n pulumi.interpolate`${userPoolDomain.output.domain}.auth.${region}.amazoncognito.com`\n );\n\n const idpConfigs: aws.cognito.IdentityProviderArgs[] = [];\n\n for (const idp of config.identityProviders) {\n const config = getIdpConfig(idp.type, userPool.output.id, idp);\n\n // The idea to lowercase the provider name emerged while working on backwards compatibility issue.\n // Basically, in cases where a user used the OIDC provider and did not specify a name, instead of\n // using `OIDC` as the name, we wanted to ensure `oidc` is used. But, what I soon realized is that\n // by simply lowercasing the name, we can avoid the need to check for the provider type and name.\n // And although this will now happen for all providers, it's not a problem since Pulumi requires\n // names to be all lowercase anyway.\n const name = config.providerName.toString().toLowerCase();\n\n app.addResource(aws.cognito.IdentityProvider, { name, config });\n\n idpConfigs.push(config);\n }\n\n appClient.config.supportedIdentityProviders([\n \"COGNITO\",\n ...idpConfigs.map(config => {\n // For built-in identity providers, we use the type as the name. Only for OIDC,\n // we allow the user to provide a custom name, and we only use the type as a fallback.\n if (config.providerType === \"OIDC\") {\n return config.providerName;\n }\n return config.providerType;\n })\n ]);\n\n appClient.config.allowedOauthScopes([\"profile\", \"email\", \"openid\"]);\n appClient.config.allowedOauthFlows([\"implicit\", \"code\"]);\n appClient.config.allowedOauthFlowsUserPoolClient(true);\n appClient.config.callbackUrls(config.callbackUrls);\n appClient.config.logoutUrls(config.logoutUrls ?? config.callbackUrls);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -22,8 +22,11 @@ var _constants = require("../../constants");
|
|
|
22
22
|
var random = _interopRequireWildcard(require("@pulumi/random"));
|
|
23
23
|
var _featureFlags = require("@webiny/feature-flags");
|
|
24
24
|
var _LogDynamo = require("./LogDynamo");
|
|
25
|
+
var _variant = require("../../env/variant");
|
|
26
|
+
var _env = require("../../env/env");
|
|
27
|
+
var _projectName = require("../../env/projectName");
|
|
25
28
|
function createCorePulumiApp(projectAppParams = {}) {
|
|
26
|
-
const
|
|
29
|
+
const baseApp = (0, _pulumi.createPulumiApp)({
|
|
27
30
|
name: "core",
|
|
28
31
|
path: "apps/core",
|
|
29
32
|
config: projectAppParams,
|
|
@@ -137,8 +140,9 @@ function createCorePulumiApp(projectAppParams = {}) {
|
|
|
137
140
|
eventBusArn: eventBus.output.arn
|
|
138
141
|
});
|
|
139
142
|
(0, _utils.tagResources)({
|
|
140
|
-
WbyProjectName:
|
|
141
|
-
WbyEnvironment:
|
|
143
|
+
WbyProjectName: (0, _projectName.getEnvVariableWebinyProjectName)(),
|
|
144
|
+
WbyEnvironment: (0, _env.getEnvVariableWebinyEnv)(),
|
|
145
|
+
WbyEnvironmentVariant: (0, _variant.getEnvVariableWebinyVariant)()
|
|
142
146
|
});
|
|
143
147
|
return {
|
|
144
148
|
dynamoDbTable,
|
|
@@ -151,15 +155,33 @@ function createCorePulumiApp(projectAppParams = {}) {
|
|
|
151
155
|
};
|
|
152
156
|
}
|
|
153
157
|
});
|
|
154
|
-
|
|
155
|
-
const dynamoTable =
|
|
158
|
+
const app = (0, _withServiceManifest.withServiceManifest)(baseApp, manifests => {
|
|
159
|
+
const dynamoTable = baseApp.resources.dynamoDbTable;
|
|
156
160
|
const table = {
|
|
157
161
|
tableName: dynamoTable.output.name,
|
|
158
162
|
hashKey: dynamoTable.output.hashKey,
|
|
159
163
|
rangeKey: dynamoTable.output.rangeKey
|
|
160
164
|
};
|
|
161
|
-
manifests.forEach(manifest => (0, _addServiceManifestTableItem.addServiceManifestTableItem)(
|
|
165
|
+
manifests.forEach(manifest => (0, _addServiceManifestTableItem.addServiceManifestTableItem)(baseApp, table, manifest));
|
|
162
166
|
});
|
|
167
|
+
app.addHandler(() => {
|
|
168
|
+
app.addServiceManifest({
|
|
169
|
+
name: "core",
|
|
170
|
+
manifest: {
|
|
171
|
+
eventBus: {
|
|
172
|
+
arn: baseApp.resources.eventBus.output.arn,
|
|
173
|
+
name: baseApp.resources.eventBus.output.name
|
|
174
|
+
},
|
|
175
|
+
dynamodbTable: {
|
|
176
|
+
arn: baseApp.resources.dynamoDbTable.output.arn,
|
|
177
|
+
name: baseApp.resources.dynamoDbTable.output.name,
|
|
178
|
+
hashKey: baseApp.resources.dynamoDbTable.output.hashKey,
|
|
179
|
+
rangeKey: baseApp.resources.dynamoDbTable.output.rangeKey
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
return app;
|
|
163
185
|
}
|
|
164
186
|
|
|
165
187
|
//# sourceMappingURL=createCorePulumiApp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["aws","_interopRequireWildcard","require","_pulumi","_CoreCognito","_CoreDynamo","_CoreElasticSearch","_CoreOpenSearch","_CoreEventBus","_CoreFileManager","_CoreVpc","_WatchCommand","_utils","_withServiceManifest","_addServiceManifestTableItem","_constants","random","_featureFlags","_LogDynamo","createCorePulumiApp","projectAppParams","app","createPulumiApp","name","path","config","program","deploymentId","RandomId","byteLength","searchEngineType","searchEngineParams","openSearch","getParam","elasticSearch","params","domainName","process","env","AWS_ELASTIC_SEARCH_DOMAIN_NAME","indexPrefix","ELASTIC_SEARCH_INDEX_PREFIX","sharedIndexes","ELASTICSEARCH_SHARED_INDEXES","pulumiResourceNamePrefix","onResource","resource","startsWith","pulumi","addHandler","productionEnvironments","create","DEFAULT_PROD_ENV_NAMES","isProduction","includes","run","protect","legacyConfig","legacy","dynamoDbTable","addModule","CoreDynamo","logDynamoDbTable","LogDynamo","vpcEnabled","vpc","CoreVpc","cognito","CoreCognito","useEmailAsUsername","eventBus","CoreEventBus","bucket","fileManagerBucket","CoreFileManger","OpenSearch","ElasticSearch","featureFlags","newWatchCommand","WatchCommand","hex","addOutputs","region","fileManagerBucketId","output","id","primaryDynamodbTableArn","arn","primaryDynamodbTableName","primaryDynamodbTableHashKey","hashKey","primaryDynamodbTableRangeKey","rangeKey","logDynamodbTableArn","logDynamodbTableName","logDynamodbTableHashKey","logDynamodbTableRangeKey","cognitoUserPoolId","userPool","cognitoUserPoolArn","cognitoUserPoolPasswordPolicy","passwordPolicy","cognitoAppClientId","userPoolClient","eventBusName","eventBusArn","tagResources","WbyProjectName","String","WbyEnvironment","withServiceManifest","manifests","dynamoTable","resources","table","tableName","forEach","manifest","addServiceManifestTableItem"],"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 { OpenSearch } from \"./CoreOpenSearch\";\nimport { CoreEventBus } from \"./CoreEventBus\";\nimport { CoreFileManger } from \"./CoreFileManager\";\nimport { CoreVpc } from \"./CoreVpc\";\nimport { WatchCommand } from \"./WatchCommand\";\nimport { tagResources } from \"~/utils\";\nimport { withServiceManifest } from \"~/utils/withServiceManifest\";\nimport { addServiceManifestTableItem, TableDefinition } from \"~/utils/addServiceManifestTableItem\";\nimport { DEFAULT_PROD_ENV_NAMES } from \"~/constants\";\nimport * as random from \"@pulumi/random\";\nimport { featureFlags } from \"@webiny/feature-flags\";\nimport { LogDynamo } from \"./LogDynamo\";\n\nexport type CorePulumiApp = ReturnType<typeof createCorePulumiApp>;\n\nexport interface ElasticsearchConfig {\n domainName: string;\n indexPrefix: string;\n sharedIndexes: boolean;\n}\n\nexport interface OpenSearchConfig {\n domainName: string;\n indexPrefix: string;\n sharedIndexes: boolean;\n}\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<boolean | Partial<ElasticsearchConfig>>;\n\n /**\n * Enables OpenSearch infrastructure.\n * Note that it requires also changes in application code.\n */\n openSearch?: PulumiAppParam<boolean | Partial<OpenSearchConfig>>;\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 const app = createPulumiApp({\n name: \"core\",\n path: \"apps/core\",\n config: projectAppParams,\n program: async app => {\n const deploymentId = new random.RandomId(\"deploymentId\", { byteLength: 8 });\n\n let searchEngineType: \"openSearch\" | \"elasticSearch\" | null = null;\n let searchEngineParams:\n | CreateCorePulumiAppParams[\"openSearch\"]\n | CreateCorePulumiAppParams[\"elasticSearch\"]\n | null = null;\n\n if (projectAppParams.openSearch) {\n searchEngineParams = app.getParam(projectAppParams.openSearch);\n searchEngineType = \"openSearch\";\n } else if (projectAppParams.elasticSearch) {\n searchEngineParams = app.getParam(projectAppParams.elasticSearch);\n searchEngineType = \"elasticSearch\";\n }\n\n if (searchEngineParams) {\n const params = app.getParam(searchEngineParams);\n if (typeof params === \"object\") {\n if (params.domainName) {\n process.env.AWS_ELASTIC_SEARCH_DOMAIN_NAME = params.domainName;\n }\n\n if (params.indexPrefix) {\n process.env.ELASTIC_SEARCH_INDEX_PREFIX = params.indexPrefix;\n }\n\n if (params.sharedIndexes) {\n process.env.ELASTICSEARCH_SHARED_INDEXES = \"true\";\n }\n }\n }\n\n const pulumiResourceNamePrefix = app.getParam(\n projectAppParams.pulumiResourceNamePrefix\n );\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 unknown as CorePulumiApp);\n });\n }\n\n const productionEnvironments =\n app.params.create.productionEnvironments || DEFAULT_PROD_ENV_NAMES;\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 const logDynamoDbTable = app.addModule(LogDynamo, { 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 let elasticSearch;\n if (searchEngineType === \"openSearch\") {\n elasticSearch = app.addModule(OpenSearch, { protect });\n } else if (searchEngineType === \"elasticSearch\") {\n elasticSearch = app.addModule(ElasticSearch, { protect });\n }\n\n if (featureFlags.newWatchCommand) {\n app.addModule(WatchCommand, {\n deploymentId: deploymentId.hex\n });\n }\n\n app.addOutputs({\n deploymentId: deploymentId.hex,\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 logDynamodbTableArn: logDynamoDbTable.output.arn,\n logDynamodbTableName: logDynamoDbTable.output.name,\n logDynamodbTableHashKey: logDynamoDbTable.output.hashKey,\n logDynamodbTableRangeKey: logDynamoDbTable.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 eventBusName: eventBus.output.name,\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 logDynamoDbTable,\n vpc,\n ...cognito,\n fileManagerBucket,\n eventBus,\n elasticSearch\n };\n }\n });\n\n return withServiceManifest(app, manifests => {\n const dynamoTable = app.resources.dynamoDbTable;\n\n const table: TableDefinition = {\n tableName: dynamoTable.output.name,\n hashKey: dynamoTable.output.hashKey,\n rangeKey: dynamoTable.output.rangeKey\n };\n\n manifests.forEach(manifest => addServiceManifestTableItem(app, table, manifest));\n });\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["aws","_interopRequireWildcard","require","_pulumi","_CoreCognito","_CoreDynamo","_CoreElasticSearch","_CoreOpenSearch","_CoreEventBus","_CoreFileManager","_CoreVpc","_WatchCommand","_utils","_withServiceManifest","_addServiceManifestTableItem","_constants","random","_featureFlags","_LogDynamo","_variant","_env","_projectName","createCorePulumiApp","projectAppParams","baseApp","createPulumiApp","name","path","config","program","app","deploymentId","RandomId","byteLength","searchEngineType","searchEngineParams","openSearch","getParam","elasticSearch","params","domainName","process","env","AWS_ELASTIC_SEARCH_DOMAIN_NAME","indexPrefix","ELASTIC_SEARCH_INDEX_PREFIX","sharedIndexes","ELASTICSEARCH_SHARED_INDEXES","pulumiResourceNamePrefix","onResource","resource","startsWith","pulumi","addHandler","productionEnvironments","create","DEFAULT_PROD_ENV_NAMES","isProduction","includes","run","protect","legacyConfig","legacy","dynamoDbTable","addModule","CoreDynamo","logDynamoDbTable","LogDynamo","vpcEnabled","vpc","CoreVpc","cognito","CoreCognito","useEmailAsUsername","eventBus","CoreEventBus","bucket","fileManagerBucket","CoreFileManger","OpenSearch","ElasticSearch","featureFlags","newWatchCommand","WatchCommand","hex","addOutputs","region","fileManagerBucketId","output","id","primaryDynamodbTableArn","arn","primaryDynamodbTableName","primaryDynamodbTableHashKey","hashKey","primaryDynamodbTableRangeKey","rangeKey","logDynamodbTableArn","logDynamodbTableName","logDynamodbTableHashKey","logDynamodbTableRangeKey","cognitoUserPoolId","userPool","cognitoUserPoolArn","cognitoUserPoolPasswordPolicy","passwordPolicy","cognitoAppClientId","userPoolClient","eventBusName","eventBusArn","tagResources","WbyProjectName","getEnvVariableWebinyProjectName","WbyEnvironment","getEnvVariableWebinyEnv","WbyEnvironmentVariant","getEnvVariableWebinyVariant","withServiceManifest","manifests","dynamoTable","resources","table","tableName","forEach","manifest","addServiceManifestTableItem","addServiceManifest","dynamodbTable"],"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 { OpenSearch } from \"./CoreOpenSearch\";\nimport { CoreEventBus } from \"./CoreEventBus\";\nimport { CoreFileManger } from \"./CoreFileManager\";\nimport { CoreVpc } from \"./CoreVpc\";\nimport { WatchCommand } from \"./WatchCommand\";\nimport { tagResources } from \"~/utils\";\nimport { withServiceManifest } from \"~/utils/withServiceManifest\";\nimport { addServiceManifestTableItem, TableDefinition } from \"~/utils/addServiceManifestTableItem\";\nimport { DEFAULT_PROD_ENV_NAMES } from \"~/constants\";\nimport * as random from \"@pulumi/random\";\nimport { featureFlags } from \"@webiny/feature-flags\";\nimport { LogDynamo } from \"./LogDynamo\";\nimport { getEnvVariableWebinyVariant } from \"~/env/variant\";\nimport { getEnvVariableWebinyEnv } from \"~/env/env\";\nimport { getEnvVariableWebinyProjectName } from \"~/env/projectName\";\n\nexport type CorePulumiApp = ReturnType<typeof createCorePulumiApp>;\n\nexport interface ElasticsearchConfig {\n domainName: string;\n indexPrefix: string;\n sharedIndexes: boolean;\n}\n\nexport interface OpenSearchConfig {\n domainName: string;\n indexPrefix: string;\n sharedIndexes: boolean;\n}\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<boolean | Partial<ElasticsearchConfig>>;\n\n /**\n * Enables OpenSearch infrastructure.\n * Note that it requires also changes in application code.\n */\n openSearch?: PulumiAppParam<boolean | Partial<OpenSearchConfig>>;\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 const baseApp = createPulumiApp({\n name: \"core\",\n path: \"apps/core\",\n config: projectAppParams,\n program: async app => {\n const deploymentId = new random.RandomId(\"deploymentId\", { byteLength: 8 });\n\n let searchEngineType: \"openSearch\" | \"elasticSearch\" | null = null;\n let searchEngineParams:\n | CreateCorePulumiAppParams[\"openSearch\"]\n | CreateCorePulumiAppParams[\"elasticSearch\"]\n | null = null;\n\n if (projectAppParams.openSearch) {\n searchEngineParams = app.getParam(projectAppParams.openSearch);\n searchEngineType = \"openSearch\";\n } else if (projectAppParams.elasticSearch) {\n searchEngineParams = app.getParam(projectAppParams.elasticSearch);\n searchEngineType = \"elasticSearch\";\n }\n\n if (searchEngineParams) {\n const params = app.getParam(searchEngineParams);\n if (typeof params === \"object\") {\n if (params.domainName) {\n process.env.AWS_ELASTIC_SEARCH_DOMAIN_NAME = params.domainName;\n }\n\n if (params.indexPrefix) {\n process.env.ELASTIC_SEARCH_INDEX_PREFIX = params.indexPrefix;\n }\n\n if (params.sharedIndexes) {\n process.env.ELASTICSEARCH_SHARED_INDEXES = \"true\";\n }\n }\n }\n\n const pulumiResourceNamePrefix = app.getParam(\n projectAppParams.pulumiResourceNamePrefix\n );\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 unknown as CorePulumiApp);\n });\n }\n\n const productionEnvironments =\n app.params.create.productionEnvironments || DEFAULT_PROD_ENV_NAMES;\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 const logDynamoDbTable = app.addModule(LogDynamo, { 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 let elasticSearch;\n if (searchEngineType === \"openSearch\") {\n elasticSearch = app.addModule(OpenSearch, { protect });\n } else if (searchEngineType === \"elasticSearch\") {\n elasticSearch = app.addModule(ElasticSearch, { protect });\n }\n\n if (featureFlags.newWatchCommand) {\n app.addModule(WatchCommand, {\n deploymentId: deploymentId.hex\n });\n }\n\n app.addOutputs({\n deploymentId: deploymentId.hex,\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 logDynamodbTableArn: logDynamoDbTable.output.arn,\n logDynamodbTableName: logDynamoDbTable.output.name,\n logDynamodbTableHashKey: logDynamoDbTable.output.hashKey,\n logDynamodbTableRangeKey: logDynamoDbTable.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 eventBusName: eventBus.output.name,\n eventBusArn: eventBus.output.arn\n });\n\n tagResources({\n WbyProjectName: getEnvVariableWebinyProjectName(),\n WbyEnvironment: getEnvVariableWebinyEnv(),\n WbyEnvironmentVariant: getEnvVariableWebinyVariant()\n });\n\n return {\n dynamoDbTable,\n logDynamoDbTable,\n vpc,\n ...cognito,\n fileManagerBucket,\n eventBus,\n elasticSearch\n };\n }\n });\n\n const app = withServiceManifest(baseApp, manifests => {\n const dynamoTable = baseApp.resources.dynamoDbTable;\n\n const table: TableDefinition = {\n tableName: dynamoTable.output.name,\n hashKey: dynamoTable.output.hashKey,\n rangeKey: dynamoTable.output.rangeKey\n };\n\n manifests.forEach(manifest => addServiceManifestTableItem(baseApp, table, manifest));\n });\n\n app.addHandler(() => {\n app.addServiceManifest({\n name: \"core\",\n manifest: {\n eventBus: {\n arn: baseApp.resources.eventBus.output.arn,\n name: baseApp.resources.eventBus.output.name\n },\n dynamodbTable: {\n arn: baseApp.resources.dynamoDbTable.output.arn,\n name: baseApp.resources.dynamoDbTable.output.name,\n hashKey: baseApp.resources.dynamoDbTable.output.hashKey,\n rangeKey: baseApp.resources.dynamoDbTable.output.rangeKey\n }\n }\n });\n });\n\n return app;\n}\n"],"mappings":"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","ignoreList":[]}
|
package/apps/createAppBucket.js
CHANGED
|
@@ -8,6 +8,7 @@ exports.createPrivateAppBucket = createPrivateAppBucket;
|
|
|
8
8
|
exports.createPublicAppBucket = createPublicAppBucket;
|
|
9
9
|
var aws = _interopRequireWildcard(require("@pulumi/aws"));
|
|
10
10
|
var _api = require("./api");
|
|
11
|
+
var _awsRegion = require("../env/awsRegion");
|
|
11
12
|
function createPublicAppBucket(app, name) {
|
|
12
13
|
const bucket = app.addResource(aws.s3.Bucket, {
|
|
13
14
|
name: name,
|
|
@@ -59,7 +60,7 @@ function createPrivateAppBucket(app, name) {
|
|
|
59
60
|
domainName: bucket.output.bucket.apply(
|
|
60
61
|
// We need to create a regional domain name. Otherwise, we'll run into the following issue:
|
|
61
62
|
// https://aws.amazon.com/premiumsupport/knowledge-center/s3-http-307-response/
|
|
62
|
-
name => `${name}.s3.${
|
|
63
|
+
name => `${name}.s3.${(0, _awsRegion.getEnvVariableAwsRegion)()}.amazonaws.com`),
|
|
63
64
|
s3OriginConfig: {
|
|
64
65
|
originAccessIdentity: originIdentity.output.cloudfrontAccessIdentityPath
|
|
65
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["aws","_interopRequireWildcard","require","_api","createPublicAppBucket","app","name","bucket","addResource","s3","Bucket","config","acl","CannedAcl","PublicRead","forceDestroy","website","indexDocument","errorDocument","origin","originId","output","arn","domainName","websiteEndpoint","customOriginConfig","originProtocolPolicy","httpPort","httpsPort","originSslProtocols","createPrivateAppBucket","api","getModule","ApiOutput","Private","originIdentity","cloudfront","OriginAccessIdentity","apply","
|
|
1
|
+
{"version":3,"names":["aws","_interopRequireWildcard","require","_api","_awsRegion","createPublicAppBucket","app","name","bucket","addResource","s3","Bucket","config","acl","CannedAcl","PublicRead","forceDestroy","website","indexDocument","errorDocument","origin","originId","output","arn","domainName","websiteEndpoint","customOriginConfig","originProtocolPolicy","httpPort","httpsPort","originSslProtocols","createPrivateAppBucket","api","getModule","ApiOutput","Private","originIdentity","cloudfront","OriginAccessIdentity","apply","getEnvVariableAwsRegion","s3OriginConfig","originAccessIdentity","cloudfrontAccessIdentityPath","bucketPublicAccessBlock","BucketPublicAccessBlock","id","blockPublicAcls","blockPublicPolicy","ignorePublicAcls","restrictPublicBuckets","bucketPolicy","BucketPolicy","policy","Version","Statement","statements","Effect","Principal","AWS","iamArn","Action","Resource","graphqlLambdaRole"],"sources":["createAppBucket.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport { PulumiApp } from \"@webiny/pulumi\";\nimport { ApiOutput } from \"~/apps/api\";\nimport { getEnvVariableAwsRegion } from \"~/env/awsRegion\";\n\nexport function createPublicAppBucket(app: PulumiApp, name: string) {\n const bucket = app.addResource(aws.s3.Bucket, {\n name: name,\n config: {\n acl: aws.s3.CannedAcl.PublicRead,\n forceDestroy: true,\n website: {\n indexDocument: \"index.html\",\n errorDocument: \"_NOT_FOUND_PAGE_/index.html\"\n }\n }\n });\n\n const origin: aws.types.input.cloudfront.DistributionOrigin = {\n originId: bucket.output.arn,\n domainName: bucket.output.websiteEndpoint,\n customOriginConfig: {\n originProtocolPolicy: \"http-only\",\n httpPort: 80,\n httpsPort: 443,\n originSslProtocols: [\"TLSv1.2\"]\n }\n };\n\n return {\n bucket,\n origin\n };\n}\n\n// Forces S3 buckets to be available only through a cloudfront distribution.\n// Requires `ApiOutput` module to be loaded.\nexport function createPrivateAppBucket(app: PulumiApp, name: string) {\n const api = app.getModule(ApiOutput);\n\n const bucket = app.addResource(aws.s3.Bucket, {\n name: name,\n config: {\n acl: aws.s3.CannedAcl.Private,\n forceDestroy: true\n }\n });\n\n // Origin Identity is a kind of AWS user that represents Cloudfront distribution\n // We can add IAM policies to it later, to allow accessing private S3 bucket\n const originIdentity = app.addResource(aws.cloudfront.OriginAccessIdentity, {\n name: `${name}-origin-identity`,\n config: {}\n });\n\n const origin: aws.types.input.cloudfront.DistributionOrigin = {\n originId: bucket.output.arn,\n domainName: bucket.output.bucket.apply(\n // We need to create a regional domain name. Otherwise, we'll run into the following issue:\n // https://aws.amazon.com/premiumsupport/knowledge-center/s3-http-307-response/\n name => `${name}.s3.${getEnvVariableAwsRegion()}.amazonaws.com`\n ),\n s3OriginConfig: {\n originAccessIdentity: originIdentity.output.cloudfrontAccessIdentityPath\n }\n };\n\n // block any public access\n const bucketPublicAccessBlock = app.addResource(aws.s3.BucketPublicAccessBlock, {\n name: `${name}-bucket-block-access`,\n config: {\n bucket: bucket.output.id,\n blockPublicAcls: true,\n blockPublicPolicy: true,\n ignorePublicAcls: true,\n restrictPublicBuckets: true\n }\n });\n\n // Create an IAM policy to allow access to S3 bucket from cloudfront\n const bucketPolicy = app.addResource(aws.s3.BucketPolicy, {\n name: `${name}-bucket-policy`,\n config: {\n bucket: bucket.output.bucket,\n policy: {\n Version: \"2012-10-17\",\n Statement: bucket.output.arn.apply(arn => {\n const statements: aws.iam.PolicyStatement[] = [\n {\n Effect: \"Allow\",\n Principal: { AWS: originIdentity.output.iamArn },\n // we need GetObject to retrieve objects from S3\n // and ListBucket allows to properly handle non-existing files (404)\n Action: [\"s3:ListBucket\", \"s3:GetObject\"],\n Resource: [`${arn}`, `${arn}/*`]\n },\n {\n Effect: \"Allow\",\n Principal: {\n AWS: api.graphqlLambdaRole\n },\n Action: [\n \"s3:GetObjectAcl\",\n \"s3:DeleteObject\",\n \"s3:PutObjectAcl\",\n \"s3:PutObject\",\n \"s3:GetObject\",\n \"s3:ListBucket\"\n ],\n Resource: [`${arn}`, `${arn}/*`]\n }\n ];\n\n return statements;\n })\n }\n }\n });\n\n return {\n bucket,\n originIdentity,\n origin,\n bucketPublicAccessBlock,\n bucketPolicy\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -13,6 +13,9 @@ var _createAppBucket = require("../createAppBucket");
|
|
|
13
13
|
var _customDomain = require("../customDomain");
|
|
14
14
|
var _withServiceManifest = require("../../utils/withServiceManifest");
|
|
15
15
|
var _ = require("./..");
|
|
16
|
+
var _variant = require("../../env/variant");
|
|
17
|
+
var _env = require("../../env/env");
|
|
18
|
+
var _projectName = require("../../env/projectName");
|
|
16
19
|
const createReactPulumiApp = projectAppParams => {
|
|
17
20
|
const app = (0, _pulumi2.createPulumiApp)({
|
|
18
21
|
name: projectAppParams.name,
|
|
@@ -117,8 +120,9 @@ const createReactPulumiApp = projectAppParams => {
|
|
|
117
120
|
});
|
|
118
121
|
(0, _utils.tagResources)({
|
|
119
122
|
WbyAppName: name,
|
|
120
|
-
WbyProjectName:
|
|
121
|
-
WbyEnvironment:
|
|
123
|
+
WbyProjectName: (0, _projectName.getEnvVariableWebinyProjectName)(),
|
|
124
|
+
WbyEnvironment: (0, _env.getEnvVariableWebinyEnv)(),
|
|
125
|
+
WbyEnvironmentVariant: (0, _variant.getEnvVariableWebinyVariant)()
|
|
122
126
|
});
|
|
123
127
|
|
|
124
128
|
/**
|
|
@@ -132,7 +136,7 @@ const createReactPulumiApp = projectAppParams => {
|
|
|
132
136
|
rangeKey: pulumi.output(core.primaryDynamodbTableRangeKey).apply(key => key || "SK"),
|
|
133
137
|
item: pulumi.interpolate`{
|
|
134
138
|
"PK": {"S": "ADMIN#SETTINGS"},
|
|
135
|
-
"SK": {"S": "
|
|
139
|
+
"SK": {"S": "default"},
|
|
136
140
|
"data": {
|
|
137
141
|
"M": {
|
|
138
142
|
"appUrl": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["aws","_interopRequireWildcard","require","pulumi","_pulumi2","_utils","_createAppBucket","_customDomain","_withServiceManifest","_","createReactPulumiApp","projectAppParams","app","createPulumiApp","name","path","folder","config","program","pulumiResourceNamePrefix","getParam","onResource","resource","startsWith","core","addModule","CoreOutput","ApiOutput","addHandler","bucket","createPrivateAppBucket","cloudfront","addResource","Distribution","enabled","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","opts","ignoreChanges","domains","applyCustomDomain","addOutput","output","id","addDomainsUrlsOutputs","cloudfrontDistribution","map","distributionDomain","distributionUrl","usedDomain","usedUrl","tagResources","WbyAppName","WbyProjectName","String","process","env","WbyEnvironment","dynamodb","TableItem","tableName","primaryDynamodbTableName","hashKey","primaryDynamodbTableHashKey","rangeKey","primaryDynamodbTableRangeKey","apply","key","item","interpolate","params","run","variant","domainName","value","withServiceManifest","exports"],"sources":["createReactPulumiApp.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport { createPulumiApp, PulumiAppParam, PulumiAppParamCallback } from \"@webiny/pulumi\";\nimport { addDomainsUrlsOutputs, tagResources } from \"~/utils\";\nimport { createPrivateAppBucket } from \"../createAppBucket\";\nimport { applyCustomDomain, CustomDomainParams } from \"../customDomain\";\nimport { withServiceManifest } from \"~/utils/withServiceManifest\";\nimport { ApiOutput, CoreOutput } from \"~/apps\";\n\nexport type ReactPulumiApp = ReturnType<typeof createReactPulumiApp>;\n\nexport interface CreateReactPulumiAppParams {\n /**\n * A name of the app, e.g., \"user-area\"\n */\n name: string;\n\n /**\n * A folder where the app is located, e.g., \"apps/user-area\"\n */\n folder: string;\n\n /** Custom domain configuration */\n domains?: PulumiAppParamCallback<CustomDomainParams>;\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: ReactPulumiApp) => 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 const createReactPulumiApp = (projectAppParams: CreateReactPulumiAppParams) => {\n const app = createPulumiApp({\n name: projectAppParams.name,\n path: projectAppParams.folder,\n config: projectAppParams,\n program: async app => {\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 const { name } = projectAppParams;\n\n // Register core output as a module available for all other modules\n const core = app.addModule(CoreOutput);\n app.addModule(ApiOutput);\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 unknown as ReactPulumiApp);\n });\n }\n\n const bucket = createPrivateAppBucket(app, `${name}-app`);\n\n const cloudfront = app.addResource(aws.cloudfront.Distribution, {\n name: `${name}-app-cdn`,\n config: {\n enabled: true,\n waitForDeployment: false,\n origins: [bucket.origin],\n defaultRootObject: \"index.html\",\n defaultCacheBehavior: {\n compress: true,\n targetOriginId: bucket.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: 600,\n maxTtl: 600\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 opts: {\n // We are ignoring changes to the \"staging\" property. This is because of the following.\n // With the 5.41.0 release of Webiny, we also upgraded Pulumi to v6. This introduced a change\n // with how Cloudfront distributions are deployed, where Pulumi now also controls the new\n // `staging` property.\n // If not set, Pulumi will default it to `false`. Which is fine, but, the problem is\n // that, because this property did not exist before, it will always be considered as a change\n // upon deployment.\n // We might think this is fine, but, the problem is that a change in this property causes\n // a full replacement of the Cloudfront distribution, which is not acceptable. Especially\n // if a custom domain has already been associated with the distribution. This then would\n // require the user to disassociate the domain, wait for the distribution to be replaced,\n // and then re-associate the domain. This is not a good experience.\n ignoreChanges: [\"staging\"]\n }\n });\n\n const domains = app.getParam(projectAppParams.domains);\n if (domains) {\n applyCustomDomain(cloudfront, domains);\n }\n\n app.addOutput(\"appStorage\", bucket.bucket.output.id);\n\n app.addHandler(() => {\n addDomainsUrlsOutputs({\n app,\n cloudfrontDistribution: cloudfront,\n map: {\n distributionDomain: \"cloudfrontAppDomain\",\n distributionUrl: \"cloudfrontAppUrl\",\n usedDomain: \"appDomain\",\n usedUrl: \"appUrl\"\n }\n });\n });\n\n tagResources({\n WbyAppName: name,\n WbyProjectName: String(process.env[\"WEBINY_PROJECT_NAME\"]),\n WbyEnvironment: String(process.env[\"WEBINY_ENV\"])\n });\n\n /**\n * We need to store the appUrl to the admin settings item in the dynamodb\n */\n app.addResource(aws.dynamodb.TableItem, {\n name: \"adminSettings\",\n config: {\n tableName: core.primaryDynamodbTableName,\n hashKey: core.primaryDynamodbTableHashKey,\n rangeKey: pulumi\n .output(core.primaryDynamodbTableRangeKey)\n .apply(key => key || \"SK\"),\n item: pulumi.interpolate`{\n \"PK\": {\"S\": \"ADMIN#SETTINGS\"},\n \"SK\": {\"S\": \"${app.params.run.variant || \"default\"}\"},\n \"data\": {\n \"M\": {\n \"appUrl\": {\n \"S\": \"${cloudfront.output.domainName.apply(\n value => `https://${value}`\n )}\"\n }\n }\n }\n }`\n }\n });\n\n return {\n ...bucket,\n cloudfront\n };\n }\n });\n\n return withServiceManifest(app);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["aws","_interopRequireWildcard","require","pulumi","_pulumi2","_utils","_createAppBucket","_customDomain","_withServiceManifest","_","_variant","_env","_projectName","createReactPulumiApp","projectAppParams","app","createPulumiApp","name","path","folder","config","program","pulumiResourceNamePrefix","getParam","onResource","resource","startsWith","core","addModule","CoreOutput","ApiOutput","addHandler","bucket","createPrivateAppBucket","cloudfront","addResource","Distribution","enabled","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","opts","ignoreChanges","domains","applyCustomDomain","addOutput","output","id","addDomainsUrlsOutputs","cloudfrontDistribution","map","distributionDomain","distributionUrl","usedDomain","usedUrl","tagResources","WbyAppName","WbyProjectName","getEnvVariableWebinyProjectName","WbyEnvironment","getEnvVariableWebinyEnv","WbyEnvironmentVariant","getEnvVariableWebinyVariant","dynamodb","TableItem","tableName","primaryDynamodbTableName","hashKey","primaryDynamodbTableHashKey","rangeKey","primaryDynamodbTableRangeKey","apply","key","item","interpolate","domainName","value","withServiceManifest","exports"],"sources":["createReactPulumiApp.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport { createPulumiApp, PulumiAppParam, PulumiAppParamCallback } from \"@webiny/pulumi\";\nimport { addDomainsUrlsOutputs, tagResources } from \"~/utils\";\nimport { createPrivateAppBucket } from \"../createAppBucket\";\nimport { applyCustomDomain, CustomDomainParams } from \"../customDomain\";\nimport { withServiceManifest } from \"~/utils/withServiceManifest\";\nimport { ApiOutput, CoreOutput } from \"~/apps\";\nimport { getEnvVariableWebinyVariant } from \"~/env/variant\";\nimport { getEnvVariableWebinyEnv } from \"~/env/env\";\nimport { getEnvVariableWebinyProjectName } from \"~/env/projectName\";\n\nexport type ReactPulumiApp = ReturnType<typeof createReactPulumiApp>;\n\nexport interface CreateReactPulumiAppParams {\n /**\n * A name of the app, e.g., \"user-area\"\n */\n name: string;\n\n /**\n * A folder where the app is located, e.g., \"apps/user-area\"\n */\n folder: string;\n\n /** Custom domain configuration */\n domains?: PulumiAppParamCallback<CustomDomainParams>;\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: ReactPulumiApp) => 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 const createReactPulumiApp = (projectAppParams: CreateReactPulumiAppParams) => {\n const app = createPulumiApp({\n name: projectAppParams.name,\n path: projectAppParams.folder,\n config: projectAppParams,\n program: async app => {\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 const { name } = projectAppParams;\n\n // Register core output as a module available for all other modules\n const core = app.addModule(CoreOutput);\n app.addModule(ApiOutput);\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 unknown as ReactPulumiApp);\n });\n }\n\n const bucket = createPrivateAppBucket(app, `${name}-app`);\n\n const cloudfront = app.addResource(aws.cloudfront.Distribution, {\n name: `${name}-app-cdn`,\n config: {\n enabled: true,\n waitForDeployment: false,\n origins: [bucket.origin],\n defaultRootObject: \"index.html\",\n defaultCacheBehavior: {\n compress: true,\n targetOriginId: bucket.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: 600,\n maxTtl: 600\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 opts: {\n // We are ignoring changes to the \"staging\" property. This is because of the following.\n // With the 5.41.0 release of Webiny, we also upgraded Pulumi to v6. This introduced a change\n // with how Cloudfront distributions are deployed, where Pulumi now also controls the new\n // `staging` property.\n // If not set, Pulumi will default it to `false`. Which is fine, but, the problem is\n // that, because this property did not exist before, it will always be considered as a change\n // upon deployment.\n // We might think this is fine, but, the problem is that a change in this property causes\n // a full replacement of the Cloudfront distribution, which is not acceptable. Especially\n // if a custom domain has already been associated with the distribution. This then would\n // require the user to disassociate the domain, wait for the distribution to be replaced,\n // and then re-associate the domain. This is not a good experience.\n ignoreChanges: [\"staging\"]\n }\n });\n\n const domains = app.getParam(projectAppParams.domains);\n if (domains) {\n applyCustomDomain(cloudfront, domains);\n }\n\n app.addOutput(\"appStorage\", bucket.bucket.output.id);\n\n app.addHandler(() => {\n addDomainsUrlsOutputs({\n app,\n cloudfrontDistribution: cloudfront,\n map: {\n distributionDomain: \"cloudfrontAppDomain\",\n distributionUrl: \"cloudfrontAppUrl\",\n usedDomain: \"appDomain\",\n usedUrl: \"appUrl\"\n }\n });\n });\n\n tagResources({\n WbyAppName: name,\n WbyProjectName: getEnvVariableWebinyProjectName(),\n WbyEnvironment: getEnvVariableWebinyEnv(),\n WbyEnvironmentVariant: getEnvVariableWebinyVariant()\n });\n\n /**\n * We need to store the appUrl to the admin settings item in the dynamodb\n */\n app.addResource(aws.dynamodb.TableItem, {\n name: \"adminSettings\",\n config: {\n tableName: core.primaryDynamodbTableName,\n hashKey: core.primaryDynamodbTableHashKey,\n rangeKey: pulumi\n .output(core.primaryDynamodbTableRangeKey)\n .apply(key => key || \"SK\"),\n item: pulumi.interpolate`{\n \"PK\": {\"S\": \"ADMIN#SETTINGS\"},\n \"SK\": {\"S\": \"default\"},\n \"data\": {\n \"M\": {\n \"appUrl\": {\n \"S\": \"${cloudfront.output.domainName.apply(\n value => `https://${value}`\n )}\"\n }\n }\n }\n }`\n }\n });\n\n return {\n ...bucket,\n cloudfront\n };\n }\n });\n\n return withServiceManifest(app);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { PulumiAppModule } from "@webiny/pulumi";
|
|
2
|
+
export type SyncSystemDynamo = PulumiAppModule<typeof SyncSystemDynamo>;
|
|
3
|
+
export declare const SyncSystemDynamo: import("@webiny/pulumi").PulumiAppModuleDefinition<import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/dynamodb/table").Table>, {
|
|
4
|
+
protect: boolean;
|
|
5
|
+
}>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.SyncSystemDynamo = void 0;
|
|
8
|
+
var aws = _interopRequireWildcard(require("@pulumi/aws"));
|
|
9
|
+
var _pulumi = require("@webiny/pulumi");
|
|
10
|
+
const SyncSystemDynamo = exports.SyncSystemDynamo = (0, _pulumi.createAppModule)({
|
|
11
|
+
name: "SyncSystemDynamoDb",
|
|
12
|
+
config(app, params) {
|
|
13
|
+
return app.addResource(aws.dynamodb.Table, {
|
|
14
|
+
name: "sync-table",
|
|
15
|
+
config: {
|
|
16
|
+
attributes: [{
|
|
17
|
+
name: "PK",
|
|
18
|
+
type: "S"
|
|
19
|
+
}, {
|
|
20
|
+
name: "SK",
|
|
21
|
+
type: "S"
|
|
22
|
+
}, {
|
|
23
|
+
name: "GSI1_PK",
|
|
24
|
+
type: "S"
|
|
25
|
+
}, {
|
|
26
|
+
name: "GSI1_SK",
|
|
27
|
+
type: "S"
|
|
28
|
+
}, {
|
|
29
|
+
name: "GSI2_PK",
|
|
30
|
+
type: "S"
|
|
31
|
+
}, {
|
|
32
|
+
name: "GSI2_SK",
|
|
33
|
+
type: "S"
|
|
34
|
+
}],
|
|
35
|
+
billingMode: "PAY_PER_REQUEST",
|
|
36
|
+
hashKey: "PK",
|
|
37
|
+
rangeKey: "SK",
|
|
38
|
+
globalSecondaryIndexes: [
|
|
39
|
+
// TODO possibly add more indexes here
|
|
40
|
+
{
|
|
41
|
+
name: "GSI1",
|
|
42
|
+
hashKey: "GSI1_PK",
|
|
43
|
+
rangeKey: "GSI1_SK",
|
|
44
|
+
projectionType: "ALL"
|
|
45
|
+
}, {
|
|
46
|
+
name: "GSI2",
|
|
47
|
+
hashKey: "GSI2_PK",
|
|
48
|
+
rangeKey: "GSI2_SK",
|
|
49
|
+
projectionType: "ALL"
|
|
50
|
+
}]
|
|
51
|
+
},
|
|
52
|
+
opts: {
|
|
53
|
+
protect: params.protect
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=SyncSystemDynamo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["aws","_interopRequireWildcard","require","_pulumi","SyncSystemDynamo","exports","createAppModule","name","config","app","params","addResource","dynamodb","Table","attributes","type","billingMode","hashKey","rangeKey","globalSecondaryIndexes","projectionType","opts","protect"],"sources":["SyncSystemDynamo.ts"],"sourcesContent":["import * as aws from \"@pulumi/aws\";\nimport { createAppModule, PulumiApp, PulumiAppModule } from \"@webiny/pulumi\";\n\nexport type SyncSystemDynamo = PulumiAppModule<typeof SyncSystemDynamo>;\n\nexport const SyncSystemDynamo = createAppModule({\n name: \"SyncSystemDynamoDb\",\n config(app: PulumiApp, params: { protect: boolean }) {\n return app.addResource(aws.dynamodb.Table, {\n name: \"sync-table\",\n config: {\n attributes: [\n { name: \"PK\", type: \"S\" },\n { name: \"SK\", type: \"S\" },\n { name: \"GSI1_PK\", type: \"S\" },\n { name: \"GSI1_SK\", type: \"S\" },\n { name: \"GSI2_PK\", type: \"S\" },\n { name: \"GSI2_SK\", type: \"S\" }\n ],\n billingMode: \"PAY_PER_REQUEST\",\n hashKey: \"PK\",\n rangeKey: \"SK\",\n globalSecondaryIndexes: [\n // TODO possibly add more indexes here\n {\n name: \"GSI1\",\n hashKey: \"GSI1_PK\",\n rangeKey: \"GSI1_SK\",\n projectionType: \"ALL\"\n },\n {\n name: \"GSI2\",\n hashKey: \"GSI2_PK\",\n rangeKey: \"GSI2_SK\",\n projectionType: \"ALL\"\n }\n ]\n },\n opts: {\n protect: params.protect\n }\n });\n }\n});\n"],"mappings":";;;;;;;AAAA,IAAAA,GAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAIO,MAAME,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAG,IAAAE,uBAAe,EAAC;EAC5CC,IAAI,EAAE,oBAAoB;EAC1BC,MAAMA,CAACC,GAAc,EAAEC,MAA4B,EAAE;IACjD,OAAOD,GAAG,CAACE,WAAW,CAACX,GAAG,CAACY,QAAQ,CAACC,KAAK,EAAE;MACvCN,IAAI,EAAE,YAAY;MAClBC,MAAM,EAAE;QACJM,UAAU,EAAE,CACR;UAAEP,IAAI,EAAE,IAAI;UAAEQ,IAAI,EAAE;QAAI,CAAC,EACzB;UAAER,IAAI,EAAE,IAAI;UAAEQ,IAAI,EAAE;QAAI,CAAC,EACzB;UAAER,IAAI,EAAE,SAAS;UAAEQ,IAAI,EAAE;QAAI,CAAC,EAC9B;UAAER,IAAI,EAAE,SAAS;UAAEQ,IAAI,EAAE;QAAI,CAAC,EAC9B;UAAER,IAAI,EAAE,SAAS;UAAEQ,IAAI,EAAE;QAAI,CAAC,EAC9B;UAAER,IAAI,EAAE,SAAS;UAAEQ,IAAI,EAAE;QAAI,CAAC,CACjC;QACDC,WAAW,EAAE,iBAAiB;QAC9BC,OAAO,EAAE,IAAI;QACbC,QAAQ,EAAE,IAAI;QACdC,sBAAsB,EAAE;QACpB;QACA;UACIZ,IAAI,EAAE,MAAM;UACZU,OAAO,EAAE,SAAS;UAClBC,QAAQ,EAAE,SAAS;UACnBE,cAAc,EAAE;QACpB,CAAC,EACD;UACIb,IAAI,EAAE,MAAM;UACZU,OAAO,EAAE,SAAS;UAClBC,QAAQ,EAAE,SAAS;UACnBE,cAAc,EAAE;QACpB,CAAC;MAET,CAAC;MACDC,IAAI,EAAE;QACFC,OAAO,EAAEZ,MAAM,CAACY;MACpB;IACJ,CAAC,CAAC;EACN;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PulumiAppModule } from "@webiny/pulumi";
|
|
2
|
+
export interface SyncSystemLambdaParams {
|
|
3
|
+
protect: boolean;
|
|
4
|
+
config: Record<string, string>;
|
|
5
|
+
}
|
|
6
|
+
export type SyncSystemLambda = PulumiAppModule<typeof SyncSystemLambda>;
|
|
7
|
+
export declare const SyncSystemLambda: import("@webiny/pulumi").PulumiAppModuleDefinition<{
|
|
8
|
+
role: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/iam/role").Role>;
|
|
9
|
+
policy: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/iam/policy").Policy>;
|
|
10
|
+
functions: {
|
|
11
|
+
syncSystem: import("@webiny/pulumi").PulumiAppResource<typeof import("@pulumi/aws/lambda/function").Function>;
|
|
12
|
+
};
|
|
13
|
+
}, SyncSystemLambdaParams>;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.SyncSystemLambda = void 0;
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
var pulumi = _interopRequireWildcard(require("@pulumi/pulumi"));
|
|
11
|
+
var aws = _interopRequireWildcard(require("@pulumi/aws"));
|
|
12
|
+
var _pulumi2 = require("@webiny/pulumi");
|
|
13
|
+
var _lambdaUtils = require("../lambdaUtils");
|
|
14
|
+
var _2 = require("./..");
|
|
15
|
+
var _awsUtils = require("../awsUtils");
|
|
16
|
+
var _constants = require("../../constants");
|
|
17
|
+
var _SyncSystemDynamo = require("./SyncSystemDynamo");
|
|
18
|
+
const SyncSystemLambda = exports.SyncSystemLambda = (0, _pulumi2.createAppModule)({
|
|
19
|
+
name: "SyncSystemLambda",
|
|
20
|
+
// eslint-disable-next-line
|
|
21
|
+
config(app, _) {
|
|
22
|
+
const policy = createSyncSystemLambdaPolicy({
|
|
23
|
+
app,
|
|
24
|
+
// TODO - get bucket ids and dynamodb tables from the FileManager app
|
|
25
|
+
primary: {
|
|
26
|
+
fileManagerBucketId: "primaryFileManagerBucketId",
|
|
27
|
+
dynamoDbTableArn: ""
|
|
28
|
+
},
|
|
29
|
+
secondary: {
|
|
30
|
+
fileManagerBucketId: "secondaryFileManagerBucketId",
|
|
31
|
+
dynamoDbTableArn: ""
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
const role = (0, _lambdaUtils.createLambdaRole)(app, {
|
|
35
|
+
name: "sync-system-lambda-role",
|
|
36
|
+
policy: policy.output
|
|
37
|
+
});
|
|
38
|
+
const syncSystemLambda = app.addResource(aws.lambda.Function, {
|
|
39
|
+
name: "sync-system-lambda",
|
|
40
|
+
config: {
|
|
41
|
+
runtime: _constants.LAMBDA_RUNTIME,
|
|
42
|
+
handler: "handler.handler",
|
|
43
|
+
role: role.output.arn,
|
|
44
|
+
timeout: 900,
|
|
45
|
+
memorySize: 1024,
|
|
46
|
+
code: new pulumi.asset.AssetArchive({
|
|
47
|
+
".": new pulumi.asset.FileArchive(_path.default.join(app.paths.workspace, "transfer/build"))
|
|
48
|
+
}),
|
|
49
|
+
environment: {
|
|
50
|
+
variables: (0, _lambdaUtils.getCommonLambdaEnvVariables)().apply(value => ({
|
|
51
|
+
...value,
|
|
52
|
+
AWS_NODEJS_CONNECTION_REUSE_ENABLED: "1"
|
|
53
|
+
}))
|
|
54
|
+
},
|
|
55
|
+
vpcConfig: app.getModule(_2.VpcConfig).functionVpcConfig
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
role,
|
|
60
|
+
policy,
|
|
61
|
+
functions: {
|
|
62
|
+
syncSystem: syncSystemLambda
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
function createSyncSystemLambdaPolicy(params) {
|
|
68
|
+
const {
|
|
69
|
+
app,
|
|
70
|
+
primary,
|
|
71
|
+
secondary
|
|
72
|
+
} = params;
|
|
73
|
+
const dynamoDbTable = app.getModule(_SyncSystemDynamo.SyncSystemDynamo);
|
|
74
|
+
const awsAccountId = (0, _awsUtils.getAwsAccountId)(app);
|
|
75
|
+
const awsRegion = (0, _awsUtils.getAwsRegion)(app);
|
|
76
|
+
const policy = {
|
|
77
|
+
Version: "2012-10-17",
|
|
78
|
+
Statement: [{
|
|
79
|
+
Sid: "PermissionForDynamodb",
|
|
80
|
+
Effect: "Allow",
|
|
81
|
+
Action: ["dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:ConditionCheckItem", "dynamodb:CreateBackup", "dynamodb:CreateTable", "dynamodb:CreateTableReplica", "dynamodb:DeleteBackup", "dynamodb:DeleteItem", "dynamodb:DeleteTable", "dynamodb:DeleteTableReplica", "dynamodb:DescribeBackup", "dynamodb:DescribeContinuousBackups", "dynamodb:DescribeContributorInsights", "dynamodb:DescribeExport", "dynamodb:DescribeKinesisStreamingDestination", "dynamodb:DescribeLimits", "dynamodb:DescribeReservedCapacity", "dynamodb:DescribeReservedCapacityOfferings", "dynamodb:DescribeStream", "dynamodb:DescribeTable", "dynamodb:DescribeTableReplicaAutoScaling", "dynamodb:DescribeTimeToLive", "dynamodb:DisableKinesisStreamingDestination", "dynamodb:EnableKinesisStreamingDestination", "dynamodb:ExportTableToPointInTime", "dynamodb:GetItem", "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:ListBackups", "dynamodb:ListContributorInsights", "dynamodb:ListExports", "dynamodb:ListStreams", "dynamodb:ListTables", "dynamodb:ListTagsOfResource", "dynamodb:PartiQLDelete", "dynamodb:PartiQLInsert", "dynamodb:PartiQLSelect", "dynamodb:PartiQLUpdate", "dynamodb:PurchaseReservedCapacityOfferings", "dynamodb:PutItem", "dynamodb:Query", "dynamodb:RestoreTableFromBackup", "dynamodb:RestoreTableToPointInTime", "dynamodb:Scan", "dynamodb:UpdateContinuousBackups", "dynamodb:UpdateContributorInsights", "dynamodb:UpdateItem", "dynamodb:UpdateTable", "dynamodb:UpdateTableReplicaAutoScaling", "dynamodb:UpdateTimeToLive"],
|
|
82
|
+
Resource: [`${dynamoDbTable.output.arn}`, `${dynamoDbTable.output.arn}/*`]
|
|
83
|
+
}, {
|
|
84
|
+
Sid: "PermissionForS3",
|
|
85
|
+
Effect: "Allow",
|
|
86
|
+
Action: ["s3:ListBucket", "s3:GetObjectAcl", "s3:DeleteObject", "s3:PutObjectAcl", "s3:PutObject", "s3:GetObject"],
|
|
87
|
+
Resource: [pulumi.interpolate`arn:aws:s3:::${primary.fileManagerBucketId}`, pulumi.interpolate`arn:aws:s3:::${primary.fileManagerBucketId}/*`, pulumi.interpolate`arn:aws:s3:::${secondary.fileManagerBucketId}`, pulumi.interpolate`arn:aws:s3:::${secondary.fileManagerBucketId}/*`]
|
|
88
|
+
}, {
|
|
89
|
+
Sid: "PermissionForLambda",
|
|
90
|
+
Effect: "Allow",
|
|
91
|
+
Action: ["lambda:InvokeFunction"],
|
|
92
|
+
Resource: pulumi.interpolate`arn:aws:lambda:${awsRegion}:${awsAccountId}:function:*`
|
|
93
|
+
}]
|
|
94
|
+
};
|
|
95
|
+
return app.addResource(aws.iam.Policy, {
|
|
96
|
+
name: "SyncSystemLambdaPolicy",
|
|
97
|
+
config: {
|
|
98
|
+
description: "This policy enables access to Dynamodb, S3 and Lambda.",
|
|
99
|
+
policy
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
//# sourceMappingURL=SyncSystemLambda.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_path","_interopRequireDefault","require","pulumi","_interopRequireWildcard","aws","_pulumi2","_lambdaUtils","_2","_awsUtils","_constants","_SyncSystemDynamo","SyncSystemLambda","exports","createAppModule","name","config","app","_","policy","createSyncSystemLambdaPolicy","primary","fileManagerBucketId","dynamoDbTableArn","secondary","role","createLambdaRole","output","syncSystemLambda","addResource","lambda","Function","runtime","LAMBDA_RUNTIME","handler","arn","timeout","memorySize","code","asset","AssetArchive","FileArchive","path","join","paths","workspace","environment","variables","getCommonLambdaEnvVariables","apply","value","AWS_NODEJS_CONNECTION_REUSE_ENABLED","vpcConfig","getModule","VpcConfig","functionVpcConfig","functions","syncSystem","params","dynamoDbTable","SyncSystemDynamo","awsAccountId","getAwsAccountId","awsRegion","getAwsRegion","Version","Statement","Sid","Effect","Action","Resource","interpolate","iam","Policy","description"],"sources":["SyncSystemLambda.ts"],"sourcesContent":["import path from \"path\";\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport { createAppModule, PulumiApp, PulumiAppModule } from \"@webiny/pulumi\";\nimport { createLambdaRole, getCommonLambdaEnvVariables } from \"../lambdaUtils\";\nimport { VpcConfig } from \"~/apps\";\nimport { getAwsAccountId, getAwsRegion } from \"../awsUtils\";\nimport { LAMBDA_RUNTIME } from \"~/constants\";\nimport { SyncSystemDynamo } from \"./SyncSystemDynamo\";\n\nexport interface SyncSystemLambdaParams {\n protect: boolean;\n config: Record<string, string>;\n}\n\nexport type SyncSystemLambda = PulumiAppModule<typeof SyncSystemLambda>;\n\nexport const SyncSystemLambda = createAppModule({\n name: \"SyncSystemLambda\",\n // eslint-disable-next-line\n config(app: PulumiApp, _: SyncSystemLambdaParams) {\n const policy = createSyncSystemLambdaPolicy({\n app,\n // TODO - get bucket ids and dynamodb tables from the FileManager app\n primary: {\n fileManagerBucketId: \"primaryFileManagerBucketId\",\n dynamoDbTableArn: \"\"\n },\n secondary: {\n fileManagerBucketId: \"secondaryFileManagerBucketId\",\n dynamoDbTableArn: \"\"\n }\n });\n const role = createLambdaRole(app, {\n name: \"sync-system-lambda-role\",\n policy: policy.output\n });\n\n const syncSystemLambda = app.addResource(aws.lambda.Function, {\n name: \"sync-system-lambda\",\n config: {\n runtime: LAMBDA_RUNTIME,\n handler: \"handler.handler\",\n role: role.output.arn,\n timeout: 900,\n memorySize: 1024,\n code: new pulumi.asset.AssetArchive({\n \".\": new pulumi.asset.FileArchive(\n path.join(app.paths.workspace, \"transfer/build\")\n )\n }),\n environment: {\n variables: getCommonLambdaEnvVariables().apply(value => ({\n ...value,\n AWS_NODEJS_CONNECTION_REUSE_ENABLED: \"1\"\n }))\n },\n vpcConfig: app.getModule(VpcConfig).functionVpcConfig\n }\n });\n\n return {\n role,\n policy,\n functions: {\n syncSystem: syncSystemLambda\n }\n };\n }\n});\n\ninterface ICreateSyncSystemLambdaPolicyParamsType {\n fileManagerBucketId: string;\n dynamoDbTableArn: string;\n}\n\ninterface ICreateSyncSystemLambdaPolicyParams {\n app: PulumiApp;\n primary: ICreateSyncSystemLambdaPolicyParamsType;\n secondary: ICreateSyncSystemLambdaPolicyParamsType;\n}\n\nfunction createSyncSystemLambdaPolicy(params: ICreateSyncSystemLambdaPolicyParams) {\n const { app, primary, secondary } = params;\n const dynamoDbTable = app.getModule(SyncSystemDynamo);\n const awsAccountId = getAwsAccountId(app);\n const awsRegion = getAwsRegion(app);\n\n const policy: aws.iam.PolicyDocument = {\n Version: \"2012-10-17\",\n Statement: [\n {\n Sid: \"PermissionForDynamodb\",\n Effect: \"Allow\",\n Action: [\n \"dynamodb:BatchGetItem\",\n \"dynamodb:BatchWriteItem\",\n \"dynamodb:ConditionCheckItem\",\n \"dynamodb:CreateBackup\",\n \"dynamodb:CreateTable\",\n \"dynamodb:CreateTableReplica\",\n \"dynamodb:DeleteBackup\",\n \"dynamodb:DeleteItem\",\n \"dynamodb:DeleteTable\",\n \"dynamodb:DeleteTableReplica\",\n \"dynamodb:DescribeBackup\",\n \"dynamodb:DescribeContinuousBackups\",\n \"dynamodb:DescribeContributorInsights\",\n \"dynamodb:DescribeExport\",\n \"dynamodb:DescribeKinesisStreamingDestination\",\n \"dynamodb:DescribeLimits\",\n \"dynamodb:DescribeReservedCapacity\",\n \"dynamodb:DescribeReservedCapacityOfferings\",\n \"dynamodb:DescribeStream\",\n \"dynamodb:DescribeTable\",\n \"dynamodb:DescribeTableReplicaAutoScaling\",\n \"dynamodb:DescribeTimeToLive\",\n \"dynamodb:DisableKinesisStreamingDestination\",\n \"dynamodb:EnableKinesisStreamingDestination\",\n \"dynamodb:ExportTableToPointInTime\",\n \"dynamodb:GetItem\",\n \"dynamodb:GetRecords\",\n \"dynamodb:GetShardIterator\",\n \"dynamodb:ListBackups\",\n \"dynamodb:ListContributorInsights\",\n \"dynamodb:ListExports\",\n \"dynamodb:ListStreams\",\n \"dynamodb:ListTables\",\n \"dynamodb:ListTagsOfResource\",\n \"dynamodb:PartiQLDelete\",\n \"dynamodb:PartiQLInsert\",\n \"dynamodb:PartiQLSelect\",\n \"dynamodb:PartiQLUpdate\",\n \"dynamodb:PurchaseReservedCapacityOfferings\",\n \"dynamodb:PutItem\",\n \"dynamodb:Query\",\n \"dynamodb:RestoreTableFromBackup\",\n \"dynamodb:RestoreTableToPointInTime\",\n \"dynamodb:Scan\",\n \"dynamodb:UpdateContinuousBackups\",\n \"dynamodb:UpdateContributorInsights\",\n \"dynamodb:UpdateItem\",\n \"dynamodb:UpdateTable\",\n \"dynamodb:UpdateTableReplicaAutoScaling\",\n \"dynamodb:UpdateTimeToLive\"\n ],\n Resource: [`${dynamoDbTable.output.arn}`, `${dynamoDbTable.output.arn}/*`]\n },\n {\n Sid: \"PermissionForS3\",\n Effect: \"Allow\",\n Action: [\n \"s3:ListBucket\",\n \"s3:GetObjectAcl\",\n \"s3:DeleteObject\",\n \"s3:PutObjectAcl\",\n \"s3:PutObject\",\n \"s3:GetObject\"\n ],\n Resource: [\n pulumi.interpolate`arn:aws:s3:::${primary.fileManagerBucketId}`,\n pulumi.interpolate`arn:aws:s3:::${primary.fileManagerBucketId}/*`,\n pulumi.interpolate`arn:aws:s3:::${secondary.fileManagerBucketId}`,\n pulumi.interpolate`arn:aws:s3:::${secondary.fileManagerBucketId}/*`\n ]\n },\n {\n Sid: \"PermissionForLambda\",\n Effect: \"Allow\",\n Action: [\"lambda:InvokeFunction\"],\n Resource: pulumi.interpolate`arn:aws:lambda:${awsRegion}:${awsAccountId}:function:*`\n }\n ]\n };\n\n return app.addResource(aws.iam.Policy, {\n name: \"SyncSystemLambdaPolicy\",\n config: {\n description: \"This policy enables access to Dynamodb, S3 and Lambda.\",\n policy\n }\n });\n}\n"],"mappings":"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","ignoreList":[]}
|