@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
@@ -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)));
|