From 687580aad1b1efdff67cf62ffb07011100efe599 Mon Sep 17 00:00:00 2001 From: Jeff Shepherd Date: Tue, 20 Sep 2022 10:52:38 +0000 Subject: [PATCH 1/2] add design proposal --- proposal/README.md | 110 ++++++++++++++++++++++++++++++++++++++ proposal/architecture.png | Bin 0 -> 39766 bytes 2 files changed, 110 insertions(+) create mode 100644 proposal/README.md create mode 100644 proposal/architecture.png diff --git a/proposal/README.md b/proposal/README.md new file mode 100644 index 000000000..bbeac5cdc --- /dev/null +++ b/proposal/README.md @@ -0,0 +1,110 @@ +# aws-appsync-dynamodb module + + +--- + +![Stability: Experimental](https://img.shields.io/badge/stability-Experimental-important.svg?style=for-the-badge) + +> All classes are under active development and subject to non-backward compatible changes or removal in any +> future version. These are not subject to the [Semantic Versioning](https://semver.org/) model. +> This means that while you may use them, you may need to update your source code when upgrading to a newer version of this package. + +--- + + +| **Reference Documentation**:| https://docs.aws.amazon.com/solutions/latest/constructs/| +|:-------------|:-------------| +
+ + +| **Language** | **Package** | +|:-------------|-----------------| +|![Python Logo](https://docs.aws.amazon.com/cdk/api/latest/img/python32.png) Python|`aws_solutions_constructs.aws_appsync_dynamodb`| +|![Typescript Logo](https://docs.aws.amazon.com/cdk/api/latest/img/typescript32.png) Typescript|`@aws-solutions-constructs/aws-appsync-dynamodb`| +|![Java Logo](https://docs.aws.amazon.com/cdk/api/latest/img/java32.png) Java|`software.amazon.awsconstructs.services.appsyncdynamodb`| + +## Overview +This AWS Solutions Construct implements an AWS AppSync GraphQL API connected to Amazon DynamoDB table. + +Here is a minimal deployable pattern definition in: + +Typescript +``` typescript +import { Construct } from 'constructs'; +import { Stack, StackProps } from 'aws-cdk-lib'; +import { AppSyncToDynamoDBProps, AppSyncToDynamoDB } from "@aws-solutions-constructs/aws-appsync-dynamodb"; + +new AppSyncToDynamoDB(this, 'test-appsync-dynamodb-default', {}); +``` + +Python +``` python +from aws_solutions_constructs.aws_appsync_dynamodb import AppSyncToDynamoDB +from aws_cdk import Stack +from constructs import Construct + +AppSyncToDynamoDB(self, 'test-appsync-dynamodb-default') +``` + +Java +``` java +import software.constructs.Construct; + +import software.amazon.awscdk.Stack; +import software.amazon.awscdk.StackProps; +import software.amazon.awsconstructs.services.appsyncdynamodb.*; + +new AppSyncToDynamoDB(this, "test-appsync-dynamodb-default", new AppSyncToDynamoDBProps.Builder() + .build()); +``` + +## Pattern Construct Props + +| **Name** | **Type** | **Description** | +|:-------------|:----------------|-----------------| +|dynamoTableProps?|[`dynamodb.TableProps`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-dynamodb.TableProps.html)|Optional user provided props to override the default props for DynamoDB Table.| +|existingTableObj?|[`dynamodb.Table`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-dynamodb.Table.html)|Existing instance of DynamoDB table object, providing both this and `dynamoTableProps` will cause an error.| +|appSyncProps?|[`api.GraphqlApiProps `](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-appsync-alpha.GraphqlApiProps.html)|Optional user-provided props to override the default props for AppSync.| +|allowCreateOperation?|`boolean`|Whether to deploy API Gateway Method for Create operation on DynamoDB table.| +|createRequestTemplate?|`string`|Optional AppSync resolver mapping template for Create method, required if `allowCreateOperation` set to true.| +|allowReadOperation?|`boolean`|Whether to deploy API Gateway Method for Read operation on DynamoDB table.| +|readRequestTemplate?|`string`|Optional AppSync resolver mapping template for Read method, it will use the default template if `allowReadOperation` is true and `readRequestTemplate` is not provided. The default template only supports a partition key and not partition + sort keys.| +|allowUpdateOperation?|`boolean`|Whether to deploy API Gateway Method for Update operation on DynamoDB table.| +|updateRequestTemplate?|`string`|Optional AppSync resolver mapping template for Update method, required if `allowUpdateOperation` set to true.| +|allowDeleteOperation?|`boolean`|Whether to deploy API Gateway Method for Delete operation on DynamoDB table.| +|deleteRequestTemplate?|`string`|Optional AppSync resolver mapping template for Delete method, it will use the default template if `allowDeleteOperation` is true and `deleteRequestTemplate` is not provided. The default template only supports a partition key and not partition + sort keys.| +|logGroupProps?|[`logs.LogGroupProps`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-logs.LogGroupProps.html)|User provided props to override the default props for for the CloudWatchLogs LogGroup.| + +## Pattern Properties + +| **Name** | **Type** | **Description** | +|:-------------|:----------------|-----------------| +|appSync|[`api.GraphqlApi `](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-appsync-alpha.GraphqlApi.html)|Returns an instance of the api.GraphqlApi created by the construct.| +|appSyncRole|[`iam.Role`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-iam.Role.html)|Returns an instance of the iam.Role created by the construct for AppSync.| +|dynamoTable|[`dynamodb.Table`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-dynamodb.Table.html)|Returns an instance of dynamodb.Table created by the construct.| +|appSyncCloudWatchRole?|[`iam.Role`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-iam.Role.html)|Returns an instance of the iam.Role created by the construct for AppSync for CloudWatch access.| +|appSyncLogGroup|[`logs.LogGroup`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-logs.LogGroup.html)|Returns an instance of the LogGroup created by the construct for AppSync access logging to CloudWatch.| + +## Default settings + +Out of the box implementation of the Construct without any override will set the following defaults: + +### AWS AppSync +* Deploy an AppSync API +* Enable CloudWatch logging for AppSync +* Configure least privilege access IAM role for AppSync +* Set the default authorizationType for all API methods to API Key +* Enable X-Ray Tracing + +### Amazon DynamoDB Table +* Set the billing mode for DynamoDB Table to On-Demand (Pay per request) +* Enable server-side encryption for DynamoDB Table using AWS managed KMS Key +* Creates a partition key called 'id' for DynamoDB Table +* Retain the Table when deleting the CloudFormation stack +* Enable continuous backups and point-in-time recovery + +## Architecture +![Architecture Diagram](architecture.png) + +*** +© Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. diff --git a/proposal/architecture.png b/proposal/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..2c66bcd84d73302cd7a558594af78fc6cf70b4a2 GIT binary patch literal 39766 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%0Diq>Mg7|XS`Gmi&*5_K$M#Csi}~m-YmbKFoHo;0 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 literal 0 HcmV?d00001 From fc13752b0c7449ad2f08a5865a8afc937a82e26f Mon Sep 17 00:00:00 2001 From: Jeff Shepherd Date: Tue, 20 Sep 2022 12:02:52 +0000 Subject: [PATCH 2/2] update props descriptions --- proposal/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/proposal/README.md b/proposal/README.md index bbeac5cdc..25f88693a 100644 --- a/proposal/README.md +++ b/proposal/README.md @@ -65,13 +65,13 @@ new AppSyncToDynamoDB(this, "test-appsync-dynamodb-default", new AppSyncToDynamo |dynamoTableProps?|[`dynamodb.TableProps`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-dynamodb.TableProps.html)|Optional user provided props to override the default props for DynamoDB Table.| |existingTableObj?|[`dynamodb.Table`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-dynamodb.Table.html)|Existing instance of DynamoDB table object, providing both this and `dynamoTableProps` will cause an error.| |appSyncProps?|[`api.GraphqlApiProps `](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-appsync-alpha.GraphqlApiProps.html)|Optional user-provided props to override the default props for AppSync.| -|allowCreateOperation?|`boolean`|Whether to deploy API Gateway Method for Create operation on DynamoDB table.| +|allowCreateOperation?|`boolean`|Whether to deploy AppSync operation for Create operation on DynamoDB table.| |createRequestTemplate?|`string`|Optional AppSync resolver mapping template for Create method, required if `allowCreateOperation` set to true.| -|allowReadOperation?|`boolean`|Whether to deploy API Gateway Method for Read operation on DynamoDB table.| +|allowReadOperation?|`boolean`|Whether to deploy AppSync operation for Read operation on DynamoDB table.| |readRequestTemplate?|`string`|Optional AppSync resolver mapping template for Read method, it will use the default template if `allowReadOperation` is true and `readRequestTemplate` is not provided. The default template only supports a partition key and not partition + sort keys.| -|allowUpdateOperation?|`boolean`|Whether to deploy API Gateway Method for Update operation on DynamoDB table.| +|allowUpdateOperation?|`boolean`|Whether to deploy AppSync operation for Update operation on DynamoDB table.| |updateRequestTemplate?|`string`|Optional AppSync resolver mapping template for Update method, required if `allowUpdateOperation` set to true.| -|allowDeleteOperation?|`boolean`|Whether to deploy API Gateway Method for Delete operation on DynamoDB table.| +|allowDeleteOperation?|`boolean`|Whether to deploy AppSync operation for Delete operation on DynamoDB table.| |deleteRequestTemplate?|`string`|Optional AppSync resolver mapping template for Delete method, it will use the default template if `allowDeleteOperation` is true and `deleteRequestTemplate` is not provided. The default template only supports a partition key and not partition + sort keys.| |logGroupProps?|[`logs.LogGroupProps`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-logs.LogGroupProps.html)|User provided props to override the default props for for the CloudWatchLogs LogGroup.|