├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── feature_request.md │ └── issue-template.md └── workflows │ └── main.yaml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE.txt ├── NOTICE.txt ├── README.md ├── SECURITY.md ├── archived ├── LoadS3toDynamoDB │ ├── README.md │ └── load.py └── README.md ├── examples ├── Bedrock │ ├── Langchain │ │ ├── chat_history.ipynb │ │ └── img │ │ │ ├── chatbot.png │ │ │ └── echo.png │ └── README.md ├── NERDS │ ├── README.md │ ├── basic-template │ │ ├── README.md │ │ ├── basic-backend │ │ │ ├── .pre-commit-config.yaml │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── documentation │ │ │ │ ├── Darn-basic-stack.gif │ │ │ │ └── TaskMaster.png │ │ │ ├── package.json │ │ │ └── src │ │ │ │ ├── retire.txt │ │ │ │ └── server.js │ │ └── basic-frontend │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── public │ │ │ ├── favicon.ico │ │ │ ├── index.html │ │ │ ├── logo192.png │ │ │ ├── logo512.png │ │ │ ├── manifest.json │ │ │ └── robots.txt │ │ │ └── src │ │ │ ├── App.js │ │ │ ├── components │ │ │ └── Task │ │ │ │ ├── TaskCard.js │ │ │ │ ├── TaskForm.js │ │ │ │ └── TaskList.js │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ └── styles.js │ ├── enhanced-template │ │ ├── README.md │ │ ├── enhanced-backend │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── documentation │ │ │ │ ├── enhanced-app.png │ │ │ │ ├── enhanced-backend.cast │ │ │ │ └── enhanced-backend.gif │ │ │ ├── package.json │ │ │ └── src │ │ │ │ ├── items.json │ │ │ │ ├── populate.js │ │ │ │ └── server.js │ │ └── enhanced-frontend │ │ │ ├── README.md │ │ │ ├── eslint.config.js │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── public │ │ │ └── vite.svg │ │ │ ├── src │ │ │ ├── App.css │ │ │ ├── App.jsx │ │ │ ├── assets │ │ │ │ └── react.svg │ │ │ ├── components │ │ │ │ └── Task │ │ │ │ │ ├── TaskCard.jsx │ │ │ │ │ ├── TaskForm.jsx │ │ │ │ │ └── TaskList.jsx │ │ │ ├── index.css │ │ │ ├── main.jsx │ │ │ └── styles.js │ │ │ └── vite.config.js │ └── recipe-example │ │ ├── README.md │ │ └── backend │ │ ├── .gitignore │ │ ├── README.md │ │ ├── buildspec.yml │ │ ├── docker-compose.yml │ │ ├── docker │ │ └── dynamodb │ │ │ └── shared-local-instance.db │ │ ├── documentation │ │ ├── demo-api.gif │ │ └── demo.gif │ │ ├── env.json │ │ ├── package.json │ │ ├── samconfig.toml │ │ ├── src │ │ ├── package.json │ │ ├── recipes │ │ │ ├── create │ │ │ │ └── index.js │ │ │ ├── delete │ │ │ │ └── index.js │ │ │ ├── get │ │ │ │ └── index.js │ │ │ ├── list │ │ │ │ └── index.js │ │ │ └── update │ │ │ │ └── index.js │ │ └── users │ │ │ ├── create │ │ │ └── index.js │ │ │ ├── delete │ │ │ └── index.js │ │ │ ├── get │ │ │ └── index.js │ │ │ └── update │ │ │ └── index.js │ │ └── template.yaml ├── README.md ├── SDK │ ├── Operations.md │ ├── README.md │ ├── dotnet │ │ ├── README.md │ │ └── sdk_v2 │ │ │ ├── DotnetSamples.csproj │ │ │ ├── DotnetSamples.sln │ │ │ ├── Models │ │ │ └── CustomerOrder.cs │ │ │ ├── Operations.md │ │ │ ├── WorkingWithItems │ │ │ ├── BatchGetItem.cs │ │ │ ├── BatchWriteItem.cs │ │ │ ├── DeleteItem.cs │ │ │ ├── DeleteItemConditional.cs │ │ │ ├── GetItem.cs │ │ │ ├── PutItem.cs │ │ │ ├── PutItemConditional.cs │ │ │ ├── TransactGetItems.cs │ │ │ ├── TransactWriteItems.cs │ │ │ ├── UpdateItem.cs │ │ │ └── UpdateItemConditional.cs │ │ │ ├── WorkingWithQueries │ │ │ ├── QueryConsistentRead.cs │ │ │ ├── QueryConsumedCapacity.cs │ │ │ ├── QueryCount.cs │ │ │ ├── QueryFilterExpression.cs │ │ │ └── QueryProjectionExpression.cs │ │ │ └── WorkingWithTables │ │ │ └── CreateTableProvisioned.cs │ ├── golang │ │ ├── Operations.md │ │ ├── README.md │ │ └── sdk_v1 │ │ │ ├── WorkingWithItems │ │ │ ├── batchGetItem.go │ │ │ ├── batchWriteItem.go │ │ │ ├── deleteItem.go │ │ │ ├── deleteItemConditional.go │ │ │ ├── getItem.go │ │ │ ├── putItem.go │ │ │ ├── putItemConditional.go │ │ │ ├── updateItem.go │ │ │ └── updateItemConditional.go │ │ │ └── WorkingWithTables │ │ │ ├── addGlobalTableRegion │ │ │ └── addGlobalTableRegion.go │ │ │ ├── addProvisionedCapacity │ │ │ └── addProvisionedCapacity.go │ │ │ ├── changeTableToOnDemand │ │ │ └── changeTableToOnDemand.go │ │ │ ├── changeTableToProvisioned │ │ │ └── changeTableToProvisioned.go │ │ │ ├── createGlobalTable │ │ │ └── createGlobalTable.go │ │ │ ├── createTableOnDemand │ │ │ └── createTableOnDemand.go │ │ │ ├── createTableProvisioned │ │ │ └── createTableProvisioned.go │ │ │ ├── deleteGlobalTableRegion │ │ │ └── deleteGlobalTableRegion.go │ │ │ ├── deleteTable │ │ │ └── deleteTable.go │ │ │ ├── describeGlobalTable │ │ │ └── describeGlobalTable.go │ │ │ ├── describeLimits │ │ │ └── describeLimits.go │ │ │ ├── describeTable │ │ │ └── describeTable.go │ │ │ ├── disableAutoscaling │ │ │ └── disableAutoscaling.go │ │ │ ├── disableStreams │ │ │ └── disableStreams.go │ │ │ ├── enableAutoscaling │ │ │ └── enableAutoscaling.go │ │ │ ├── enableStreams │ │ │ └── enableStreams.go │ │ │ ├── listTables │ │ │ └── listTables.go │ │ │ ├── updateAutoscaling │ │ │ └── updateAutoscaling.go │ │ │ └── updateGlobalTable │ │ │ └── updateGlobalTable.go │ ├── java │ │ ├── Operations.md │ │ ├── README.md │ │ └── sdk_v1 │ │ │ ├── control_plane │ │ │ └── WorkingWithTables │ │ │ │ ├── AddProvisionedCapacity.java │ │ │ │ ├── CreateTableOnDemand.java │ │ │ │ ├── CreateTableProvisioned.java │ │ │ │ ├── DeleteTable.java │ │ │ │ ├── DescribeLimits.java │ │ │ │ ├── DescribeTable.java │ │ │ │ ├── ListTables.java │ │ │ │ ├── TableChangeToOnDemand.java │ │ │ │ └── TableChangeToOnProvisioned.java │ │ │ └── data_plane │ │ │ ├── CustomUseCases │ │ │ ├── OverrideCredentialsProviderOnPutItemRequest.java │ │ │ └── README.md │ │ │ ├── WorkingWithIndexes │ │ │ └── TableAsyncQueryIndex.java │ │ │ ├── WorkingWithItems │ │ │ ├── BatchGetItem.java │ │ │ ├── BatchWriteItem.java │ │ │ ├── DeleteItem.java │ │ │ ├── GetItem.java │ │ │ ├── PutItem.java │ │ │ ├── PutItemConditional.java │ │ │ ├── TransactGetItem.java │ │ │ ├── TransactWriteItem.java │ │ │ ├── UpdateItem.java │ │ │ └── UpdateItemConditional.java │ │ │ ├── WorkingWithQueries │ │ │ ├── QueryConsistentRead.java │ │ │ ├── QueryWithFilterExpression.java │ │ │ ├── QueryWithProjectionExpression.java │ │ │ ├── QueryWithSortKey.java │ │ │ └── TableAsyncQuery.java │ │ │ └── WorkingWithScans │ │ │ └── TableAsyncScan.java │ ├── kotlin │ │ ├── Operations.md │ │ ├── README.md │ │ ├── control_plane │ │ │ └── WorkingWithTables │ │ │ │ └── .todo │ │ └── data_plane │ │ │ ├── WorkingWithIndexes │ │ │ └── .todo │ │ │ ├── WorkingWithItems │ │ │ └── .todo │ │ │ ├── WorkingWithQueries │ │ │ └── .todo │ │ │ ├── WorkingWithScans │ │ │ └── .todo │ │ │ └── WorkingWithStreams │ │ │ └── .todo │ ├── node.js │ │ ├── Operations.md │ │ ├── README.md │ │ └── sdk_v3 │ │ │ ├── control_plane │ │ │ ├── WorkingWithBackups │ │ │ │ ├── CreateOn-DemandBackup.js │ │ │ │ ├── DeleteBackup.js │ │ │ │ └── DescribeBackup.js │ │ │ ├── WorkingWithIndexes │ │ │ │ ├── CreateIndex.js │ │ │ │ ├── DeleteIndex.js │ │ │ │ └── UpdateIndexProvisionedCapacity.js │ │ │ └── WorkingWithTables │ │ │ │ ├── add-global-table-region.js │ │ │ │ ├── add_provisioned_capacity.js │ │ │ │ ├── create-global-table.js │ │ │ │ ├── create_table_on_demand.js │ │ │ │ ├── create_table_provisioned.js │ │ │ │ ├── delete-global-table-region.js │ │ │ │ ├── delete_table.js │ │ │ │ ├── describe-global-table-and-global-table-settings.js │ │ │ │ ├── describe_limits.js │ │ │ │ ├── describe_table.js │ │ │ │ ├── disable_auto_scaling.js │ │ │ │ ├── disable_streams.js │ │ │ │ ├── enable-global-tables.js │ │ │ │ ├── enable_auto_scaling_v2.js │ │ │ │ ├── enable_auto_scaling_v3.js │ │ │ │ ├── enable_streams.js │ │ │ │ ├── export_table_s3.js │ │ │ │ ├── list_tables.js │ │ │ │ ├── table_change_to_on_demand.js │ │ │ │ ├── table_change_to_provisioned.js │ │ │ │ ├── update-global-table-and-global-table-settings.js │ │ │ │ ├── update_auto_scaling_v2.js │ │ │ │ └── update_auto_scaling_v3.js │ │ │ └── data_plane │ │ │ ├── WorkingWithCustomBackoffRetry │ │ │ └── exponential_backoff_retry_get_item.js │ │ │ ├── WorkingWithItems │ │ │ ├── batch-get.js │ │ │ ├── batch-write.js │ │ │ ├── delete-item.js │ │ │ ├── get-item-low-level.js │ │ │ ├── get-item.js │ │ │ ├── put-item-conditional.js │ │ │ ├── put-item.js │ │ │ ├── transact-get.js │ │ │ ├── transact-write.js │ │ │ ├── update-item-conditional.js │ │ │ └── update-item.js │ │ │ ├── WorkingWithPartiQL │ │ │ ├── batch-execute-statement.js │ │ │ ├── execute-statement.js │ │ │ ├── execute-transaction.js │ │ │ ├── paginated-all-data.js │ │ │ ├── sanitization-for-sql-injection.js │ │ │ ├── simple-select-statement.js │ │ │ └── sql-injection.js │ │ │ ├── WorkingWithQueries │ │ │ ├── query-consistent-read.js │ │ │ ├── query-filter-expression.js │ │ │ ├── query-key-condition-expression-begins-with-sort-order.js │ │ │ ├── query-key-condition-expression-begins-with.js │ │ │ ├── query-key-condition-expression-between-dates.js │ │ │ ├── query-key-condition-expression-between-numbers.js │ │ │ ├── query-key-condition-expression-equals.js │ │ │ ├── query-key-condition-expression-greater-equal.js │ │ │ ├── query-key-condition-expression-greater.js │ │ │ ├── query-key-condition-expression-less-equal.js │ │ │ ├── query-key-condition-expression-less.js │ │ │ ├── query-projection-expression.js │ │ │ ├── query-return-consumed-capacity.js │ │ │ ├── query-scan-count.js │ │ │ ├── query-with-pagination-all-data.js │ │ │ ├── query-with-pagination-backwards.js │ │ │ └── query-with-pagination.js │ │ │ ├── WorkingWithScans │ │ │ ├── scan-fetch-all-pagination.js │ │ │ └── scan-parallel-segments.js │ │ │ └── WorkingWithStreams │ │ │ └── read-stream.js │ ├── python │ │ ├── Operations.md │ │ ├── README.md │ │ ├── WorkingWithTestData │ │ │ └── test_data_generator.py │ │ ├── control_plane │ │ │ ├── WorkingWithIndexes │ │ │ │ └── add_gsi.py │ │ │ └── WorkingWithTables │ │ │ │ ├── add_global_table_region.py │ │ │ │ ├── add_provisioned_capacity.py │ │ │ │ ├── create_table_on-demand.py │ │ │ │ ├── create_table_provisioned.py │ │ │ │ ├── delete_global_table_region.py │ │ │ │ ├── delete_table.py │ │ │ │ ├── describe_limits.py │ │ │ │ ├── describe_table.py │ │ │ │ ├── disable_auto-scaling.py │ │ │ │ ├── enable_auto-scaling.py │ │ │ │ ├── enable_continuous_backups.py │ │ │ │ ├── enable_streams.py │ │ │ │ ├── export_table_s3.py │ │ │ │ ├── list_tables.py │ │ │ │ ├── update_table_on-demand.py │ │ │ │ └── update_table_provisioned.py │ │ └── data_plane │ │ │ ├── WorkingWithCustomBackoffRetry │ │ │ └── exponential_backoff_retry_get_item.py │ │ │ ├── WorkingWithItems │ │ │ ├── batch_get.py │ │ │ ├── batch_write.py │ │ │ ├── delete_item.py │ │ │ ├── delete_item_conditional.py │ │ │ ├── get_item.py │ │ │ ├── put_item.py │ │ │ ├── put_item_conditional.py │ │ │ ├── transact_get.py │ │ │ ├── transact_write.py │ │ │ ├── update_item_conditional.py │ │ │ └── updating_item.py │ │ │ ├── WorkingWithPartiQL │ │ │ ├── batch-execute-statement.py │ │ │ ├── execute-statement.py │ │ │ ├── execute-transaction.py │ │ │ ├── paginated-query-batch-execute-statement.py │ │ │ ├── paginated-select-statement.py │ │ │ └── simple-select-statement.py │ │ │ ├── WorkingWithQueries │ │ │ ├── pagination.py │ │ │ ├── query-consistent-read.py │ │ │ ├── query-return-consumed-capacity.py │ │ │ ├── query-scan-count.py │ │ │ ├── query_begins_with.py │ │ │ ├── query_equals.py │ │ │ ├── query_filter_expression.py │ │ │ └── query_projection_expression.py │ │ │ └── WorkingWithScans │ │ │ ├── scan_filter_expression.py │ │ │ ├── scan_paginate.py │ │ │ ├── scan_parallel.py │ │ │ ├── scan_projection_expression.py │ │ │ ├── scan_simple.py │ │ │ └── scan_with_paginator.py │ └── rust │ │ ├── .gitignore │ │ ├── Operations.md │ │ ├── README.md │ │ ├── control_plane │ │ └── working_with_tables │ │ │ ├── Cargo.toml │ │ │ └── src │ │ │ ├── create-table-on-demand │ │ │ └── main.rs │ │ │ ├── delete-table │ │ │ └── main.rs │ │ │ ├── describe-table │ │ │ └── main.rs │ │ │ └── list-tables │ │ │ └── main.rs │ │ └── data_plane │ │ ├── working_with_indexes │ │ ├── Cargo.toml │ │ ├── README.md │ │ └── src │ │ │ ├── create-index │ │ │ └── main.rs │ │ │ ├── delete-index │ │ │ └── main.rs │ │ │ └── query-index │ │ │ └── main.rs │ │ ├── working_with_items │ │ ├── Cargo.toml │ │ └── src │ │ │ ├── batch-get │ │ │ └── main.rs │ │ │ ├── batch-write │ │ │ └── main.rs │ │ │ ├── conditional-put-item │ │ │ └── main.rs │ │ │ ├── conditional-update-item │ │ │ └── main.rs │ │ │ ├── delete-item │ │ │ └── main.rs │ │ │ ├── get-item │ │ │ └── main.rs │ │ │ ├── put-item │ │ │ └── main.rs │ │ │ ├── transact-get │ │ │ └── main.rs │ │ │ ├── transact-put │ │ │ └── main.rs │ │ │ └── update-item │ │ │ └── main.rs │ │ ├── working_with_queries │ │ ├── Cargo.toml │ │ ├── README.md │ │ └── src │ │ │ ├── prepare-query-data │ │ │ └── main.rs │ │ │ ├── query-consistent-read │ │ │ └── main.rs │ │ │ ├── query-consumed-capacity │ │ │ └── main.rs │ │ │ ├── query-projection │ │ │ └── main.rs │ │ │ └── query-scan-filter │ │ │ └── main.rs │ │ ├── working_with_scans │ │ ├── Cargo.toml │ │ ├── README.md │ │ └── src │ │ │ ├── scan-in-parallel │ │ │ └── main.rs │ │ │ └── scan-with-pagination │ │ │ └── main.rs │ │ └── working_with_streams │ │ ├── Cargo.toml │ │ └── src │ │ ├── disable-update-streams │ │ └── main.rs │ │ └── enable-update-streams │ │ └── main.rs └── hedging │ └── java │ └── ddb-hedging-sample │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── dynamodbhedging │ │ │ ├── DDBHedgingRequestHandler.java │ │ │ └── DynamoDBHedgedQuery.java │ └── resources │ │ └── log4j.properties │ └── test │ └── java │ └── com │ └── example │ └── dynamodbhedging │ └── DynamoDBHedgedQueryTest.java ├── infrastructure_as_code ├── README.md ├── cdk │ ├── DynamoDBCustomMetrics │ │ ├── README.md │ │ ├── app.py │ │ ├── cdk.json │ │ ├── dynamodb_custom_metrics │ │ │ ├── __init__.py │ │ │ └── dynamodb_custom_metrics_stack.py │ │ ├── lambda │ │ │ └── lambda_function.py │ │ ├── requirements.txt │ │ └── screenshot.png │ └── README.md ├── cloudformation │ ├── README.md │ └── global_tables │ │ ├── GlobalTable_OnDemand.json │ │ ├── GlobalTable_OnDemand.yml │ │ ├── GlobalTable_Provisioned.json │ │ ├── GlobalTable_Provisioned.yml │ │ └── README.md └── security │ ├── DynamoDBIAMPolicies │ ├── AmazonDynamoDB+DAXDataFullAccess.json │ ├── AmazonDynamoDBAcceleratorDataFullAccess.json │ ├── AmazonDynamoDBAppendOnlyAccess.json │ ├── AmazonDynamoDBDataFullAccess.json │ ├── AmazonDynamoDBInfrastructureFullAccess.json │ └── AmazonDynamoDBStreamsOnlyAccess.json │ └── README.md ├── schema_design ├── BuildingBlocks │ └── WriteSharding │ │ ├── README.md │ │ └── python │ │ └── WriteShardingExample.py ├── README.md └── SchemaExamples │ ├── ChatSystem │ ├── ChatSystemSchema.json │ └── README.md │ ├── ComplainManagement │ └── ComplaintManagementSchema.json │ ├── ConnectedVehicles │ ├── ConnectedVehiclesSchema.json │ └── README.md │ ├── GamingPlayerProfiles │ └── GamePlayerProfilesSchema.json │ ├── ReocurringPayments │ └── ReocurringPaymentsSchema.json │ ├── SessionManagement │ ├── README.md │ └── SessionManagementSchema.json │ └── SocialNetwork │ ├── README.md │ └── SocialNetworkSchema.json ├── scripts ├── PrintDistinctPKs │ ├── LoadMaxValues │ │ ├── java │ │ │ ├── Dockerfile │ │ │ ├── README.md │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── java │ │ │ │ └── org │ │ │ │ └── example │ │ │ │ └── LoadMaxValues.java │ │ ├── nodejs │ │ │ ├── loadMaxValues.js │ │ │ └── package.json │ │ └── python │ │ │ └── load_max_values.py │ ├── Printer │ │ ├── java │ │ │ ├── Dockerfile │ │ │ ├── README.md │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── java │ │ │ │ └── org │ │ │ │ └── example │ │ │ │ └── PrintDistinctPKs.java │ │ ├── nodejs │ │ │ ├── package.json │ │ │ └── print_distinct_pks.js │ │ └── python │ │ │ └── print_distinct_pks.py │ ├── README.md │ └── RandomLoader │ │ └── load_random_data.py ├── README.md ├── docker │ ├── README.md │ └── docker-compose.yml └── nosqlworkbenchscript │ ├── README.md │ └── create-workbench-import.js └── workshops ├── README.md ├── global-serverless ├── .chalice │ └── config.json ├── README.md ├── app.py ├── requirements-dev.txt ├── requirements.txt ├── s3.sh ├── sample-data.json ├── test.py └── web │ ├── favicon.ico │ ├── globalflix.css │ ├── globalflix.html │ ├── globalflix.js │ ├── index.css │ ├── index.html │ ├── index.js │ ├── logo.png │ ├── player.css │ ├── player.html │ └── player.js └── relational-migration ├── .chalice ├── config.json └── relational-migration-policy.json ├── README.md ├── app.py ├── chalicelib ├── __init__.py ├── dynamodb_calls.py └── mysql_calls.py ├── load ├── jobs │ ├── Customers.py │ ├── Ledger.py │ ├── OrderLines.py │ ├── Orders.py │ ├── Products.py │ ├── Reps.py │ └── job1.py ├── load.py └── test.py ├── migrate.sh ├── mysql_desc_ddb.py ├── mysql_s3.py ├── requirements.txt ├── setenv.sh ├── setup_tables.sh ├── source-tables ├── create_tables.sh ├── create_tables.sql └── create_views.sql ├── target-tables ├── drop_tables.sh └── list_imports.sh ├── test_delete.py ├── test_desc.py ├── test_get.py ├── test_query.py ├── test_read.py ├── test_scan.py ├── test_sql.py ├── test_tables.py ├── test_update.py ├── test_view.py ├── test_write.py └── webapp ├── api.js ├── form.js ├── generate.js ├── index.css ├── index.html ├── index.js └── sql-samples.js /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "[BUG] - " 5 | labels: bug, needs triage 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. This should include a URL link to the section of the repository that contains the example with the bug. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Run steps '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - SDK Version [e.g. 22] 29 | - Specific Language configuration 30 | 31 | **Additional context** 32 | Add any other context about the problem here. 33 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "[Feature Request] - " 5 | labels: needs triage 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/issue-template.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Issue Template 3 | about: Describe this issue template's purpose here. 4 | title: "[Issue] - " 5 | labels: needs triage 6 | assignees: '' 7 | 8 | --- 9 | 10 | READ BEFORE SUBMITTING THIS ISSUE: 11 | 12 | 99.9% of the cases you should be creating either a Bug or a Feature request: 13 | - Bugs represent something is not working as expected on the existing code and you need to fix it. 14 | - Feature request represents anything new that you want to see in the repository. 15 | - This issue template is for anything that doesn't fit in between those two. 16 | 17 | **Description**: A clear description of your issue, including steps to reproduce. This description also needs to explain why this is not a bug and why you are considering this is a different type of issue. 18 | 19 | **Impact**: Describe the impact of this issue. 20 | 21 | **Context**: Provide any additional context you want to share. 22 | -------------------------------------------------------------------------------- /.github/workflows/main.yaml: -------------------------------------------------------------------------------- 1 | name: PushLSQLWebApp 2 | 3 | permissions: 4 | id-token: write 5 | on: 6 | push: 7 | branches: 8 | - master 9 | 10 | jobs: 11 | buildAndDeploy: 12 | runs-on: ubuntu-latest 13 | env: 14 | STEP_S3_BUCKET: amazon-dynamodb-labs.com 15 | steps: 16 | - name: Checkout 17 | uses: actions/checkout@v3 18 | with: 19 | submodules: 'recursive' 20 | fetch-depth: '0' 21 | - name: Setup Python 22 | uses: actions/setup-python@v4 23 | with: 24 | python-version: '3.10' 25 | - name: Configure AWS Credentials 26 | uses: aws-actions/configure-aws-credentials@v1 27 | with: 28 | aws-region: us-east-1 29 | role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} 30 | - name: S3SyncStaticWeb 31 | run: aws s3 sync ./workshops/relational-migration/webapp/ s3://amazon-dynamodb-labs-static/static/relational-migration/web/ 32 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .DS_Store 3 | python/ReadMe.rst 4 | python/venv 5 | tmpCredentials.json 6 | **/.vscode/** 7 | **/node_modules/** 8 | get-temp-credentials.sh 9 | package-lock.json 10 | .idea/* 11 | *.swp 12 | **/.vs/ 13 | **/bin/ 14 | **/obj/ 15 | **/launchSettings.json 16 | **/.idea/* 17 | 18 | 19 | **/.idea/ 20 | **/.DS_Store 21 | **/.chalice/deployments/ 22 | **/.chalice/deployed/ 23 | workshops/relational-migration/target-tables/ 24 | workshops/relational-migration/syncs3.sh 25 | workshops/relational-migration/.chalice/config.json 26 | workshops/relational-migration/setenv.sh 27 | workshops/relational-migration/setenvd.sh 28 | workshops/relational-migration/source-tables/app_db.* 29 | 30 | **/.aws-sam/ 31 | **.db 32 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | ## Code of Conduct 2 | 3 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 4 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 5 | opensource-codeofconduct@amazon.com with any additional questions or comments. 6 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT No Attribution 2 | 3 | Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 12 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 13 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 14 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 15 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 16 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /NOTICE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2013-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. A copy of the License is located at 4 | 5 | http://aws.amazon.com/apache2.0/ 6 | 7 | or in the "LICENSE.txt" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. 8 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | ## Reporting Security Issues 2 | 3 | We take all security reports seriously. When we receive such reports, we will investigate and subsequently address any potential vulnerabilities as quickly as possible. If you discover a potential security issue in this project, please notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/) or directly via email to [AWS Security](mailto:aws-security@amazon.com). Please do not create a public GitHub issue in this project. 4 | -------------------------------------------------------------------------------- /examples/Bedrock/Langchain/img/chatbot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-dynamodb-examples/aa1021683269d0abbccb091022e02fdf1f94a4b7/examples/Bedrock/Langchain/img/chatbot.png -------------------------------------------------------------------------------- /examples/Bedrock/Langchain/img/echo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-dynamodb-examples/aa1021683269d0abbccb091022e02fdf1f94a4b7/examples/Bedrock/Langchain/img/echo.png -------------------------------------------------------------------------------- /examples/NERDS/basic-template/README.md: -------------------------------------------------------------------------------- 1 | # Basic Template 2 | 3 | In this example you will build the TaskMaster application! 4 | 5 | ![TaskMaster](./basic-backend/documentation/TaskMaster.png) 6 | 7 | To execute this project please: 8 | 9 | 1. Open the [basic-backend](./basic-backend/README.md) folder with instructions to execute the backend locally. 10 | 2. Open the [basic-frontend](./basic-frontend/README.md) folder with instructions to execute the front end and run your web applicaation locally. 11 | 12 | We have recorded a video in our [DynamoDB Nuggets]() playlist that talks about this example in detail. 13 | 14 | [![Watch the video](https://img.youtube.com/vi/u2JtuoTA7Vk/maxresdefault.jpg)](https://youtu.be/u2JtuoTA7Vk) 15 | -------------------------------------------------------------------------------- /examples/NERDS/basic-template/basic-backend/.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: https://github.com/pre-commit/pre-commit-hooks 3 | rev: v4.6.0 4 | hooks: 5 | - id: trailing-whitespace 6 | - id: end-of-file-fixer 7 | - id: check-json 8 | - id: detect-aws-credentials 9 | args: ["--allow-missing-credentials"] 10 | - id: detect-private-key 11 | - repo: https://github.com/Yelp/detect-secrets 12 | rev: v1.5.0 13 | hooks: 14 | - id: detect-secrets 15 | args: ["--baseline", ".secrets.baseline"] 16 | exclude: Pipfile.lock 17 | - repo: https://github.com/pre-commit/mirrors-prettier 18 | rev: v3.1.0 19 | hooks: 20 | - id: prettier 21 | - repo: https://github.com/awslabs/cfn-python-lint 22 | rev: v1.8.2 # The version of cfn-lint to use 23 | hooks: 24 | - id: cfn-python-lint 25 | files: templates/.*\.(json|yml|yaml)$ 26 | -------------------------------------------------------------------------------- /examples/NERDS/basic-template/basic-backend/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Esteban Serna 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /examples/NERDS/basic-template/basic-backend/documentation/Darn-basic-stack.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-dynamodb-examples/aa1021683269d0abbccb091022e02fdf1f94a4b7/examples/NERDS/basic-template/basic-backend/documentation/Darn-basic-stack.gif -------------------------------------------------------------------------------- /examples/NERDS/basic-template/basic-backend/documentation/TaskMaster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-dynamodb-examples/aa1021683269d0abbccb091022e02fdf1f94a4b7/examples/NERDS/basic-template/basic-backend/documentation/TaskMaster.png -------------------------------------------------------------------------------- /examples/NERDS/basic-template/basic-backend/src/retire.txt: -------------------------------------------------------------------------------- 1 | {"version":"5.1.3","start":"2024-08-15T19:18:49.327Z","data":[],"messages":[],"errors":[],"time":0.021} 2 | -------------------------------------------------------------------------------- /examples/NERDS/basic-template/basic-frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "basic-frontend", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "react": "^18.3.1", 7 | "react-dom": "^18.3.1", 8 | "react-icons": "^5.2.1", 9 | "react-scripts": "^5.0.1", 10 | "web-vitals": "^4.2.2" 11 | }, 12 | "scripts": { 13 | "start": "react-scripts start", 14 | "build": "react-scripts build", 15 | "test": "react-scripts test", 16 | "eject": "react-scripts eject" 17 | }, 18 | "browserslist": { 19 | "production": [ 20 | ">0.2%", 21 | "not dead", 22 | "not op_mini all" 23 | ], 24 | "development": [ 25 | "last 1 chrome version", 26 | "last 1 firefox version", 27 | "last 1 safari version" 28 | ] 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /examples/NERDS/basic-template/basic-frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-dynamodb-examples/aa1021683269d0abbccb091022e02fdf1f94a4b7/examples/NERDS/basic-template/basic-frontend/public/favicon.ico -------------------------------------------------------------------------------- /examples/NERDS/basic-template/basic-frontend/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-dynamodb-examples/aa1021683269d0abbccb091022e02fdf1f94a4b7/examples/NERDS/basic-template/basic-frontend/public/logo192.png -------------------------------------------------------------------------------- /examples/NERDS/basic-template/basic-frontend/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-dynamodb-examples/aa1021683269d0abbccb091022e02fdf1f94a4b7/examples/NERDS/basic-template/basic-frontend/public/logo512.png -------------------------------------------------------------------------------- /examples/NERDS/basic-template/basic-frontend/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /examples/NERDS/basic-template/basic-frontend/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /examples/NERDS/basic-template/basic-frontend/src/components/Task/TaskCard.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { FaTrash } from "react-icons/fa"; 3 | import styles from "../../styles"; 4 | 5 | function TaskCard({ task, onDelete }) { 6 | return ( 7 |
8 |
9 |

{task.title}

10 | 13 |
14 |

{task.description}

15 |
16 | ); 17 | } 18 | 19 | export default TaskCard; 20 | -------------------------------------------------------------------------------- /examples/NERDS/basic-template/basic-frontend/src/components/Task/TaskForm.js: -------------------------------------------------------------------------------- 1 | import React, { useState } from "react"; 2 | import { FaPlus } from "react-icons/fa"; 3 | import styles from "../../styles"; 4 | 5 | function TaskForm({ onCreateTask }) { 6 | const [newTask, setNewTask] = useState({ title: "", description: "" }); 7 | 8 | const handleSubmit = (e) => { 9 | e.preventDefault(); 10 | onCreateTask(newTask); 11 | setNewTask({ title: "", description: "" }); 12 | }; 13 | 14 | return ( 15 |
16 |
17 | setNewTask({ ...newTask, title: e.target.value })} 23 | /> 24 |