@aws-amplify/graphql-model-transformer 1.5.0-rds.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/API.md +15 -15
- package/CHANGELOG.md +2 -7
- package/lib/graphql-types/mutation.d.ts.map +1 -1
- package/lib/graphql-types/mutation.js +2 -9
- package/lib/graphql-types/mutation.js.map +1 -1
- package/lib/rds-lambda.zip +0 -0
- package/lib/rds-notification-lambda.zip +0 -0
- package/lib/rds-patching-lambda.zip +0 -0
- package/lib/resolvers/generators/dynamodb-vtl-generator.d.ts +5 -6
- package/lib/resolvers/generators/dynamodb-vtl-generator.d.ts.map +1 -1
- package/lib/resolvers/generators/dynamodb-vtl-generator.js +5 -5
- package/lib/resolvers/generators/dynamodb-vtl-generator.js.map +1 -1
- package/lib/resolvers/generators/rds-vtl-generator.d.ts +5 -6
- package/lib/resolvers/generators/rds-vtl-generator.d.ts.map +1 -1
- package/lib/resolvers/generators/rds-vtl-generator.js +10 -10
- package/lib/resolvers/generators/rds-vtl-generator.js.map +1 -1
- package/lib/resolvers/generators/vtl-generator.d.ts +5 -6
- package/lib/resolvers/generators/vtl-generator.d.ts.map +1 -1
- package/lib/resolvers/rds/mutation.d.ts +3 -4
- package/lib/resolvers/rds/mutation.d.ts.map +1 -1
- package/lib/resolvers/rds/mutation.js +3 -7
- package/lib/resolvers/rds/mutation.js.map +1 -1
- package/lib/resolvers/rds/query.d.ts +1 -2
- package/lib/resolvers/rds/query.d.ts.map +1 -1
- package/lib/resolvers/rds/query.js +1 -3
- package/lib/resolvers/rds/query.js.map +1 -1
- package/lib/resolvers/rds/resolver.d.ts +7 -11
- package/lib/resolvers/rds/resolver.d.ts.map +1 -1
- package/lib/resolvers/rds/resolver.js +39 -50
- package/lib/resolvers/rds/resolver.js.map +1 -1
- package/lib/resources/dynamo-model-resource-generator.d.ts +2 -2
- package/lib/resources/dynamo-model-resource-generator.d.ts.map +1 -1
- package/lib/resources/dynamo-model-resource-generator.js +48 -43
- package/lib/resources/dynamo-model-resource-generator.js.map +1 -1
- package/lib/resources/model-resource-generator.js +8 -8
- package/lib/resources/model-resource-generator.js.map +1 -1
- package/lib/resources/rds-model-resource-generator.js +13 -13
- package/package.json +6 -5
- package/publish-notification-lambda/node_modules/.package-lock.json +3 -3
- package/publish-notification-lambda/node_modules/@types/node/README.md +1 -1
- package/publish-notification-lambda/node_modules/@types/node/package.json +2 -2
- package/publish-notification-lambda/package-lock.json +3 -3
- package/rds-lambda/handler.ts +1 -2
- package/rds-lambda/node_modules/.package-lock.json +6 -6
- package/rds-lambda/node_modules/@types/node/README.md +1 -1
- package/rds-lambda/node_modules/@types/node/package.json +2 -2
- package/rds-lambda/node_modules/electron-to-chromium/full-chromium-versions.json +1 -1
- package/rds-lambda/node_modules/electron-to-chromium/full-versions.json +1 -1
- package/rds-lambda/node_modules/electron-to-chromium/package.json +1 -1
- package/rds-lambda/package-lock.json +6 -6
- package/rds-patching-lambda/node_modules/.package-lock.json +3 -3
- package/rds-patching-lambda/node_modules/@types/node/README.md +1 -1
- package/rds-patching-lambda/node_modules/@types/node/package.json +2 -2
- package/rds-patching-lambda/package-lock.json +3 -3
- package/src/__tests__/__snapshots__/model-transformer.test.ts.snap +0 -688
- package/src/__tests__/model-directive-arguments.test.ts +23 -28
- package/src/__tests__/model-transformer.test.ts +137 -216
- package/src/graphql-types/mutation.ts +3 -11
- package/src/resolvers/generators/dynamodb-vtl-generator.ts +5 -7
- package/src/resolvers/generators/rds-vtl-generator.ts +10 -12
- package/src/resolvers/generators/vtl-generator.ts +5 -6
- package/src/resolvers/rds/mutation.ts +3 -18
- package/src/resolvers/rds/query.ts +1 -9
- package/src/resolvers/rds/resolver.ts +45 -62
- package/src/resources/dynamo-model-resource-generator.ts +50 -47
- package/src/resources/model-resource-generator.ts +8 -8
- package/src/resources/rds-model-resource-generator.ts +13 -13
- package/tsconfig.tsbuildinfo +1 -1
@@ -2,11 +2,12 @@ import * as cdk from 'aws-cdk-lib';
|
|
2
2
|
import { TransformerContextProvider } from '@aws-amplify/graphql-transformer-interfaces';
|
3
3
|
import { ModelResourceIDs, ResourceConstants, SyncResourceIDs } from 'graphql-transformer-common';
|
4
4
|
import { ObjectTypeDefinitionNode } from 'graphql';
|
5
|
-
import { SyncUtils,
|
5
|
+
import { SyncUtils, setResourceName } from '@aws-amplify/graphql-transformer-core';
|
6
6
|
import { AttributeType, CfnTable, StreamViewType, Table, TableEncryption } from 'aws-cdk-lib/aws-dynamodb';
|
7
7
|
import { CfnDataSource } from 'aws-cdk-lib/aws-appsync';
|
8
8
|
import * as iam from 'aws-cdk-lib/aws-iam';
|
9
9
|
import { CfnRole } from 'aws-cdk-lib/aws-iam';
|
10
|
+
import { Construct } from 'constructs';
|
10
11
|
import { DynamoDBModelVTLGenerator, ModelVTLGenerator } from '../resolvers';
|
11
12
|
import { ModelResourceGenerator } from './model-resource-generator';
|
12
13
|
|
@@ -24,28 +25,29 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
|
|
24
25
|
|
25
26
|
if (this.isProvisioned()) {
|
26
27
|
// add model related-parameters to the root stack
|
27
|
-
|
28
|
+
const rootStack = cdk.Stack.of(ctx.stackManager.scope);
|
29
|
+
new cdk.CfnParameter(rootStack, ResourceConstants.PARAMETERS.DynamoDBModelTableReadIOPS, {
|
28
30
|
description: 'The number of read IOPS the table should support.',
|
29
31
|
type: 'Number',
|
30
32
|
default: 5,
|
31
33
|
});
|
32
|
-
|
34
|
+
new cdk.CfnParameter(rootStack, ResourceConstants.PARAMETERS.DynamoDBModelTableWriteIOPS, {
|
33
35
|
description: 'The number of write IOPS the table should support.',
|
34
36
|
type: 'Number',
|
35
37
|
default: 5,
|
36
38
|
});
|
37
|
-
|
39
|
+
new cdk.CfnParameter(rootStack, ResourceConstants.PARAMETERS.DynamoDBBillingMode, {
|
38
40
|
description: 'Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes.',
|
39
41
|
default: 'PAY_PER_REQUEST',
|
40
42
|
allowedValues: ['PAY_PER_REQUEST', 'PROVISIONED'],
|
41
43
|
});
|
42
|
-
|
44
|
+
new cdk.CfnParameter(rootStack, ResourceConstants.PARAMETERS.DynamoDBEnablePointInTimeRecovery, {
|
43
45
|
description: 'Whether to enable Point in Time Recovery on the table.',
|
44
46
|
type: 'String',
|
45
47
|
default: 'false',
|
46
48
|
allowedValues: ['true', 'false'],
|
47
49
|
});
|
48
|
-
|
50
|
+
new cdk.CfnParameter(rootStack, ResourceConstants.PARAMETERS.DynamoDBEnableServerSideEncryption, {
|
49
51
|
description: 'Enable server side encryption powered by KMS.',
|
50
52
|
type: 'String',
|
51
53
|
default: 'true',
|
@@ -57,9 +59,9 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
|
|
57
59
|
// This name is used by the mock functionality. Changing this can break mock.
|
58
60
|
const tableBaseName = ctx.resourceHelper.getModelNameMapping(model!.name.value);
|
59
61
|
const tableLogicalName = ModelResourceIDs.ModelTableResourceID(tableBaseName);
|
60
|
-
const
|
62
|
+
const scope = ctx.stackManager.getScopeFor(tableLogicalName, tableBaseName);
|
61
63
|
|
62
|
-
this.createModelTable(
|
64
|
+
this.createModelTable(scope, model, ctx);
|
63
65
|
});
|
64
66
|
|
65
67
|
this.generateResolvers(ctx);
|
@@ -70,71 +72,68 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
|
|
70
72
|
return new DynamoDBModelVTLGenerator();
|
71
73
|
}
|
72
74
|
|
73
|
-
private createModelTable(
|
74
|
-
const
|
75
|
-
const
|
75
|
+
private createModelTable(scope: Construct, def: ObjectTypeDefinitionNode, context: TransformerContextProvider): void {
|
76
|
+
const modelName = def!.name.value;
|
77
|
+
const tableLogicalName = ModelResourceIDs.ModelTableResourceID(modelName);
|
78
|
+
const tableName = context.resourceHelper.generateTableName(modelName);
|
76
79
|
|
77
80
|
// Add parameters.
|
78
|
-
const
|
79
|
-
const readIops = new cdk.CfnParameter(stack, ResourceConstants.PARAMETERS.DynamoDBModelTableReadIOPS, {
|
81
|
+
const readIops = new cdk.CfnParameter(scope, ResourceConstants.PARAMETERS.DynamoDBModelTableReadIOPS, {
|
80
82
|
description: 'The number of read IOPS the table should support.',
|
81
83
|
type: 'Number',
|
82
84
|
default: 5,
|
83
85
|
});
|
84
|
-
const writeIops = new cdk.CfnParameter(
|
86
|
+
const writeIops = new cdk.CfnParameter(scope, ResourceConstants.PARAMETERS.DynamoDBModelTableWriteIOPS, {
|
85
87
|
description: 'The number of write IOPS the table should support.',
|
86
88
|
type: 'Number',
|
87
89
|
default: 5,
|
88
90
|
});
|
89
|
-
const billingMode = new cdk.CfnParameter(
|
91
|
+
const billingMode = new cdk.CfnParameter(scope, ResourceConstants.PARAMETERS.DynamoDBBillingMode, {
|
90
92
|
description: 'Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes.',
|
91
93
|
type: 'String',
|
92
94
|
default: 'PAY_PER_REQUEST',
|
93
95
|
allowedValues: ['PAY_PER_REQUEST', 'PROVISIONED'],
|
94
96
|
});
|
95
|
-
const pointInTimeRecovery = new cdk.CfnParameter(
|
97
|
+
const pointInTimeRecovery = new cdk.CfnParameter(scope, ResourceConstants.PARAMETERS.DynamoDBEnablePointInTimeRecovery, {
|
96
98
|
description: 'Whether to enable Point in Time Recovery on the table.',
|
97
99
|
type: 'String',
|
98
100
|
default: 'false',
|
99
101
|
allowedValues: ['true', 'false'],
|
100
102
|
});
|
101
|
-
const enableSSE = new cdk.CfnParameter(
|
103
|
+
const enableSSE = new cdk.CfnParameter(scope, ResourceConstants.PARAMETERS.DynamoDBEnableServerSideEncryption, {
|
102
104
|
description: 'Enable server side encryption powered by KMS.',
|
103
105
|
type: 'String',
|
104
106
|
default: 'true',
|
105
107
|
allowedValues: ['true', 'false'],
|
106
108
|
});
|
107
109
|
// add the connection between the root and nested stack so the values can be passed down
|
108
|
-
(
|
109
|
-
(
|
110
|
-
(
|
111
|
-
(
|
110
|
+
(scope as cdk.NestedStack).setParameter(readIops.node.id, cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBModelTableReadIOPS));
|
111
|
+
(scope as cdk.NestedStack).setParameter(writeIops.node.id, cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBModelTableWriteIOPS));
|
112
|
+
(scope as cdk.NestedStack).setParameter(billingMode.node.id, cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBBillingMode));
|
113
|
+
(scope as cdk.NestedStack).setParameter(
|
112
114
|
pointInTimeRecovery.node.id,
|
113
115
|
cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBEnablePointInTimeRecovery),
|
114
116
|
);
|
115
|
-
(
|
116
|
-
enableSSE.node.id,
|
117
|
-
cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBEnableServerSideEncryption),
|
118
|
-
);
|
117
|
+
(scope as cdk.NestedStack).setParameter(enableSSE.node.id, cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBEnableServerSideEncryption));
|
119
118
|
|
120
119
|
// Add conditions.
|
121
|
-
new cdk.CfnCondition(
|
122
|
-
expression: cdk.Fn.conditionNot(cdk.Fn.conditionEquals(
|
120
|
+
new cdk.CfnCondition(scope, ResourceConstants.CONDITIONS.HasEnvironmentParameter, {
|
121
|
+
expression: cdk.Fn.conditionNot(cdk.Fn.conditionEquals(context.synthParameters.amplifyEnvironmentName, ResourceConstants.NONE)),
|
123
122
|
});
|
124
|
-
const useSSE = new cdk.CfnCondition(
|
123
|
+
const useSSE = new cdk.CfnCondition(scope, ResourceConstants.CONDITIONS.ShouldUseServerSideEncryption, {
|
125
124
|
expression: cdk.Fn.conditionEquals(enableSSE, 'true'),
|
126
125
|
});
|
127
|
-
const usePayPerRequestBilling = new cdk.CfnCondition(
|
126
|
+
const usePayPerRequestBilling = new cdk.CfnCondition(scope, ResourceConstants.CONDITIONS.ShouldUsePayPerRequestBilling, {
|
128
127
|
expression: cdk.Fn.conditionEquals(billingMode, 'PAY_PER_REQUEST'),
|
129
128
|
});
|
130
|
-
const usePointInTimeRecovery = new cdk.CfnCondition(
|
129
|
+
const usePointInTimeRecovery = new cdk.CfnCondition(scope, ResourceConstants.CONDITIONS.ShouldUsePointInTimeRecovery, {
|
131
130
|
expression: cdk.Fn.conditionEquals(pointInTimeRecovery, 'true'),
|
132
131
|
});
|
133
132
|
|
134
133
|
const removalPolicy = this.options.EnableDeletionProtection ? cdk.RemovalPolicy.RETAIN : cdk.RemovalPolicy.DESTROY;
|
135
134
|
|
136
135
|
// Expose a way in context to allow proper resource naming
|
137
|
-
const table = new Table(
|
136
|
+
const table = new Table(scope, tableLogicalName, {
|
138
137
|
tableName,
|
139
138
|
partitionKey: {
|
140
139
|
name: 'id',
|
@@ -146,6 +145,7 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
|
|
146
145
|
...(context.isProjectUsingDataStore() ? { timeToLiveAttribute: '_ttl' } : undefined),
|
147
146
|
});
|
148
147
|
const cfnTable = table.node.defaultChild as CfnTable;
|
148
|
+
setResourceName(table, { name: modelName, setOnDefaultChild: true });
|
149
149
|
|
150
150
|
cfnTable.provisionedThroughput = cdk.Fn.conditionIf(usePayPerRequestBilling.logicalId, cdk.Fn.ref('AWS::NoValue'), {
|
151
151
|
ReadCapacityUnits: readIops,
|
@@ -162,29 +162,31 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
|
|
162
162
|
};
|
163
163
|
|
164
164
|
const streamArnOutputId = `GetAtt${ModelResourceIDs.ModelTableStreamArn(def!.name.value)}`;
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
165
|
+
if (table.tableStreamArn) {
|
166
|
+
new cdk.CfnOutput(cdk.Stack.of(scope), streamArnOutputId, {
|
167
|
+
value: table.tableStreamArn,
|
168
|
+
description: 'Your DynamoDB table StreamArn.',
|
169
|
+
exportName: cdk.Fn.join(':', [context.api.apiId, 'GetAtt', tableLogicalName, 'StreamArn']),
|
170
|
+
});
|
171
|
+
}
|
170
172
|
|
171
173
|
const tableNameOutputId = `GetAtt${tableLogicalName}Name`;
|
172
|
-
new cdk.CfnOutput(
|
173
|
-
value:
|
174
|
+
new cdk.CfnOutput(cdk.Stack.of(scope), tableNameOutputId, {
|
175
|
+
value: table.tableName,
|
174
176
|
description: 'Your DynamoDB table name.',
|
175
177
|
exportName: cdk.Fn.join(':', [context.api.apiId, 'GetAtt', tableLogicalName, 'Name']),
|
176
178
|
});
|
177
179
|
|
178
|
-
const role = this.createIAMRole(context, def,
|
180
|
+
const role = this.createIAMRole(context, def, scope, tableName);
|
179
181
|
const tableDataSourceLogicalName = `${def!.name.value}Table`;
|
180
|
-
this.createModelTableDataSource(def, context, table,
|
182
|
+
this.createModelTableDataSource(def, context, table, scope, role, tableDataSourceLogicalName);
|
181
183
|
}
|
182
184
|
|
183
185
|
private createModelTableDataSource(
|
184
186
|
def: ObjectTypeDefinitionNode,
|
185
187
|
context: TransformerContextProvider,
|
186
188
|
table: Table,
|
187
|
-
|
189
|
+
scope: Construct,
|
188
190
|
role: iam.Role,
|
189
191
|
dataSourceLogicalName: string,
|
190
192
|
): void {
|
@@ -193,7 +195,7 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
|
|
193
195
|
datasourceRoleLogicalID,
|
194
196
|
table,
|
195
197
|
{ name: dataSourceLogicalName, serviceRole: role },
|
196
|
-
|
198
|
+
scope,
|
197
199
|
);
|
198
200
|
|
199
201
|
const cfnDataSource = dataSource.node.defaultChild as CfnDataSource;
|
@@ -211,7 +213,7 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
|
|
211
213
|
}
|
212
214
|
|
213
215
|
const datasourceOutputId = `GetAtt${datasourceRoleLogicalID}Name`;
|
214
|
-
new cdk.CfnOutput(
|
216
|
+
new cdk.CfnOutput(cdk.Stack.of(scope), datasourceOutputId, {
|
215
217
|
value: dataSource.ds.attrName,
|
216
218
|
description: 'Your model DataSource name.',
|
217
219
|
exportName: cdk.Fn.join(':', [context.api.apiId, 'GetAtt', datasourceRoleLogicalID, 'Name']),
|
@@ -225,16 +227,17 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
|
|
225
227
|
/**
|
226
228
|
* createIAMRole
|
227
229
|
*/
|
228
|
-
createIAMRole = (context: TransformerContextProvider, def: ObjectTypeDefinitionNode,
|
230
|
+
createIAMRole = (context: TransformerContextProvider, def: ObjectTypeDefinitionNode, scope: Construct, tableName: string): iam.Role => {
|
229
231
|
const roleName = context.resourceHelper.generateIAMRoleName(ModelResourceIDs.ModelTableIAMRoleID(def!.name.value));
|
230
|
-
const role = new iam.Role(
|
232
|
+
const role = new iam.Role(scope, ModelResourceIDs.ModelTableIAMRoleID(def!.name.value), {
|
231
233
|
roleName,
|
232
234
|
assumedBy: new iam.ServicePrincipal('appsync.amazonaws.com'),
|
233
235
|
});
|
236
|
+
setResourceName(role, { name: ModelResourceIDs.ModelTableIAMRoleID(def!.name.value), setOnDefaultChild: true });
|
234
237
|
|
235
238
|
const amplifyDataStoreTableName = context.resourceHelper.generateTableName(SyncResourceIDs.syncTableName);
|
236
239
|
role.attachInlinePolicy(
|
237
|
-
new iam.Policy(
|
240
|
+
new iam.Policy(scope, 'DynamoDBAccess', {
|
238
241
|
statements: [
|
239
242
|
new iam.PolicyStatement({
|
240
243
|
effect: iam.Effect.ALLOW,
|
@@ -278,7 +281,7 @@ export class DynamoModelResourceGenerator extends ModelResourceGenerator {
|
|
278
281
|
const syncConfig = SyncUtils.getSyncConfig(context, def!.name.value);
|
279
282
|
if (syncConfig && SyncUtils.isLambdaSyncConfig(syncConfig)) {
|
280
283
|
role.attachInlinePolicy(
|
281
|
-
SyncUtils.createSyncLambdaIAMPolicy(context,
|
284
|
+
SyncUtils.createSyncLambdaIAMPolicy(context, scope, syncConfig.LambdaConflictHandler.name, syncConfig.LambdaConflictHandler.region),
|
282
285
|
);
|
283
286
|
}
|
284
287
|
|
@@ -132,7 +132,7 @@ export abstract class ModelResourceGenerator {
|
|
132
132
|
`${query.typeName}.${query.fieldName}.{slotName}.{slotIndex}.req.vtl`,
|
133
133
|
),
|
134
134
|
);
|
135
|
-
resolver.
|
135
|
+
resolver.setScope(context.stackManager.getScopeFor(query.resolverLogicalId, def!.name.value));
|
136
136
|
context.resolvers.addResolver(query.typeName, query.fieldName, resolver);
|
137
137
|
});
|
138
138
|
|
@@ -166,7 +166,7 @@ export abstract class ModelResourceGenerator {
|
|
166
166
|
`${mutation.typeName}.${mutation.fieldName}.{slotName}.{slotIndex}.req.vtl`,
|
167
167
|
),
|
168
168
|
);
|
169
|
-
resolver.
|
169
|
+
resolver.setScope(context.stackManager.getScopeFor(mutation.resolverLogicalId, def!.name.value));
|
170
170
|
context.resolvers.addResolver(mutation.typeName, mutation.fieldName, resolver);
|
171
171
|
});
|
172
172
|
|
@@ -213,7 +213,7 @@ export abstract class ModelResourceGenerator {
|
|
213
213
|
),
|
214
214
|
);
|
215
215
|
}
|
216
|
-
resolver.
|
216
|
+
resolver.setScope(context.stackManager.getScopeFor(subscription.resolverLogicalId, def!.name.value));
|
217
217
|
context.resolvers.addResolver(subscription.typeName, subscription.fieldName, resolver);
|
218
218
|
});
|
219
219
|
}
|
@@ -252,7 +252,7 @@ export abstract class ModelResourceGenerator {
|
|
252
252
|
resolverLogicalId,
|
253
253
|
dataSource,
|
254
254
|
MappingTemplate.s3MappingTemplateFromString(
|
255
|
-
vtlGenerator.generateGetRequestTemplate(requestConfig
|
255
|
+
vtlGenerator.generateGetRequestTemplate(requestConfig),
|
256
256
|
`${typeName}.${fieldName}.req.vtl`,
|
257
257
|
),
|
258
258
|
MappingTemplate.s3MappingTemplateFromString(
|
@@ -292,7 +292,7 @@ export abstract class ModelResourceGenerator {
|
|
292
292
|
resolverLogicalId,
|
293
293
|
dataSource,
|
294
294
|
MappingTemplate.s3MappingTemplateFromString(
|
295
|
-
vtlGenerator.generateListRequestTemplate(requestConfig
|
295
|
+
vtlGenerator.generateListRequestTemplate(requestConfig),
|
296
296
|
`${typeName}.${fieldName}.req.vtl`,
|
297
297
|
),
|
298
298
|
MappingTemplate.s3MappingTemplateFromString(
|
@@ -338,7 +338,7 @@ export abstract class ModelResourceGenerator {
|
|
338
338
|
resolverLogicalId,
|
339
339
|
dataSource,
|
340
340
|
MappingTemplate.s3MappingTemplateFromString(
|
341
|
-
vtlGenerator.generateCreateRequestTemplate(requestConfig
|
341
|
+
vtlGenerator.generateCreateRequestTemplate(requestConfig),
|
342
342
|
`${typeName}.${fieldName}.req.vtl`,
|
343
343
|
),
|
344
344
|
MappingTemplate.s3MappingTemplateFromString(
|
@@ -400,7 +400,7 @@ export abstract class ModelResourceGenerator {
|
|
400
400
|
resolverLogicalId,
|
401
401
|
dataSource,
|
402
402
|
MappingTemplate.s3MappingTemplateFromString(
|
403
|
-
vtlGenerator.generateUpdateRequestTemplate(requestConfig
|
403
|
+
vtlGenerator.generateUpdateRequestTemplate(requestConfig),
|
404
404
|
`${typeName}.${fieldName}.req.vtl`,
|
405
405
|
),
|
406
406
|
MappingTemplate.s3MappingTemplateFromString(
|
@@ -461,7 +461,7 @@ export abstract class ModelResourceGenerator {
|
|
461
461
|
resolverLogicalId,
|
462
462
|
dataSource,
|
463
463
|
MappingTemplate.s3MappingTemplateFromString(
|
464
|
-
vtlGenerator.generateDeleteRequestTemplate(requestConfig
|
464
|
+
vtlGenerator.generateDeleteRequestTemplate(requestConfig),
|
465
465
|
`${typeName}.${fieldName}.req.vtl`,
|
466
466
|
),
|
467
467
|
MappingTemplate.s3MappingTemplateFromString(
|
@@ -37,17 +37,17 @@ export class RdsModelResourceGenerator extends ModelResourceGenerator {
|
|
37
37
|
RDSLambdaDataSourceLogicalID,
|
38
38
|
RDSPatchingSubscriptionLogicalID,
|
39
39
|
} = ResourceConstants.RESOURCES;
|
40
|
-
const
|
41
|
-
const
|
42
|
-
setRDSLayerMappings(
|
40
|
+
const lambdaRoleScope = context.stackManager.getScopeFor(RDSLambdaIAMRoleLogicalID, RDS_STACK_NAME);
|
41
|
+
const lambdaScope = context.stackManager.getScopeFor(RDSLambdaLogicalID, RDS_STACK_NAME);
|
42
|
+
setRDSLayerMappings(lambdaScope, context.rdsLayerMapping);
|
43
43
|
const role = createRdsLambdaRole(
|
44
44
|
context.resourceHelper.generateIAMRoleName(RDSLambdaIAMRoleLogicalID),
|
45
|
-
|
45
|
+
lambdaRoleScope,
|
46
46
|
secretEntry as RDSConnectionSecrets,
|
47
47
|
);
|
48
48
|
|
49
49
|
const lambda = createRdsLambda(
|
50
|
-
|
50
|
+
lambdaScope,
|
51
51
|
context.api,
|
52
52
|
role,
|
53
53
|
{
|
@@ -60,22 +60,22 @@ export class RdsModelResourceGenerator extends ModelResourceGenerator {
|
|
60
60
|
context.sqlLambdaVpcConfig,
|
61
61
|
);
|
62
62
|
|
63
|
-
const
|
64
|
-
const
|
63
|
+
const patchingLambdaRoleScope = context.stackManager.getScopeFor(RDSPatchingLambdaIAMRoleLogicalID, RDS_STACK_NAME);
|
64
|
+
const patchingLambdaScope = context.stackManager.getScopeFor(RDSPatchingLambdaLogicalID, RDS_STACK_NAME);
|
65
65
|
const patchingLambdaRole = createRdsPatchingLambdaRole(
|
66
66
|
context.resourceHelper.generateIAMRoleName(RDSPatchingLambdaIAMRoleLogicalID),
|
67
|
-
|
67
|
+
patchingLambdaRoleScope,
|
68
68
|
lambda.functionArn,
|
69
69
|
);
|
70
70
|
|
71
71
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
72
|
-
const patchingLambda = createRdsPatchingLambda(
|
72
|
+
const patchingLambda = createRdsPatchingLambda(patchingLambdaScope, context.api, patchingLambdaRole, {
|
73
73
|
LAMBDA_FUNCTION_ARN: lambda.functionArn,
|
74
74
|
});
|
75
75
|
|
76
76
|
// Add SNS subscription for patching notifications
|
77
|
-
const
|
78
|
-
const snsTopic = Topic.fromTopicArn(
|
77
|
+
const patchingSubscriptionScope = context.stackManager.getScopeFor(RDSPatchingSubscriptionLogicalID, RDS_STACK_NAME);
|
78
|
+
const snsTopic = Topic.fromTopicArn(patchingSubscriptionScope, 'RDSPatchingTopic', RDS_PATCHING_SNS_TOPIC_ARN);
|
79
79
|
const subscription = new LambdaSubscription(patchingLambda, {
|
80
80
|
filterPolicy: {
|
81
81
|
Region: SubscriptionFilter.stringFilter({
|
@@ -85,8 +85,8 @@ export class RdsModelResourceGenerator extends ModelResourceGenerator {
|
|
85
85
|
});
|
86
86
|
snsTopic.addSubscription(subscription);
|
87
87
|
|
88
|
-
const
|
89
|
-
const rdsDatasource = context.api.host.addLambdaDataSource(`${RDSLambdaDataSourceLogicalID}`, lambda, {},
|
88
|
+
const lambdaDataSourceScope = context.stackManager.getScopeFor(RDSLambdaDataSourceLogicalID, RDS_STACK_NAME);
|
89
|
+
const rdsDatasource = context.api.host.addLambdaDataSource(`${RDSLambdaDataSourceLogicalID}`, lambda, {}, lambdaDataSourceScope);
|
90
90
|
this.models.forEach((model) => {
|
91
91
|
context.dataSources.add(model, rdsDatasource);
|
92
92
|
this.datasourceMap[model.name.value] = rdsDatasource;
|