@aws-amplify/graphql-model-transformer 1.5.0-rds.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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
@@ -1,6 +1,6 @@
|
|
1
1
|
import { TransformerTransformSchemaStepContextProvider } from '@aws-amplify/graphql-transformer-interfaces';
|
2
2
|
import { DocumentNode, InputObjectTypeDefinitionNode, ObjectTypeDefinitionNode } from 'graphql';
|
3
|
-
import { ModelResourceIDs,
|
3
|
+
import { ModelResourceIDs, toPascalCase } from 'graphql-transformer-common';
|
4
4
|
import { InputFieldWrapper, InputObjectDefinitionWrapper, ObjectDefinitionWrapper } from '@aws-amplify/graphql-transformer-core';
|
5
5
|
import { ModelDirectiveConfiguration } from '../directive';
|
6
6
|
import { makeConditionFilterInput } from './common';
|
@@ -104,15 +104,7 @@ export const makeCreateInputField = (
|
|
104
104
|
const typeName = objectWrapped.name;
|
105
105
|
const name = ModelResourceIDs.ModelCreateInputObjectName(typeName);
|
106
106
|
|
107
|
-
const
|
108
|
-
const hasIdField = objectWrapped.hasField(idFieldName);
|
109
|
-
let shouldAutogenerateIdField = false;
|
110
|
-
if (hasIdField) {
|
111
|
-
const idField = objectWrapped.getField(idFieldName);
|
112
|
-
const idBaseType = getBaseType(idField.type);
|
113
|
-
shouldAutogenerateIdField = idBaseType === 'ID' || idBaseType === 'String';
|
114
|
-
}
|
115
|
-
|
107
|
+
const hasIdField = objectWrapped.hasField('id');
|
116
108
|
const fieldsToRemove = objectWrapped
|
117
109
|
.fields!.filter((field) => {
|
118
110
|
if (knownModelTypes.has(field.getTypeName())) {
|
@@ -134,7 +126,7 @@ export const makeCreateInputField = (
|
|
134
126
|
input.addField(InputFieldWrapper.create('id', 'ID', true));
|
135
127
|
} else {
|
136
128
|
const idField = input.fields.find((f) => f.name === 'id');
|
137
|
-
if (idField
|
129
|
+
if (idField) {
|
138
130
|
idField.makeNullable();
|
139
131
|
}
|
140
132
|
}
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import { TransformerContextProvider } from '@aws-amplify/graphql-transformer-interfaces';
|
2
1
|
import {
|
3
2
|
generateUpdateRequestTemplate,
|
4
3
|
generateCreateRequestTemplate,
|
@@ -23,19 +22,18 @@ import {
|
|
23
22
|
} from './vtl-generator';
|
24
23
|
|
25
24
|
export class DynamoDBModelVTLGenerator implements ModelVTLGenerator {
|
26
|
-
generateUpdateRequestTemplate(config: ModelUpdateRequestConfig
|
25
|
+
generateUpdateRequestTemplate(config: ModelUpdateRequestConfig): string {
|
27
26
|
return generateUpdateRequestTemplate(config.modelName, config.isSyncEnabled);
|
28
27
|
}
|
29
28
|
|
30
|
-
generateCreateRequestTemplate(config: ModelCreateRequestConfig
|
29
|
+
generateCreateRequestTemplate(config: ModelCreateRequestConfig): string {
|
31
30
|
return generateCreateRequestTemplate(config.modelName, config.modelIndexFields);
|
32
31
|
}
|
33
|
-
|
34
32
|
generateCreateInitSlotTemplate(config: ModelCreateInitSlotConfig, initializeIdField: boolean): string {
|
35
33
|
return generateCreateInitSlotTemplate(config.modelConfig, initializeIdField);
|
36
34
|
}
|
37
35
|
|
38
|
-
generateDeleteRequestTemplate(config: ModelUpdateRequestConfig
|
36
|
+
generateDeleteRequestTemplate(config: ModelUpdateRequestConfig): string {
|
39
37
|
return generateDeleteRequestTemplate(config.modelName, config.isSyncEnabled);
|
40
38
|
}
|
41
39
|
|
@@ -43,7 +41,7 @@ export class DynamoDBModelVTLGenerator implements ModelVTLGenerator {
|
|
43
41
|
return generateUpdateInitSlotTemplate(config.modelConfig);
|
44
42
|
}
|
45
43
|
|
46
|
-
generateGetRequestTemplate(config: ModelRequestConfig
|
44
|
+
generateGetRequestTemplate(config: ModelRequestConfig): string {
|
47
45
|
return generateGetRequestTemplate();
|
48
46
|
}
|
49
47
|
|
@@ -51,7 +49,7 @@ export class DynamoDBModelVTLGenerator implements ModelVTLGenerator {
|
|
51
49
|
return generateGetResponseTemplate(config.isSyncEnabled);
|
52
50
|
}
|
53
51
|
|
54
|
-
generateListRequestTemplate(config: ModelRequestConfig
|
52
|
+
generateListRequestTemplate(config: ModelRequestConfig): string {
|
55
53
|
return generateListRequestTemplate();
|
56
54
|
}
|
57
55
|
|
@@ -18,40 +18,38 @@ import {
|
|
18
18
|
ModelUpdateRequestConfig,
|
19
19
|
ModelVTLGenerator,
|
20
20
|
} from './vtl-generator';
|
21
|
-
import { TransformerContextProvider } from '@aws-amplify/graphql-transformer-interfaces';
|
22
21
|
|
23
22
|
// TODO: This class is created only to show the class structure. This needs a revisit to generate correct resolvers for RDS.
|
24
23
|
export class RDSModelVTLGenerator implements ModelVTLGenerator {
|
25
|
-
generateUpdateRequestTemplate(config: ModelUpdateRequestConfig
|
26
|
-
return generateLambdaUpdateRequestTemplate(config.modelName, config.operationName, config.modelIndexFields ?? ['id']
|
24
|
+
generateUpdateRequestTemplate(config: ModelUpdateRequestConfig): string {
|
25
|
+
return generateLambdaUpdateRequestTemplate(config.modelName, config.operationName, config.modelIndexFields ?? ['id']);
|
27
26
|
}
|
28
27
|
|
29
|
-
generateCreateRequestTemplate(config: ModelCreateRequestConfig
|
30
|
-
return generateLambdaCreateRequestTemplate(config.modelName, config.operationName
|
28
|
+
generateCreateRequestTemplate(config: ModelCreateRequestConfig): string {
|
29
|
+
return generateLambdaCreateRequestTemplate(config.modelName, config.operationName);
|
31
30
|
}
|
32
|
-
|
33
31
|
generateCreateInitSlotTemplate(config: ModelCreateInitSlotConfig, initializeIdField: boolean): string {
|
34
32
|
return generateCreateInitSlotTemplate(config.modelConfig, initializeIdField);
|
35
33
|
}
|
36
34
|
|
37
|
-
generateDeleteRequestTemplate(config: ModelUpdateRequestConfig
|
38
|
-
return generateLambdaDeleteRequestTemplate(config.modelName, config.operationName, config.modelIndexFields ?? ['id']
|
35
|
+
generateDeleteRequestTemplate(config: ModelUpdateRequestConfig): string {
|
36
|
+
return generateLambdaDeleteRequestTemplate(config.modelName, config.operationName, config.modelIndexFields ?? ['id']);
|
39
37
|
}
|
40
38
|
|
41
39
|
generateUpdateInitSlotTemplate(config: ModelCreateInitSlotConfig): string {
|
42
40
|
return generateUpdateInitSlotTemplate(config.modelConfig);
|
43
41
|
}
|
44
42
|
|
45
|
-
generateGetRequestTemplate(config: ModelRequestConfig
|
46
|
-
return generateLambdaRequestTemplate(config.modelName, config.operation, config.operationName
|
43
|
+
generateGetRequestTemplate(config: ModelRequestConfig): string {
|
44
|
+
return generateLambdaRequestTemplate(config.modelName, config.operation, config.operationName);
|
47
45
|
}
|
48
46
|
|
49
47
|
generateGetResponseTemplate(config: ModelUpdateRequestConfig): string {
|
50
48
|
return generateGetLambdaResponseTemplate(false);
|
51
49
|
}
|
52
50
|
|
53
|
-
generateListRequestTemplate(config: ModelRequestConfig
|
54
|
-
return generateLambdaListRequestTemplate(config.modelName, config.operation, config.operationName
|
51
|
+
generateListRequestTemplate(config: ModelRequestConfig): string {
|
52
|
+
return generateLambdaListRequestTemplate(config.modelName, config.operation, config.operationName);
|
55
53
|
}
|
56
54
|
|
57
55
|
generateSyncRequestTemplate(config: ModelRequestConfig): string {
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import { TransformerContextProvider } from '@aws-amplify/graphql-transformer-interfaces';
|
2
1
|
import { ModelDirectiveConfiguration } from '../../directive';
|
3
2
|
|
4
3
|
export type ModelRequestConfig = {
|
@@ -32,14 +31,14 @@ export type ModelDefaultResponseConfig = ModelRequestConfig & {
|
|
32
31
|
};
|
33
32
|
|
34
33
|
export interface ModelVTLGenerator {
|
35
|
-
generateUpdateRequestTemplate(config: ModelUpdateRequestConfig
|
36
|
-
generateCreateRequestTemplate(config: ModelCreateRequestConfig
|
34
|
+
generateUpdateRequestTemplate(config: ModelUpdateRequestConfig): string;
|
35
|
+
generateCreateRequestTemplate(config: ModelCreateRequestConfig): string;
|
37
36
|
generateCreateInitSlotTemplate(config: ModelCreateInitSlotConfig, initializeIdField: boolean): string;
|
38
|
-
generateDeleteRequestTemplate(config: ModelDeleteRequestConfig
|
37
|
+
generateDeleteRequestTemplate(config: ModelDeleteRequestConfig): string;
|
39
38
|
generateUpdateInitSlotTemplate(config: ModelUpdateInitSlotConfig): string;
|
40
|
-
generateGetRequestTemplate(config: ModelRequestConfig
|
39
|
+
generateGetRequestTemplate(config: ModelRequestConfig): string;
|
41
40
|
generateGetResponseTemplate(config: ModelGetResponseConfig): string;
|
42
|
-
generateListRequestTemplate(config: ModelRequestConfig
|
41
|
+
generateListRequestTemplate(config: ModelRequestConfig): string;
|
43
42
|
generateSyncRequestTemplate(config: ModelRequestConfig): string;
|
44
43
|
generateSubscriptionRequestTemplate(): string;
|
45
44
|
generateSubscriptionResponseTemplate(): string;
|
@@ -12,9 +12,7 @@ import {
|
|
12
12
|
str,
|
13
13
|
toJson,
|
14
14
|
} from 'graphql-mapping-template';
|
15
|
-
import { TransformerContextProvider } from '@aws-amplify/graphql-transformer-interfaces';
|
16
15
|
import { ModelDirectiveConfiguration } from '../../directive';
|
17
|
-
import { constructNonScalarFieldsStatement } from './resolver';
|
18
16
|
|
19
17
|
/**
|
20
18
|
* Generate mapping template that sets default values for create mutation
|
@@ -55,7 +53,7 @@ export const generateCreateInitSlotTemplate = (modelConfig: ModelDirectiveConfig
|
|
55
53
|
return printBlock('Initialization default values')(compoundExpression(statements));
|
56
54
|
};
|
57
55
|
|
58
|
-
export const generateLambdaCreateRequestTemplate = (tableName: string, operationName: string
|
56
|
+
export const generateLambdaCreateRequestTemplate = (tableName: string, operationName: string): string =>
|
59
57
|
printBlock('Invoke RDS Lambda data source')(
|
60
58
|
compoundExpression([
|
61
59
|
set(ref('lambdaInput'), obj({})),
|
@@ -65,7 +63,6 @@ export const generateLambdaCreateRequestTemplate = (tableName: string, operation
|
|
65
63
|
set(ref('lambdaInput.operationName'), str(operationName)),
|
66
64
|
set(ref('lambdaInput.args.metadata'), obj({})),
|
67
65
|
set(ref('lambdaInput.args.metadata.keys'), list([])),
|
68
|
-
constructNonScalarFieldsStatement(tableName, ctx),
|
69
66
|
qref(
|
70
67
|
methodCall(ref('lambdaInput.args.metadata.keys.addAll'), methodCall(ref('util.defaultIfNull'), ref('ctx.stash.keys'), list([]))),
|
71
68
|
),
|
@@ -118,12 +115,7 @@ export const generateUpdateInitSlotTemplate = (modelConfig: ModelDirectiveConfig
|
|
118
115
|
/**
|
119
116
|
* Generate VTL template that calls the lambda for an Update mutation
|
120
117
|
*/
|
121
|
-
export const generateLambdaUpdateRequestTemplate = (
|
122
|
-
tableName: string,
|
123
|
-
operationName: string,
|
124
|
-
modelIndexFields: string[],
|
125
|
-
ctx: TransformerContextProvider,
|
126
|
-
): string =>
|
118
|
+
export const generateLambdaUpdateRequestTemplate = (tableName: string, operationName: string, modelIndexFields: string[]): string =>
|
127
119
|
printBlock('Invoke RDS Lambda data source')(
|
128
120
|
compoundExpression([
|
129
121
|
set(ref('lambdaInput'), obj({})),
|
@@ -133,7 +125,6 @@ export const generateLambdaUpdateRequestTemplate = (
|
|
133
125
|
set(ref('lambdaInput.operationName'), str(operationName)),
|
134
126
|
set(ref('lambdaInput.args.metadata'), obj({})),
|
135
127
|
set(ref('lambdaInput.args.metadata.keys'), list([])),
|
136
|
-
constructNonScalarFieldsStatement(tableName, ctx),
|
137
128
|
qref(
|
138
129
|
methodCall(ref('lambdaInput.args.metadata.keys.addAll'), methodCall(ref('util.defaultIfNull'), ref('ctx.stash.keys'), list([]))),
|
139
130
|
),
|
@@ -155,12 +146,7 @@ export const generateLambdaUpdateRequestTemplate = (
|
|
155
146
|
/**
|
156
147
|
* Generate VTL template that calls the lambda for a Delete mutation
|
157
148
|
*/
|
158
|
-
export const generateLambdaDeleteRequestTemplate = (
|
159
|
-
tableName: string,
|
160
|
-
operationName: string,
|
161
|
-
modelIndexFields: string[],
|
162
|
-
ctx: TransformerContextProvider,
|
163
|
-
): string =>
|
149
|
+
export const generateLambdaDeleteRequestTemplate = (tableName: string, operationName: string, modelIndexFields: string[]): string =>
|
164
150
|
printBlock('Invoke RDS Lambda data source')(
|
165
151
|
compoundExpression([
|
166
152
|
set(ref('lambdaInput'), obj({})),
|
@@ -170,7 +156,6 @@ export const generateLambdaDeleteRequestTemplate = (
|
|
170
156
|
set(ref('lambdaInput.operationName'), str(operationName)),
|
171
157
|
set(ref('lambdaInput.args.metadata'), obj({})),
|
172
158
|
set(ref('lambdaInput.args.metadata.keys'), list([])),
|
173
|
-
constructNonScalarFieldsStatement(tableName, ctx),
|
174
159
|
qref(
|
175
160
|
methodCall(ref('lambdaInput.args.metadata.keys.addAll'), methodCall(ref('util.defaultIfNull'), ref('ctx.stash.keys'), list([]))),
|
176
161
|
),
|
@@ -1,13 +1,6 @@
|
|
1
|
-
import { TransformerContextProvider } from '@aws-amplify/graphql-transformer-interfaces';
|
2
1
|
import { compoundExpression, list, methodCall, obj, printBlock, qref, ref, set, str } from 'graphql-mapping-template';
|
3
|
-
import { constructNonScalarFieldsStatement } from './resolver';
|
4
2
|
|
5
|
-
export const generateLambdaListRequestTemplate = (
|
6
|
-
tableName: string,
|
7
|
-
operation: string,
|
8
|
-
operationName: string,
|
9
|
-
ctx: TransformerContextProvider,
|
10
|
-
): string => {
|
3
|
+
export const generateLambdaListRequestTemplate = (tableName: string, operation: string, operationName: string): string => {
|
11
4
|
return printBlock('Invoke RDS Lambda data source')(
|
12
5
|
compoundExpression([
|
13
6
|
set(ref('lambdaInput'), obj({})),
|
@@ -17,7 +10,6 @@ export const generateLambdaListRequestTemplate = (
|
|
17
10
|
set(ref('lambdaInput.operationName'), str(operationName)),
|
18
11
|
set(ref('lambdaInput.args.metadata'), obj({})),
|
19
12
|
set(ref('lambdaInput.args.metadata.keys'), list([])),
|
20
|
-
constructNonScalarFieldsStatement(tableName, ctx),
|
21
13
|
qref(
|
22
14
|
methodCall(ref('lambdaInput.args.metadata.keys.addAll'), methodCall(ref('util.defaultIfNull'), ref('ctx.stash.keys'), list([]))),
|
23
15
|
),
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { CfnMapping, Duration, Fn
|
1
|
+
import { CfnMapping, Duration, Fn } from 'aws-cdk-lib';
|
2
2
|
import {
|
3
3
|
Expression,
|
4
4
|
compoundExpression,
|
@@ -13,15 +13,14 @@ import {
|
|
13
13
|
str,
|
14
14
|
toJson,
|
15
15
|
} from 'graphql-mapping-template';
|
16
|
-
import { ResourceConstants
|
17
|
-
import { RDSConnectionSecrets } from '@aws-amplify/graphql-transformer-core';
|
18
|
-
import { GraphQLAPIProvider, RDSLayerMapping
|
16
|
+
import { ResourceConstants } from 'graphql-transformer-common';
|
17
|
+
import { RDSConnectionSecrets, setResourceName } from '@aws-amplify/graphql-transformer-core';
|
18
|
+
import { GraphQLAPIProvider, RDSLayerMapping } from '@aws-amplify/graphql-transformer-interfaces';
|
19
19
|
import { Effect, IRole, Policy, PolicyStatement, Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam';
|
20
20
|
import { IFunction, LayerVersion, Runtime } from 'aws-cdk-lib/aws-lambda';
|
21
21
|
import { Construct } from 'constructs';
|
22
22
|
import path from 'path';
|
23
23
|
import { VpcConfig } from '@aws-amplify/graphql-transformer-interfaces/src';
|
24
|
-
import { EnumTypeDefinitionNode, FieldDefinitionNode, Kind, ObjectTypeDefinitionNode } from 'graphql';
|
25
24
|
|
26
25
|
/**
|
27
26
|
* Define RDS Lambda operations
|
@@ -45,7 +44,6 @@ const getLatestLayers = (latestLayers?: RDSLayerMapping): RDSLayerMapping => {
|
|
45
44
|
if (latestLayers && Object.keys(latestLayers).length > 0) {
|
46
45
|
return latestLayers;
|
47
46
|
}
|
48
|
-
console.warn('Unable to load the latest RDS layer configuration, using local configuration.');
|
49
47
|
const defaultLayerMapping = getDefaultLayerMapping();
|
50
48
|
return defaultLayerMapping;
|
51
49
|
};
|
@@ -54,84 +52,84 @@ const getLatestLayers = (latestLayers?: RDSLayerMapping): RDSLayerMapping => {
|
|
54
52
|
// For prod use account '582037449441', layer name 'AmplifyRDSLayer' and layer version '3' as of 2023-06-20
|
55
53
|
const getDefaultLayerMapping = (): RDSLayerMapping => ({
|
56
54
|
'ap-northeast-1': {
|
57
|
-
layerRegion: 'arn:aws:lambda:ap-northeast-1:582037449441:layer:AmplifyRDSLayer:
|
55
|
+
layerRegion: 'arn:aws:lambda:ap-northeast-1:582037449441:layer:AmplifyRDSLayer:5',
|
58
56
|
},
|
59
57
|
'us-east-1': {
|
60
|
-
layerRegion: 'arn:aws:lambda:us-east-1:582037449441:layer:AmplifyRDSLayer:
|
58
|
+
layerRegion: 'arn:aws:lambda:us-east-1:582037449441:layer:AmplifyRDSLayer:5',
|
61
59
|
},
|
62
60
|
'ap-southeast-1': {
|
63
|
-
layerRegion: 'arn:aws:lambda:ap-southeast-1:582037449441:layer:AmplifyRDSLayer:
|
61
|
+
layerRegion: 'arn:aws:lambda:ap-southeast-1:582037449441:layer:AmplifyRDSLayer:5',
|
64
62
|
},
|
65
63
|
'eu-west-1': {
|
66
|
-
layerRegion: 'arn:aws:lambda:eu-west-1:582037449441:layer:AmplifyRDSLayer:
|
64
|
+
layerRegion: 'arn:aws:lambda:eu-west-1:582037449441:layer:AmplifyRDSLayer:5',
|
67
65
|
},
|
68
66
|
'us-west-1': {
|
69
|
-
layerRegion: 'arn:aws:lambda:us-west-1:582037449441:layer:AmplifyRDSLayer:
|
67
|
+
layerRegion: 'arn:aws:lambda:us-west-1:582037449441:layer:AmplifyRDSLayer:5',
|
70
68
|
},
|
71
69
|
'ap-east-1': {
|
72
|
-
layerRegion: 'arn:aws:lambda:ap-east-1:582037449441:layer:AmplifyRDSLayer:
|
70
|
+
layerRegion: 'arn:aws:lambda:ap-east-1:582037449441:layer:AmplifyRDSLayer:5',
|
73
71
|
},
|
74
72
|
'ap-northeast-2': {
|
75
|
-
layerRegion: 'arn:aws:lambda:ap-northeast-2:582037449441:layer:AmplifyRDSLayer:
|
73
|
+
layerRegion: 'arn:aws:lambda:ap-northeast-2:582037449441:layer:AmplifyRDSLayer:5',
|
76
74
|
},
|
77
75
|
'ap-northeast-3': {
|
78
|
-
layerRegion: 'arn:aws:lambda:ap-northeast-3:582037449441:layer:AmplifyRDSLayer:
|
76
|
+
layerRegion: 'arn:aws:lambda:ap-northeast-3:582037449441:layer:AmplifyRDSLayer:5',
|
79
77
|
},
|
80
78
|
'ap-south-1': {
|
81
|
-
layerRegion: 'arn:aws:lambda:ap-south-1:582037449441:layer:AmplifyRDSLayer:
|
79
|
+
layerRegion: 'arn:aws:lambda:ap-south-1:582037449441:layer:AmplifyRDSLayer:5',
|
82
80
|
},
|
83
81
|
'ap-southeast-2': {
|
84
|
-
layerRegion: 'arn:aws:lambda:ap-southeast-2:582037449441:layer:AmplifyRDSLayer:
|
82
|
+
layerRegion: 'arn:aws:lambda:ap-southeast-2:582037449441:layer:AmplifyRDSLayer:5',
|
85
83
|
},
|
86
84
|
'ca-central-1': {
|
87
|
-
layerRegion: 'arn:aws:lambda:ca-central-1:582037449441:layer:AmplifyRDSLayer:
|
85
|
+
layerRegion: 'arn:aws:lambda:ca-central-1:582037449441:layer:AmplifyRDSLayer:5',
|
88
86
|
},
|
89
87
|
'eu-central-1': {
|
90
|
-
layerRegion: 'arn:aws:lambda:eu-central-1:582037449441:layer:AmplifyRDSLayer:
|
88
|
+
layerRegion: 'arn:aws:lambda:eu-central-1:582037449441:layer:AmplifyRDSLayer:5',
|
91
89
|
},
|
92
90
|
'eu-north-1': {
|
93
|
-
layerRegion: 'arn:aws:lambda:eu-north-1:582037449441:layer:AmplifyRDSLayer:
|
91
|
+
layerRegion: 'arn:aws:lambda:eu-north-1:582037449441:layer:AmplifyRDSLayer:5',
|
94
92
|
},
|
95
93
|
'eu-west-2': {
|
96
|
-
layerRegion: 'arn:aws:lambda:eu-west-2:582037449441:layer:AmplifyRDSLayer:
|
94
|
+
layerRegion: 'arn:aws:lambda:eu-west-2:582037449441:layer:AmplifyRDSLayer:5',
|
97
95
|
},
|
98
96
|
'eu-west-3': {
|
99
|
-
layerRegion: 'arn:aws:lambda:eu-west-3:582037449441:layer:AmplifyRDSLayer:
|
97
|
+
layerRegion: 'arn:aws:lambda:eu-west-3:582037449441:layer:AmplifyRDSLayer:5',
|
100
98
|
},
|
101
99
|
'sa-east-1': {
|
102
|
-
layerRegion: 'arn:aws:lambda:sa-east-1:582037449441:layer:AmplifyRDSLayer:
|
100
|
+
layerRegion: 'arn:aws:lambda:sa-east-1:582037449441:layer:AmplifyRDSLayer:5',
|
103
101
|
},
|
104
102
|
'us-east-2': {
|
105
|
-
layerRegion: 'arn:aws:lambda:us-east-2:582037449441:layer:AmplifyRDSLayer:
|
103
|
+
layerRegion: 'arn:aws:lambda:us-east-2:582037449441:layer:AmplifyRDSLayer:5',
|
106
104
|
},
|
107
105
|
'us-west-2': {
|
108
|
-
layerRegion: 'arn:aws:lambda:us-west-2:582037449441:layer:AmplifyRDSLayer:
|
106
|
+
layerRegion: 'arn:aws:lambda:us-west-2:582037449441:layer:AmplifyRDSLayer:5',
|
109
107
|
},
|
110
108
|
'cn-north-1': {
|
111
|
-
layerRegion: 'arn:aws:lambda:cn-north-1:582037449441:layer:AmplifyRDSLayer:
|
109
|
+
layerRegion: 'arn:aws:lambda:cn-north-1:582037449441:layer:AmplifyRDSLayer:5',
|
112
110
|
},
|
113
111
|
'cn-northwest-1': {
|
114
|
-
layerRegion: 'arn:aws:lambda:cn-northwest-1:582037449441:layer:AmplifyRDSLayer:
|
112
|
+
layerRegion: 'arn:aws:lambda:cn-northwest-1:582037449441:layer:AmplifyRDSLayer:5',
|
115
113
|
},
|
116
114
|
'us-gov-west-1': {
|
117
|
-
layerRegion: 'arn:aws:lambda:us-gov-west-1:582037449441:layer:AmplifyRDSLayer:
|
115
|
+
layerRegion: 'arn:aws:lambda:us-gov-west-1:582037449441:layer:AmplifyRDSLayer:5',
|
118
116
|
},
|
119
117
|
'us-gov-east-1': {
|
120
|
-
layerRegion: 'arn:aws:lambda:us-gov-east-1:582037449441:layer:AmplifyRDSLayer:
|
118
|
+
layerRegion: 'arn:aws:lambda:us-gov-east-1:582037449441:layer:AmplifyRDSLayer:5',
|
121
119
|
},
|
122
120
|
'me-south-1': {
|
123
|
-
layerRegion: 'arn:aws:lambda:me-south-1:582037449441:layer:AmplifyRDSLayer:
|
121
|
+
layerRegion: 'arn:aws:lambda:me-south-1:582037449441:layer:AmplifyRDSLayer:5',
|
124
122
|
},
|
125
123
|
});
|
126
124
|
|
127
125
|
/**
|
128
126
|
* Create RDS Lambda function
|
129
|
-
* @param
|
127
|
+
* @param scope Construct
|
130
128
|
* @param apiGraphql GraphQLAPIProvider
|
131
129
|
* @param lambdaRole IRole
|
132
130
|
*/
|
133
131
|
export const createRdsLambda = (
|
134
|
-
|
132
|
+
scope: Construct,
|
135
133
|
apiGraphql: GraphQLAPIProvider,
|
136
134
|
lambdaRole: IRole,
|
137
135
|
environment?: { [key: string]: string },
|
@@ -146,7 +144,7 @@ export const createRdsLambda = (
|
|
146
144
|
Runtime.NODEJS_18_X,
|
147
145
|
[
|
148
146
|
LayerVersion.fromLayerVersionArn(
|
149
|
-
|
147
|
+
scope,
|
150
148
|
'SQLLambdaLayerVersion',
|
151
149
|
Fn.findInMap(RDSLayerMappingID, Fn.ref('AWS::Region'), 'layerRegion'),
|
152
150
|
),
|
@@ -154,19 +152,19 @@ export const createRdsLambda = (
|
|
154
152
|
lambdaRole,
|
155
153
|
environment,
|
156
154
|
Duration.seconds(30),
|
157
|
-
|
155
|
+
scope,
|
158
156
|
sqlLambdaVpcConfig,
|
159
157
|
);
|
160
158
|
};
|
161
159
|
|
162
160
|
/**
|
163
161
|
* Create RDS Patching Lambda function
|
164
|
-
* @param
|
162
|
+
* @param scope Construct
|
165
163
|
* @param apiGraphql GraphQLAPIProvider
|
166
164
|
* @param lambdaRole IRole
|
167
165
|
*/
|
168
166
|
export const createRdsPatchingLambda = (
|
169
|
-
|
167
|
+
scope: Construct,
|
170
168
|
apiGraphql: GraphQLAPIProvider,
|
171
169
|
lambdaRole: IRole,
|
172
170
|
environment?: { [key: string]: string },
|
@@ -183,7 +181,7 @@ export const createRdsPatchingLambda = (
|
|
183
181
|
lambdaRole,
|
184
182
|
environment,
|
185
183
|
Duration.minutes(6), // We have an arbituary wait time of up to 5 minutes in the lambda function to avoid throttling errors
|
186
|
-
|
184
|
+
scope,
|
187
185
|
sqlLambdaVpcConfig,
|
188
186
|
);
|
189
187
|
};
|
@@ -191,15 +189,16 @@ export const createRdsPatchingLambda = (
|
|
191
189
|
/**
|
192
190
|
* Create RDS Lambda IAM role
|
193
191
|
* @param roleName string
|
194
|
-
* @param
|
192
|
+
* @param scope Construct
|
195
193
|
* @param secretEntry RDSConnectionSecrets
|
196
194
|
*/
|
197
|
-
export const createRdsLambdaRole = (roleName: string,
|
195
|
+
export const createRdsLambdaRole = (roleName: string, scope: Construct, secretEntry: RDSConnectionSecrets): IRole => {
|
198
196
|
const { RDSLambdaIAMRoleLogicalID, RDSLambdaLogAccessPolicy } = ResourceConstants.RESOURCES;
|
199
|
-
const role = new Role(
|
197
|
+
const role = new Role(scope, RDSLambdaIAMRoleLogicalID, {
|
200
198
|
assumedBy: new ServicePrincipal('lambda.amazonaws.com'),
|
201
199
|
roleName,
|
202
200
|
});
|
201
|
+
setResourceName(role, { name: RDSLambdaIAMRoleLogicalID, setOnDefaultChild: true });
|
203
202
|
const policyStatements = [
|
204
203
|
new PolicyStatement({
|
205
204
|
actions: ['logs:CreateLogGroup', 'logs:CreateLogStream', 'logs:PutLogEvents'],
|
@@ -224,7 +223,7 @@ export const createRdsLambdaRole = (roleName: string, stack: Construct, secretEn
|
|
224
223
|
}
|
225
224
|
|
226
225
|
role.attachInlinePolicy(
|
227
|
-
new Policy(
|
226
|
+
new Policy(scope, RDSLambdaLogAccessPolicy, {
|
228
227
|
statements: policyStatements,
|
229
228
|
policyName: `${roleName}Policy`,
|
230
229
|
}),
|
@@ -244,15 +243,16 @@ export const createRdsLambdaRole = (roleName: string, stack: Construct, secretEn
|
|
244
243
|
/**
|
245
244
|
* Create RDS Patching Lambda IAM role
|
246
245
|
* @param roleName string
|
247
|
-
* @param
|
246
|
+
* @param scope Construct
|
248
247
|
* @param functionArn FunctionArn
|
249
248
|
*/
|
250
|
-
export const createRdsPatchingLambdaRole = (roleName: string,
|
249
|
+
export const createRdsPatchingLambdaRole = (roleName: string, scope: Construct, functionArn: string): IRole => {
|
251
250
|
const { RDSPatchingLambdaIAMRoleLogicalID, RDSPatchingLambdaLogAccessPolicy } = ResourceConstants.RESOURCES;
|
252
|
-
const role = new Role(
|
251
|
+
const role = new Role(scope, RDSPatchingLambdaIAMRoleLogicalID, {
|
253
252
|
assumedBy: new ServicePrincipal('lambda.amazonaws.com'),
|
254
253
|
roleName,
|
255
254
|
});
|
255
|
+
setResourceName(role, { name: RDSPatchingLambdaIAMRoleLogicalID, setOnDefaultChild: true });
|
256
256
|
const policyStatements = [
|
257
257
|
new PolicyStatement({
|
258
258
|
actions: ['logs:CreateLogGroup', 'logs:CreateLogStream', 'logs:PutLogEvents'],
|
@@ -272,7 +272,7 @@ export const createRdsPatchingLambdaRole = (roleName: string, stack: Construct,
|
|
272
272
|
];
|
273
273
|
|
274
274
|
role.attachInlinePolicy(
|
275
|
-
new Policy(
|
275
|
+
new Policy(scope, RDSPatchingLambdaLogAccessPolicy, {
|
276
276
|
statements: policyStatements,
|
277
277
|
policyName: `${roleName}Policy`,
|
278
278
|
}),
|
@@ -295,12 +295,7 @@ export const createRdsPatchingLambdaRole = (roleName: string, stack: Construct,
|
|
295
295
|
* @param operation string
|
296
296
|
* @param operationName string
|
297
297
|
*/
|
298
|
-
export const generateLambdaRequestTemplate = (
|
299
|
-
tableName: string,
|
300
|
-
operation: string,
|
301
|
-
operationName: string,
|
302
|
-
ctx: TransformerContextProvider,
|
303
|
-
): string =>
|
298
|
+
export const generateLambdaRequestTemplate = (tableName: string, operation: string, operationName: string): string =>
|
304
299
|
printBlock('Invoke RDS Lambda data source')(
|
305
300
|
compoundExpression([
|
306
301
|
set(ref('lambdaInput'), obj({})),
|
@@ -310,7 +305,6 @@ export const generateLambdaRequestTemplate = (
|
|
310
305
|
set(ref('lambdaInput.operationName'), str(operationName)),
|
311
306
|
set(ref('lambdaInput.args.metadata'), obj({})),
|
312
307
|
set(ref('lambdaInput.args.metadata.keys'), list([])),
|
313
|
-
constructNonScalarFieldsStatement(tableName, ctx),
|
314
308
|
qref(
|
315
309
|
methodCall(ref('lambdaInput.args.metadata.keys.addAll'), methodCall(ref('util.defaultIfNull'), ref('ctx.stash.keys'), list([]))),
|
316
310
|
),
|
@@ -372,14 +366,3 @@ export const generateDefaultLambdaResponseMappingTemplate = (isSyncEnabled: bool
|
|
372
366
|
|
373
367
|
return printBlock('ResponseTemplate')(compoundExpression(statements));
|
374
368
|
};
|
375
|
-
|
376
|
-
export const getNonScalarFields = (object: ObjectTypeDefinitionNode | undefined, ctx: TransformerContextProvider): string[] => {
|
377
|
-
if (!object) {
|
378
|
-
return [];
|
379
|
-
}
|
380
|
-
const enums = ctx.output.getTypeDefinitionsOfKind(Kind.ENUM_TYPE_DEFINITION) as EnumTypeDefinitionNode[];
|
381
|
-
return object.fields?.filter((f: FieldDefinitionNode) => isArrayOrObject(f.type, enums)).map((f) => f.name.value) || [];
|
382
|
-
};
|
383
|
-
|
384
|
-
export const constructNonScalarFieldsStatement = (tableName: string, ctx: TransformerContextProvider): Expression =>
|
385
|
-
set(ref('lambdaInput.args.metadata.nonScalarFields'), list(getNonScalarFields(ctx.output.getObject(tableName), ctx).map(str)));
|