├── .github ├── scripts │ └── build-assets.py └── workflows │ ├── main.yml │ └── pull-request.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── NOTICE ├── README.md ├── content ├── authors.en.md ├── change-data-capture │ ├── clean-up │ │ └── index.en.md │ ├── ex1 │ │ ├── configure-lambda.en.md │ │ ├── create-dlq.en.md │ │ ├── create-lambda.en.md │ │ ├── enable-ddb-streams.en.md │ │ ├── index.en.md │ │ └── simulate-order-updates.en.md │ ├── ex2 │ │ ├── configure-lambda.en.md │ │ ├── create-dlq.en.md │ │ ├── create-lambda.en.md │ │ ├── enable-kds-streams.en.md │ │ ├── index.en.md │ │ └── simulate-order-updates.en.md │ ├── index.en.md │ ├── overview │ │ ├── create-tables.en.md │ │ ├── index.en.md │ │ └── load-sample-data.en.md │ └── setup │ │ ├── aws-ws-event.en.md │ │ ├── index.en.md │ │ └── user-account.en.md ├── design-patterns │ ├── ex1capacity │ │ ├── Step1.en.md │ │ ├── Step2.en.md │ │ ├── Step3.en.md │ │ ├── Step4.en.md │ │ ├── Step5.en.md │ │ ├── Step6.en.md │ │ ├── Step7.en.md │ │ └── index.en.md │ ├── ex2scan │ │ ├── Step1.en.md │ │ ├── Step2.en.md │ │ └── index.en.md │ ├── ex3gsisharding │ │ ├── Step1.en.md │ │ ├── Step2.en.md │ │ └── index.en.md │ ├── ex4gsioverload │ │ ├── Step1.en.md │ │ ├── Step2.en.md │ │ ├── Step3.en.md │ │ └── index.en.md │ ├── ex5sparse │ │ ├── Step1.en.md │ │ ├── Step2.en.md │ │ ├── Step3.en.md │ │ └── index.en.md │ ├── ex6compos │ │ ├── Step1.en.md │ │ ├── Step2.en.md │ │ ├── Step3.en.md │ │ ├── Step4.en.md │ │ └── index.en.md │ ├── ex7adjlists │ │ ├── Step1.en.md │ │ ├── Step2.en.md │ │ ├── Step3.en.md │ │ ├── Step4.en.md │ │ └── index.en.md │ ├── ex8streams │ │ ├── Step1.en.md │ │ ├── Step2.en.md │ │ ├── Step3.en.md │ │ ├── Step4.en.md │ │ ├── Step5.en.md │ │ ├── Step6.en.md │ │ └── index.en.md │ ├── index.en.md │ └── setup │ │ ├── Step1.en.md │ │ ├── Step2.en.md │ │ ├── Step3.en.md │ │ ├── Step4.en.md │ │ ├── Step5.en.md │ │ ├── Step6.en.md │ │ ├── aws-ws-event.en.md │ │ ├── index.en.md │ │ └── user-account.en.md ├── dynamodb-opensearch-zetl │ ├── index.en.md │ ├── integrations │ │ ├── index.en.md │ │ ├── os-connectors.en.md │ │ └── zetl.en.md │ ├── queries │ │ └── index.en.md │ ├── service-config │ │ ├── bedrock.en.md │ │ ├── ddb.en.md │ │ ├── index.en.md │ │ └── os.en.md │ └── setup │ │ ├── Step1.en.md │ │ ├── aws-ws-event.en.md │ │ ├── index.en.md │ │ └── on-your-own.en.md ├── event-driven-architecture │ ├── ex1overview │ │ ├── Step1.en.md │ │ ├── Step2.en.md │ │ └── index.en.md │ ├── ex2pipeline │ │ ├── Step1.en.md │ │ ├── Step2.en.md │ │ ├── Step3.en.md │ │ └── index.en.md │ ├── ex3fixbugs │ │ ├── Step1.en.md │ │ ├── Step2.en.md │ │ ├── Step3.en.md │ │ └── index.en.md │ ├── ex4summary │ │ ├── Step1.en.md │ │ └── index.en.md │ ├── index.en.md │ └── setup │ │ ├── aws-ws-event.en.md │ │ ├── index.en.md │ │ └── user-account.en.md ├── game-player-data │ ├── core-usage │ │ ├── Step1.en.md │ │ ├── Step2.en.md │ │ ├── Step3.en.md │ │ ├── Step4.en.md │ │ └── index.en.md │ ├── index.en.md │ ├── join-games │ │ ├── Step1.en.md │ │ ├── Step2.en.md │ │ └── index.en.md │ ├── open-games │ │ ├── Step1.en.md │ │ ├── Step2.en.md │ │ ├── Step3.en.md │ │ ├── Step4.en.md │ │ └── index.en.md │ ├── past-games │ │ ├── Step1.en.md │ │ ├── Step2.en.md │ │ └── index.en.md │ ├── plan-model │ │ ├── Step1.en.md │ │ ├── Step2.en.md │ │ ├── Step3.en.md │ │ └── index.en.md │ ├── setup │ │ ├── Step1.en.md │ │ ├── aws-ws-event.en.md │ │ ├── index.en.md │ │ └── on-your-own.en.md │ └── summary.en.md ├── global-serverless-application │ ├── getting_started │ │ ├── aws-ws-event.en.md │ │ ├── index.md │ │ └── on-your-own.en.md │ ├── gt_discussion │ │ └── index.en.md │ ├── index.en.md │ ├── module_1 │ │ └── index.en.md │ ├── module_2 │ │ └── index.en.md │ ├── module_3 │ │ └── index.en.md │ └── summary │ │ └── index.en.md ├── hands-on-labs │ ├── backups │ │ ├── aws-backup-recap.en.md │ │ ├── clean-up.en.md │ │ ├── index.en.md │ │ ├── on-demand-backup.en.md │ │ ├── pitr-backup.en.md │ │ ├── restrict-backup-deletion.en.md │ │ └── schedule-backup.en.md │ ├── explore-cli │ │ ├── cli-deleting-data.en.md │ │ ├── cli-gsi.en.md │ │ ├── cli-read-data.en.md │ │ ├── cli-read-item-collection.en.md │ │ ├── cli-scan.en.md │ │ ├── cli-transactions.en.md │ │ ├── cli-writing-data.en.md │ │ └── index.en.md │ ├── explore-console │ │ ├── console-gsi.en.md │ │ ├── console-read-data.en.md │ │ ├── console-read-item-collection.en.md │ │ ├── console-scan.en.md │ │ ├── console-writing-data.en.md │ │ └── index.en.md │ ├── index.en.md │ └── setup │ │ ├── aws-ws-event.en.md │ │ ├── cleanup.en.md │ │ ├── cloud9.en.md │ │ ├── create-tables.en.md │ │ ├── index.en.md │ │ ├── load-sample-data.en.md │ │ ├── prerequisites.en.md │ │ └── setup.en.md ├── index.en.md ├── rdbms-migration │ ├── index.en.md │ ├── migration-chapter00.en.md │ ├── migration-chapter02-1.en.md │ ├── migration-chapter02.en.md │ ├── migration-chapter03.en.md │ ├── migration-chapter04.en.md │ ├── migration-chapter05.en.md │ └── migration-chapter06.en.md ├── relational-migration │ ├── application refactoring │ │ ├── index.en.md │ │ ├── index2.en.md │ │ └── index3.en.md │ ├── data migration │ │ ├── index.en.md │ │ ├── index2.en.md │ │ ├── index3.en.md │ │ ├── index4.en.md │ │ ├── index5.en.md │ │ └── index6.en.md │ ├── index.en.md │ ├── introduction │ │ ├── img.png │ │ ├── index.en.md │ │ ├── index2.en.md │ │ ├── index3.en.md │ │ ├── index4.en.md │ │ └── index5.en.md │ ├── scenario │ │ ├── index.en.md │ │ └── index2.en.md │ ├── schema refactoring │ │ ├── index.en.md │ │ ├── index2.en.md │ │ ├── index3.en.md │ │ ├── index4.en.md │ │ └── index5.en.md │ ├── setup │ │ ├── index.en.md │ │ ├── index1.en.md │ │ ├── index2.en.md │ │ └── index3.en.md │ └── summary │ │ └── index.en.md └── scenarios │ ├── Bank Payments │ ├── index.en.md │ └── references.en.md │ ├── Retail Cart │ ├── index.en.md │ └── references.en.md │ ├── index.en.md │ └── reference-materials │ └── index.en.md ├── contentspec.yaml ├── design-patterns ├── .gitignore ├── cloudformation │ ├── .gitignore │ ├── C9.yaml │ └── UserDataC9.sh ├── data │ ├── employees.csv │ ├── invoice-data.csv │ ├── invoice-data2.csv │ ├── logfile_medium1.csv │ ├── logfile_medium2.csv │ ├── logfile_small1.csv │ └── logfile_stream.csv ├── ddbreplica_lambda.py ├── gsi_city_dept.json ├── gsi_manager.json ├── iam-role-policy.json ├── iam-trust-relationship.json ├── lab.policy ├── lab_config.py ├── load_employees.py ├── load_invoice.py ├── load_logfile.py ├── load_logfile_parallel.py ├── query_city_dept.py ├── query_employees.py ├── query_index_invoiceandbilling.py ├── query_invoiceandbilling.py ├── query_responsecode.py ├── requirements.txt ├── scan_for_managers.py ├── scan_for_managers_gsi.py ├── scan_logfile_parallel.py └── scan_logfile_simple.py ├── event-driven ├── GeneratorLambdaPackage │ └── lambda_function.py ├── MapLambdaPackage │ ├── constants.py │ ├── functions.py │ └── lambda_function.py ├── ReduceLambdaPackage │ ├── constants.py │ ├── functions.py │ └── lambda_function.py ├── StateLambdaPackage │ ├── constants.py │ ├── functions.py │ └── lambda_function.py └── event-driven-cfn.yaml ├── game-player-data └── scripts │ ├── add_inverted_index.py │ ├── add_secondary_index.py │ ├── bulk_load_table.py │ ├── create_table.py │ ├── delete_table.py │ ├── entities.py │ ├── fetch_game_and_players.py │ ├── find_games_for_user.py │ ├── find_open_games.py │ ├── find_open_games_by_map.py │ ├── items.json │ ├── join_game.py │ └── start_game.py ├── global-serverless ├── global-serverless │ ├── .chalice │ │ └── config.json │ ├── README.md │ ├── app.py │ ├── requirements-dev.txt │ ├── requirements.txt │ ├── 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 ├── scenario-solutions ├── bank-payments │ ├── BankDescription.txt │ └── BankModel.json └── retail-cart │ ├── CartDescription.txt │ └── CartModel.json └── static ├── files ├── dynamodb-opensearch-zetl │ ├── OpenSearchPipeline │ │ ├── bedrock_query.py │ │ ├── credentials.sh │ │ └── product_en.json │ └── dynamodb-opensearch-setup.yaml ├── event-driven-architecture │ └── sample.json ├── hands-on-labs │ ├── Task_1.json │ ├── Task_2.json │ ├── Task_3.json │ ├── dynamodb-labs-vpc.yaml │ ├── migration-dms-setup.yaml │ └── migration-env-setup.yaml └── visualizer │ ├── LICENSE.txt │ ├── README.md │ ├── css │ ├── bootstrap-3.3.7.min.css │ └── main.css │ ├── data │ ├── ACL.json │ ├── Asset Management.json │ ├── FlightsFares.json │ ├── Hospital.json │ ├── Hotel Reservations.json │ ├── Mobile Payments Service.json │ ├── OneTable.js │ ├── OneTable.json │ ├── Phone Billing.json │ └── banking.json │ ├── favicon.ico │ ├── img │ ├── AttributeContext.png │ ├── DynamoDB.png │ ├── MappingFunction.png │ ├── OneTable.png │ ├── PK.png │ ├── PKcontext.png │ ├── SK.png │ ├── SKcontext.png │ ├── add.png │ ├── back.png │ ├── binoculars.png │ ├── button.png │ ├── button1.png │ ├── data │ │ └── Hospital.json │ ├── delete.png │ ├── model.png │ ├── model1.png │ ├── model2.png │ ├── model3.png │ ├── model4.png │ ├── model5.png │ ├── newTable.png │ ├── primaryKey.png │ ├── remove.png │ ├── show-schema.png │ ├── swap.png │ ├── tab.png │ └── valueTemplate.png │ ├── index.html │ └── js │ ├── aws-sdk-2.892.0.min.js │ ├── function.js │ ├── globals.js │ ├── jquery-3.5.1.min.js │ ├── onload.js │ └── query.js └── images ├── Amazon-DynamoDB.png ├── GSI-logfile-stats.png ├── adjacencylist1.jpg ├── adjacencylist2.png ├── aws-ws-event1.png ├── aws-ws-event2.png ├── aws-ws-event3.png ├── aws-ws-event4.png ├── aws-ws-event5.png ├── awsconsole1.png ├── awsconsole2.png ├── awsconsole3.png ├── awsconsole4.png ├── awsconsole4a.png ├── awsconsole5.png ├── awsconsole6.png ├── awsconsole7.png ├── awsconsolescan.png ├── awsnewconsole3.png ├── change-data-capture ├── cdc-ddbs │ └── create-order-history-ddbs.png ├── cdc-kds │ └── create-order-history-kds.png ├── cleanup │ ├── delete-policies-one.png │ ├── delete-policies-two.png │ ├── delete-policies.png │ └── delete-roles.png ├── ex1 │ ├── add-layer.png │ ├── deploy-code.png │ ├── edit-env-var.png │ ├── edit-item.png │ ├── explore-items.png │ ├── explore-table-items.png │ ├── iam-edit-policy.png │ ├── new-env-var.png │ ├── order-update-one.png │ ├── orders-history-one.png │ ├── orders-history-two.png │ ├── orders-initial.png │ ├── orders-update-two.png │ ├── select-dynamodb-service.png │ ├── select-item.png │ ├── select-layer.png │ ├── select-orders-table.png │ ├── set-name.png │ ├── set-permissions.png │ ├── specify-layer.png │ ├── trigger-config.png │ ├── trigger-settings.png │ ├── triggers.png │ └── view-orders-table.png ├── ex2 │ ├── add-layer.png │ ├── deploy-code.png │ ├── orders-history-lab2-initial.png │ ├── orders-history-one.png │ ├── orders-history-two.png │ ├── orders-lab2-initial.png │ ├── orders-update-one.png │ ├── orders-update-two.png │ ├── select-layer.png │ ├── trigger-settings.png │ └── trigger.png └── setup │ ├── cloud9-create-env.png │ ├── cloud9-launch-env.png │ ├── cloud9-name-env.png │ └── cloud9-select-ec2.png ├── cloudformation-launch-stack.png ├── ddb-os-zetl.png ├── ddb-os-zetl1.jpg ├── ddb-os-zetl10.jpg ├── ddb-os-zetl11.jpg ├── ddb-os-zetl12.jpg ├── ddb-os-zetl13.jpg ├── ddb-os-zetl14.jpg ├── ddb-os-zetl15.jpg ├── ddb-os-zetl16.jpg ├── ddb-os-zetl17.jpg ├── ddb-os-zetl18.jpg ├── ddb-os-zetl19.jpg ├── ddb-os-zetl3.jpg ├── ddb-os-zetl4.jpg ├── ddb-os-zetl5.jpg ├── ddb-os-zetl6.jpg ├── ddb-os-zetl7.jpg ├── ddb-os-zetl8.jpg ├── ddb-os-zetl9.jpg ├── denormalization.png ├── employees-GSI3.png ├── employees-scan-GSI.png ├── employeestablenew.png ├── event-driven-architecture ├── .gitkeep ├── architecture │ ├── after-lab-1.png │ ├── after-lab-2.png │ ├── before-lab-1.png │ ├── lab2-step1.png │ ├── lab2-step2.png │ ├── step1.png │ ├── step2.png │ ├── step3.png │ ├── workshop-pipeline-1.png │ ├── workshop-pipeline-2.png │ ├── workshop-pipeline-3.png │ ├── workshop-pipeline-broken.png │ ├── workshop-pipeline-final-target.png │ ├── workshop-pipeline-lab-2.png │ ├── workshop-pipeline-lab1-all-steps.png │ ├── workshop-pipeline-lab1-step1.jpg │ ├── workshop-pipeline-lab1-step1.png │ ├── workshop-pipeline-lab1-step2.png │ ├── workshop-pipeline-lab1-step3.png │ └── workshop-pipeline-lab2-all-steps.png ├── aws-logo.png ├── deep-dive │ ├── pipeline-explanation-part-1.png │ ├── pipeline-explanation-part-2.png │ ├── pipeline-explanation-part-3.png │ ├── stages.png │ └── workshop-pipeline-stages.png ├── event-engine │ ├── ee-aws-console.png │ ├── ee-console-login.png │ ├── ee-hash.png │ ├── ee-readme.png │ ├── ee-sign-in.png │ └── ee-teams.png ├── lab1-permissions │ ├── .gitignore │ ├── click_add_new_statement.png │ ├── click_on_edit_policy.png │ ├── click_on_role.png │ ├── resource_stream.png │ ├── resource_stream_2.png │ └── set_resource.png ├── lab1 │ ├── add-trigger-map-lambda.png │ ├── add-trigger-reduce-lambda.png │ ├── add-trigger-state-lambda.png │ ├── aggregate-table-items.png │ ├── connect-state-lambda.png │ ├── dynamodb-ecosystem.png │ ├── originals │ │ ├── connect-map-lambda.png │ │ ├── connect-reduce-lambda.png │ │ ├── connect-state-lambda.drawio │ │ ├── connect-state-lambda.png │ │ └── reduce-lambda-error-permissions.png │ ├── reduce-lambda-concurrency.png │ ├── reduce-lambda-error-permissions.png │ ├── reduce-table-items.png │ ├── state-lambda-logs.png │ └── state-table-data.png ├── lab2 │ ├── failing-lambdas.png │ ├── fix-map-lambda.png │ ├── fix-reduce-lambda.png │ ├── fix-state-lambda.png │ └── lab2-optional.png └── target │ ├── TargetMapLambda.png │ ├── TargetReduceLambda.png │ └── TargetStateLambda.png ├── game-player-data ├── core-usage │ └── aws-console-dynamodb-battle-royale-explore-items.png ├── join-games │ └── aws-console-dynamodb-gsi-query-opengamesindex.png ├── open-games │ ├── aws-console-dynamodb-battle-royale-partiql-editor.png │ ├── aws-console-dynamodb-partiql-editor-opengamesindex-query.png │ └── aws-console-menu-partiql-editor.png ├── plan-model │ └── erd.png └── setup │ └── cloud9-environment.png ├── global-serverless-application ├── getting_started │ ├── workshopstudio-awsconsole.png │ └── workshopstudio-openconsole.png ├── module_1 │ ├── cloud9-environment.png │ └── cloudshell.png ├── module_2 │ ├── architecture.png │ ├── distance_gt.png │ ├── gt_replication_conflict.png │ └── gt_replication_delay.png └── module_3 │ ├── globalflix.png │ ├── globalflix_progress.png │ ├── lambda_concurrency.png │ ├── lambda_throttle.png │ ├── lambda_unthrottle.png │ ├── player.png │ ├── ui_error.png │ └── ui_failover.png ├── hands-on-labs ├── backup │ ├── backup_plan_delete_1.png │ ├── backup_plan_delete_2.png │ ├── backup_plan_delete_3.png │ ├── backup_plan_delete_4.png │ ├── backup_vault_delete_1.png │ ├── backup_vault_delete_2.png │ ├── od_backup_1.png │ ├── od_backup_2.png │ ├── od_backup_3.png │ ├── od_backup_4.png │ ├── od_backup_5.png │ ├── od_backup_6.png │ ├── pitr_backup_1.png │ ├── pitr_backup_2.png │ ├── pitr_restore_1.png │ ├── pitr_restore_2.png │ ├── pitr_restore_3.png │ ├── pitr_unwanted_records.png │ ├── restore_point_delete_1.png │ ├── restrict_delete_1.png │ ├── restrict_delete_2.png │ ├── sched_backup_1.png │ ├── sched_backup_10.png │ ├── sched_backup_11.png │ ├── sched_backup_12.png │ ├── sched_backup_13.png │ ├── sched_backup_14.png │ ├── sched_backup_15.png │ ├── sched_backup_16.png │ ├── sched_backup_2.png │ ├── sched_backup_3.png │ ├── sched_backup_4.png │ ├── sched_backup_5.png │ ├── sched_backup_6.png │ ├── sched_backup_7.png │ ├── sched_backup_8.png │ └── sched_backup_9.png ├── dynamodb-labs-cfn-delete-stack.png ├── explore-console │ ├── console_create_gsi_1.png │ ├── console_create_gsi_2.png │ ├── console_create_item_1.png │ ├── console_create_item_2.png │ ├── console_delete_gsi.png │ ├── console_delete_item.png │ ├── console_explore_item_select_table.png │ ├── console_item_editor_forms.png │ ├── console_item_editor_json.png │ ├── console_item_explorer_expand_tables.png │ ├── console_item_explorer_query_reply_1.png │ ├── console_item_explorer_query_reply_2.png │ ├── console_item_explorer_query_reply_3.png │ ├── console_item_explorer_query_reply_4.png │ ├── console_item_explorer_scan_reply_1.png │ ├── console_item_explorer_scan_reply_2.png │ ├── console_menu_explore_item.png │ ├── console_menu_hamburger_icon.png │ ├── console_menu_item_explorer.png │ ├── console_modify_item_1.png │ ├── console_modify_item_2.png │ ├── console_modify_item_3.png │ ├── console_modify_item_4.png │ ├── console_productcatalog_preview.png │ └── dynamodb_pick_tables.png └── setup │ ├── cloud9_setup.png │ ├── dynamodb-labs-vpc-create-stack-1.png │ ├── dynamodb-labs-vpc-create-stack-2.png │ ├── dynamodb-labs-vpc-create-stack-3.png │ ├── dynamodb_lab_architecture.png │ ├── dynamodb_lab_architecture.xml │ └── load_data.png ├── iam-1-create-user.png ├── iam-2-attach-policy.png ├── iam-3-create-user.png ├── iam-4-save-url.png ├── iam-signin.png ├── image1-1.png ├── image1.jpg ├── image2.jpg ├── image3.jpg ├── image4.jpg ├── image5.jpg ├── image6.jpg ├── image7.jpg ├── image8.jpg ├── invoice-bills-GSI1.png ├── lowgsi-gsi1-throttles.png ├── lowgsi-gsi1-wc.png ├── lowgsi-table-throttles.png ├── lowgsi-table-wc.png ├── migration-environment.png ├── migration1.jpg ├── migration10.jpg ├── migration11.jpg ├── migration12.jpg ├── migration13.jpg ├── migration14.jpg ├── migration15.jpg ├── migration16.jpg ├── migration17.jpg ├── migration18.jpg ├── migration19.jpg ├── migration2.jpg ├── migration20.jpg ├── migration21.jpg ├── migration22.jpg ├── migration23.jpg ├── migration24.jpg ├── migration25.jpg ├── migration26.jpg ├── migration27.jpg ├── migration28.jpg ├── migration29.jpg ├── migration3.jpg ├── migration30.jpg ├── migration31.jpg ├── migration32.png ├── migration33.png ├── migration34.png ├── migration35.png ├── migration36.png ├── migration4.jpg ├── migration5.jpg ├── migration6.jpg ├── migration7.jpg ├── migration8.jpg ├── migration9.jpg ├── nosql_wb.png ├── relational-migration ├── customers.png ├── customers_ddb.png ├── customers_indexes_ddb.png ├── customers_indexes_ddb_form.png ├── ddb_gsi.png ├── extract.png ├── fk_result.png ├── foreign_key.png ├── frontpage.png ├── import-from-s3.png ├── import.png ├── migrate_flow.png ├── migrate_output.png ├── mysql_s3_output.png ├── mysql_s3_write_output.png ├── oneforone.png ├── orderlines.png ├── phases.png ├── querying_tab.png ├── range_expression.png ├── rationales.png ├── relational-stack.png ├── relational_schema.png ├── setenv.png ├── singletableview.png ├── sparse.png ├── stacked.png ├── starting.png ├── type_conversion.png ├── vehicles.png └── view_result.png ├── tablelogfile-stats.png ├── zetl-cfn-console1.png └── zetl-cloud9-environment.png /.github/workflows/pull-request.yml: -------------------------------------------------------------------------------- 1 | name: ValidatePR 2 | 3 | on: 4 | pull_request_target: 5 | branches: [ master ] 6 | 7 | jobs: 8 | buildAndVerify: 9 | permissions: 10 | id-token: write 11 | contents: write 12 | runs-on: ubuntu-latest 13 | env: 14 | STEP_S3_BUCKET: 'test.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@v4 27 | with: 28 | aws-region: us-east-1 29 | role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} 30 | - name: Pull preview build 31 | run: aws s3 sync s3://amazon-dynamodb-labs-static/build/ . && chmod +x preview_build 32 | - name: Build Assets 33 | run: python3 ./.github/scripts/build-assets.py 34 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.swp 3 | public/ 4 | __pycache__/ 5 | .python-version 6 | build 7 | .hugo_build.lock 8 | preview_build 9 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | ## Code of Conduct 2 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 3 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 4 | opensource-codeofconduct@amazon.com with any additional questions or comments. 5 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | -------------------------------------------------------------------------------- /content/change-data-capture/ex1/create-dlq.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Create Dead Letter Queue" 3 | date: 2023-12-01T00:00:00-00:00 4 | weight: 110 5 | chapter: true 6 | --- 7 | 8 | If the lambda function is not able to successfully process a record it receives from DynamoDB stream, the Lambda service should write the metadata for the error record to a dead letter queue (DLQ) so the reason for the failure can be investigated and resolved. 9 | 10 | So create an [Amazon SQS Dead Letter Queue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) named **orders-ddbs-dlq** for your lambda function trigger using the AWS CLI command below. 11 | 12 | ```bash 13 | aws sqs create-queue --queue-name orders-ddbs-dlq 14 | ``` 15 | 16 | Sample output: 17 | 18 | ``` 19 | { 20 | "QueueUrl": "https://sqs.{aws-region}.amazonaws.com/{aws-account-id}/orders-ddbs-dlq" 21 | } 22 | ``` 23 | 24 | Later you will need the queue ARN. Use the below command, modifying the queue URL after *--queue-url* to match the result of the previous command, and then save the ARN for later use. 25 | 26 | ```bash 27 | aws sqs get-queue-attributes --attribute-names "QueueArn" --query 'Attributes.QueueArn' --output text \ 28 | --queue-url "https://sqs.{aws-region}.amazonaws.com/{aws-account-id}/orders-ddbs-dlq" 29 | ``` -------------------------------------------------------------------------------- /content/change-data-capture/ex1/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "3. Change Data Capture using DynamoDB Streams" 3 | date: 2023-12-01T00:00:00-00:00 4 | weight: 10 5 | chapter: true 6 | --- 7 | 8 | [DynamoDB streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html) records a time ordered sequence of item level changes that occur on a DynamoDB table. Once enabled, information about all item level changes will be logged and stored for up to 24 hours. 9 | 10 | Changes to items on DynamoDB tables with streams enabled are captured in near real-time so the events can be used as triggers for event driven applications that consume data from your DynamoDB stream. 11 | 12 | In this chapter, you enable DynamoDB streams on the Orders table and deploy an AWS Lambda function that copies changes from the Orders table to the OrdersHistory table every time an item is updated on the Orders table. 13 | 14 | The resulting solution is shown in the image below. 15 | 16 | ![Final Deployment Architecture](/static/images/change-data-capture/cdc-ddbs/create-order-history-ddbs.png) 17 | -------------------------------------------------------------------------------- /content/change-data-capture/ex2/create-dlq.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Create Dead Letter Queue" 3 | date: 2023-12-01T00:00:00-00:00 4 | weight: 210 5 | chapter: true 6 | --- 7 | 8 | If the lambda function is not able to successfully process any record it receives from Amazon Kinesis, the Lambda service should write the metadata for the error record to a dead letter queue (DLQ) so the reason for the failure can be investigated and resolved. 9 | 10 | So create an [Amazon SQS Dead Letter Queue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) named **orders-kds-dlq** for your lambda function trigger using the AWS CLI command below. 11 | 12 | ```bash 13 | aws sqs create-queue --queue-name orders-kds-dlq 14 | ``` 15 | 16 | Sample output: 17 | 18 | ``` 19 | { 20 | "QueueUrl": "https://sqs.{aws-region}.amazonaws.com/{aws-account-id}/orders-kds-dlq" 21 | } 22 | ``` 23 | 24 | As before you will need the queue ARN. Use the below command, modifying the queue URL after *--queue-url* to match the result of the previous command. 25 | 26 | ```bash 27 | aws sqs get-queue-attributes --attribute-names "QueueArn" --query 'Attributes.QueueArn' --output text \ 28 | --queue-url "https://sqs.{aws-region}.amazonaws.com/{aws-account-id}/orders-kds-dlq" 29 | ``` -------------------------------------------------------------------------------- /content/change-data-capture/ex2/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "4. Change Data Capture using Kinesis Data Streams" 3 | date: 2023-12-01T00:00:00-00:00 4 | weight: 15 5 | chapter: true 6 | --- 7 | 8 | [Amazon Kinesis Data Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html) can be used to collect and process large streams of data records from applications that produce streaming data in real-time. At a high level, data producers push data records to Amazon Kinesis Data Streams and consumers can read and process the data in real-time. 9 | 10 | Data on Amazon Kinesis Data Streams is by default available for 24 hours after the data is written to the stream and the retention period can be increased to a maximum of 365 days. 11 | 12 | Amazon DynamoDB has native integration with Kinesis streams so Kinesis Data Streams can also be used to record item level changes to DynamoDB tables. 13 | 14 | In this chapter, you will repeat the process of capturing item level changes on a DynamoDB table and write those changes to a different DynamoDB table. But in this section, change data capture will be done using Amazon Kinesis Data Streams. 15 | 16 | The architecture of the resulting solution is shown in the image below. 17 | 18 | ![Final Deployment Architecture](/static/images/change-data-capture/cdc-kds/create-order-history-kds.png) 19 | -------------------------------------------------------------------------------- /content/change-data-capture/setup/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "1. Getting Started" 3 | date: 2023-12-01T00:00:00-00:00 4 | weight: 1 5 | chapter: true 6 | description: "Set up the lab environment." 7 | --- 8 | 9 | ## Getting Started 10 | 11 | To run this lab, you will need an AWS account, and a user identity with access to the following services: 12 | 13 | * Amazon DynamoDB 14 | * Amazon Kinesis 15 | * AWS Lambda 16 | * Amazon Simple Queue Service 17 | * AWS Cloud9 Environment 18 | 19 | You can use your own account, or an account provided through Workshop Studio as part of an AWS organized workshop. Using an account provided by Workshop Studio is the easier path, as you will have full access to all AWS services, and the account will terminate automatically when the event is over. 20 | 21 | To set up this workshop, choose one of the following links, depending on whether you are: 22 | - :link[Attending an AWS-hosted event (using AWS-provided access codes)]{href="/change-data-capture/setup/aws-ws-event/"} 23 | - :link[Running the workshop on your own (in your own account)]{href="/change-data-capture/setup/user-account/"} 24 | -------------------------------------------------------------------------------- /content/design-patterns/ex1capacity/Step2.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Step 2 - Load sample data into the table" 3 | date: 2019-12-02T10:26:28-08:00 4 | weight: 3 5 | --- 6 | 7 | 8 | Now that you have created the table, you can load some sample data into the table by running the following Python script. 9 | ```bash 10 | cd /home/ubuntu/workshop 11 | python load_logfile.py logfile ./data/logfile_small1.csv 12 | ``` 13 | The parameters in the preceding command: 1) Table name = `logfile` 2) File name = `logfile_small1.csv` 14 | 15 | The output will look like the following. 16 | 17 | ```txt 18 | row: 100 in 0.780548095703125 19 | row: 200 in 7.2669219970703125 20 | row: 300 in 1.547729730606079 21 | row: 400 in 3.9651060104370117 22 | row: 500 in 3.98996901512146 23 | RowCount: 500, Total seconds: 17.614499807357788 24 | ``` 25 | 26 | 27 | **Curious behavior:** You might wonder why one of the runs took more than five seconds. See the next step for the explanation. 28 | -------------------------------------------------------------------------------- /content/design-patterns/ex1capacity/Step3.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Step 3 - Load a larger file to compare the execution times" 3 | date: 2019-12-02T10:26:29-08:00 4 | weight: 4 5 | --- 6 | 7 | 8 | Run the script again, but this time use a larger input data file. 9 | ```bash 10 | python load_logfile.py logfile ./data/logfile_medium1.csv 11 | ``` 12 | **Parameters:** 1) Table name = `logfile` 2) File name = `logfile_medium1.csv` 13 | 14 | The output will look like the following. It will run slower toward the end and take anywhere from one to three minutes to complete, depending on how quickly you run this command after Step 2. 15 | 16 | ```txt 17 | row: 100 in 0.490761995316 18 | ... 19 | row: 2000 in 3.188856363296509 20 | RowCount: 2000, Total seconds: 75.0764648914 21 | ``` 22 | 23 | OR: 24 | 25 | ```txt 26 | row: 100 in 0.490761995316 27 | ... 28 | row: 2000 in 18.479122161865234 29 | RowCount: 2000, Total seconds: 133.84829711914062 30 | ``` 31 | 32 | **Review the output:** You will notice that the load time for each batch of 100 rows was frequently above five seconds. This is because in each multisecond batch, you are seeing throttles that cause the Boto3 SDK to slow down the rate of inserts (also known as exponential backoff). The Boto3 SDK is waiting for DynamoDB to replenish the capacity of the DynamoDB table, which occurs every second for provisioned throughput tables. In Amazon CloudWatch, these throttles appear under the metric name `WriteThrottleEvents`. 33 | -------------------------------------------------------------------------------- /content/design-patterns/ex1capacity/Step5.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Step 5 - Increase the capacity of the table" 3 | date: 2019-12-02T10:26:29-08:00 4 | weight: 6 5 | --- 6 | 7 | 8 | Run the following AWS CLI command to increase the write capacity units and read capacity units from 5 to 100. 9 | ```bash 10 | aws dynamodb update-table --table-name logfile \ 11 | --provisioned-throughput ReadCapacityUnits=100,WriteCapacityUnits=100 12 | ``` 13 | 14 | Run the command to wait until the table becomes Active. 15 | ```bash 16 | time aws dynamodb wait table-exists --table-name logfile 17 | ``` 18 | 19 | **Topic for discussion:** How long did it take to increase the capacity? Was it faster, or longer than you expected? Often, when you need more capacity from your provisioned throughput table it is available in only tens of seconds. 20 | -------------------------------------------------------------------------------- /content/design-patterns/ex1capacity/Step6.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Step 6 - After increasing the table’s capacity, load more data" 3 | date: 2019-12-02T10:26:29-08:00 4 | weight: 7 5 | --- 6 | 7 | After you increased the table’s capacity, run the following Python script again to populate the table using the `logfile_medium2.csv` input data file with the same number of rows as when you ran this command previously. Notice that the execution of the command happens more quickly this time. 8 | 9 | ```bash 10 | python load_logfile.py logfile ./data/logfile_medium2.csv 11 | ``` 12 | 13 | The output will look like this: 14 | 15 | ```txt 16 | row: 100 in 0.9451174736022949 17 | row: 200 in 0.8512668609619141 18 | ... 19 | row: 1900 in 0.8499886989593506 20 | row: 2000 in 0.8817043304443359 21 | RowCount: 2000, Total seconds: 17.13607406616211 22 | ``` 23 | 24 | ::alert[With the new capacity, the total load time is lower.] -------------------------------------------------------------------------------- /content/design-patterns/ex1capacity/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Exercise 1: DynamoDB Capacity Units and Partitioning" 3 | date: 2019-12-02T10:16:44-08:00 4 | weight: 2 5 | chapter: true 6 | description: "Learn about provisioned capacity." 7 | --- 8 | 9 | 10 | In this exercise, you load data into DynamoDB tables that are provisioned with different write/read capacity units, and compare the load times for different datasets. First, you load a smaller dataset into a table and note the quick execution times. Next, you load a larger dataset into an underprovisioned table to simulate throttling exceptions. Finally, you simulate the global secondary index back pressure on a table by creating a table with higher provisioning and a global secondary index with only 1 write capacity unit (WCU). In this exercise, you use sample web server access log data, similiar to the web server log data generated by Apache. 11 | -------------------------------------------------------------------------------- /content/design-patterns/ex5sparse/Step3.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Step 3 - Scan the employees table to find managers by using the sparse global secondary index" 3 | date: 2019-12-02T10:57:24-08:00 4 | weight: 3 5 | --- 6 | 7 | 8 | Now, scan the new global secondary index `GSI_2` on the `employees` table. In using our new sparse index we expect that we'll consume read capacity for fewer items. We'll use the sparse index as a very effective filter to improve efficiency for this access pattern. 9 | 10 | ```py 11 | response = table.scan( 12 | Limit=pageSize, 13 | IndexName='GSI_2' 14 | ) 15 | ``` 16 | Run the following AWS CLI command to execute this scan using the sparse index. 17 | ```bash 18 | python scan_for_managers_gsi.py employees 100 19 | ``` 20 | **Parameters:** 21 | 1. Table name = `employees` 22 | 1. Page size = `100` (this is size of the pagination for the scan). 23 | 24 | The following output includes the scanned count and the execution time. 25 | ```txt 26 | Number of managers: 84. # of records scanned: 84. Execution time: 0.287754058838 seconds 27 | ``` 28 | 29 | Observe the scanned count and execution time using the sparse index. How does this compare to the result achieved from the Scan of the base table in Step 2? The sparse index has less data and is more efficient. 30 | 31 | -------------------------------------------------------------------------------- /content/design-patterns/ex5sparse/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Exercise 5: Sparse Global Secondary Indexes" 3 | date: 2019-12-02T10:17:48-08:00 4 | weight: 6 5 | chapter: true 6 | description: "Learn how to cut down the resources required for your searches on uncommon attributes." 7 | --- 8 | 9 | 10 | You can use a sparse global secondary index to locate table items that have an uncommon attribute. To do this, you take advantage of the fact that table items that do not contain global secondary index attribute(s) are not indexed at all. 11 | 12 | Such a query for table items with an uncommon attribute can be efficient because the number of items in the index is significantly lower than the number of items in the table. In addition, the fewer table attributes you project into the index, the fewer write and read capacity units you consume from the index. 13 | -------------------------------------------------------------------------------- /content/design-patterns/ex6compos/Step3.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Step 3 - Query all the employees of a city" 3 | date: 2019-12-02T12:16:25-08:00 4 | weight: 3 5 | --- 6 | 7 | 8 | You have a new global secondary index that you can use for querying employees by city. Run the following Python command to list all employees by department in Dallas, Texas. 9 | ```bash 10 | python query_city_dept.py employees TX --citydept Dallas 11 | ``` 12 | The result should look like the following. 13 | ```txt 14 | List of employees . State: TX 15 | Name: Grayce Duligal. City: Dallas. Dept: Development 16 | Name: Jere Vaughn. City: Dallas. Dept: Development 17 | Name: Valeria Gilliatt. City: Dallas. Dept: Development 18 | ... 19 | Name: Brittani Hunn. City: Dallas. Dept: Support 20 | Name: Oby Peniello. City: Dallas. Dept: Support 21 | Total of employees: 47. Execution time: 0.21702003479 seconds 22 | ``` 23 | 24 | 25 | -------------------------------------------------------------------------------- /content/design-patterns/ex6compos/Step4.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Step 4 - Querying all the employees of a city and a specific department" 3 | date: 2019-12-02T12:16:26-08:00 4 | weight: 4 5 | --- 6 | 7 | You also can use the global secondary index to query employees by state. Run the following Python script to list all employees in the Operation department in Dallas, Texas. 8 | ```bash 9 | python query_city_dept.py employees TX --citydept 'Dallas#Op' 10 | ``` 11 | Output: 12 | ```txt 13 | List of employees . State: TX 14 | Name: Brady Marvel. City: Dallas. Dept: Operation 15 | Name: Emmye Fletcher. City: Dallas. Dept: Operation 16 | Name: Audra Leahey. City: Dallas. Dept: Operation 17 | Name: Waneta Parminter. City: Dallas. Dept: Operation 18 | Name: Lizbeth Proudler. City: Dallas. Dept: Operation 19 | Name: Arlan Cummings. City: Dallas. Dept: Operation 20 | Name: Bone Ruggs. City: Dallas. Dept: Operation 21 | Name: Karlis Prisk. City: Dallas. Dept: Operation 22 | Name: Marve Bignold. City: Dallas. Dept: Operation 23 | Total of employees: 9. Execution time: 0.174154996872 seconds 24 | ``` 25 | In this exercise, we created a global secondary index to query additional attributes. Data can now be retrieved using the City and Department fields. 26 | -------------------------------------------------------------------------------- /content/design-patterns/ex7adjlists/Step1.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Step 1 - Create and load the the InvoiceandBilling table" 3 | date: 2019-12-02T12:24:33-08:00 4 | weight: 1 5 | --- 6 | 7 | 8 | Run the AWS CLI command to create the table named `InvoiceAndBilling` and create a GSI named `GSI_1` which is partitioned on `SK` attribute of the parent table: 9 | ```bash 10 | aws dynamodb create-table --table-name InvoiceAndBills \ 11 | --attribute-definitions AttributeName=PK,AttributeType=S AttributeName=SK,AttributeType=S \ 12 | --key-schema AttributeName=PK,KeyType=HASH AttributeName=SK,KeyType=RANGE \ 13 | --provisioned-throughput ReadCapacityUnits=100,WriteCapacityUnits=100 \ 14 | --tags Key=workshop-design-patterns,Value=targeted-for-cleanup \ 15 | --global-secondary-indexes "IndexName=GSI_1,\ 16 | KeySchema=[{AttributeName=SK,KeyType=HASH}],\ 17 | Projection={ProjectionType=ALL},\ 18 | ProvisionedThroughput={ReadCapacityUnits=100,WriteCapacityUnits=100}" 19 | ``` 20 | Wait until the table becomes active: 21 | ```bash 22 | aws dynamodb wait table-exists --table-name InvoiceAndBills 23 | ``` 24 | 25 | Then, load data into the InvoiceAndBills table: 26 | ```bash 27 | python load_invoice.py InvoiceAndBills ./data/invoice-data.csv 28 | ``` 29 | -------------------------------------------------------------------------------- /content/design-patterns/ex7adjlists/Step2.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Step 2 - Review the InvoiceAndBills table on the DynamoDB console" 3 | date: 2019-12-02T12:24:34-08:00 4 | weight: 2 5 | --- 6 | 7 | In the DynamoDB console, open the **InvoiceAndBills** table and choose the **Items** menu option. From the dropdown menu, choose `InvoiceAndBills GSI_1` and then `Scan` the table. 8 | 9 | In the output, choose **PK** to sort the data in reverse. Notice the different entity types in the same table. 10 | 11 | ![Adjacency Lists](/static/images/invoice-bills-GSI1.png) 12 | 13 | In the following steps you will query the table and retrieve different entity types. Optionally consider performing the queries in the AWS console right after you query them with the Python scripts for extra insight. 14 | -------------------------------------------------------------------------------- /content/design-patterns/ex7adjlists/Step3.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Step 3 - Query the table's invoice details" 3 | date: 2019-12-02T12:24:34-08:00 4 | weight: 3 5 | --- 6 | 7 | Run the following script to query the table’s invoice details. 8 | 9 | ```bash 10 | python query_invoiceandbilling.py InvoiceAndBills 'I#1420' 11 | ``` 12 | 13 | Here's a look at the output. 14 | 15 | ```txt 16 | ========================================================= 17 | Invoice ID:I#1420, BillID:B#2485, BillAmount:$135,986.00 , BillBalance:$28,322,352.00 18 | 19 | Invoice ID:I#1420, BillID:B#2823, BillAmount:$592,769.00 , BillBalance:$8,382,270.00 20 | 21 | Invoice ID:I#1420, Customer ID:C#1420 22 | 23 | Invoice ID:I#1420, InvoiceStatus:Cancelled, InvoiceBalance:$28,458,338.00 , InvoiceDate:10/31/17, InvoiceDueDate:11/20/17 24 | ========================================================= 25 | ``` 26 | 27 | Review the invoice details, customer details, and bill details. Notice how the results show the relationships between invoice ID, customer ID, and bill ID entities. 28 | -------------------------------------------------------------------------------- /content/design-patterns/ex8streams/Step3.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Step 3 - Create the Lambda function" 3 | date: 2019-12-02T12:34:06-08:00 4 | weight: 3 5 | --- 6 | 7 | This AWS Lambda function will attach to the DynamoDB Stream of the `logfile` table to replicate item puts and deletes to the `logfile_replica` table. The Lambda function code has been provided for you in the file `ddbreplica_lambda.py`. You may review the contents of the script if you would like with `vim` or `less`. 8 | 9 | Zip the contents of the script. We will upload this to AWS Lambda when we create the function. 10 | ```bash 11 | zip ddbreplica_lambda.zip ddbreplica_lambda.py lab_config.py 12 | ``` 13 | Get the Amazon Resource Name (ARN) of the precreated IAM role so that you can associate it with the Lambda function. Run the following command to retrieve the ARN of the role that was created during the lab creation. 14 | ```bash 15 | cat ~/workshop/ddb-replication-role-arn.txt 16 | ``` 17 | The output looks like the following. 18 | ```txt 19 | arn:aws:iam:::role/XXXXX-DDBReplicationRole-XXXXXXXXXXX 20 | ``` 21 | Now, run the following command to create the Lambda function. 22 | ```bash 23 | aws lambda create-function \ 24 | --function-name ddbreplica_lambda --zip-file fileb://ddbreplica_lambda.zip \ 25 | --handler ddbreplica_lambda.lambda_handler --timeout 60 --runtime python3.10 \ 26 | --description "Sample lambda function for dynamodb streams" \ 27 | --role $(cat ~/workshop/ddb-replication-role-arn.txt) 28 | ``` 29 | -------------------------------------------------------------------------------- /content/design-patterns/setup/Step2.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Step 2 - Check the Python and AWS CLI installation" 3 | date: 2019-12-02T10:07:48-08:00 4 | weight: 20 5 | --- 6 | 7 | Run the following command to check Python on your EC2 instance: 8 | 9 | ```bash 10 | #Check the python version: 11 | python --version 12 | ``` 13 | 14 | Output: 15 | 16 | ```plain 17 | Python 3.10.12 18 | ``` 19 | **Note: The major and minor version of Python may vary from what you see above** 20 | 21 | Run the following command to check the AWS CLI on your EC2 instance: 22 | 23 | ```bash 24 | #Check the AWS CLI version. 25 | aws --version 26 | ``` 27 | 28 | Sample output: 29 | 30 | ```bash 31 | #Note that your linux kernel version may differ from the example. 32 | aws-cli/2.13.26 Python/3.11.6 Linux/6.2.0-1013-aws exe/x86_64.ubuntu.22 prompt/off 33 | ``` 34 | 35 | ::alert[_Make sure you have AWS CLI version 2.x or higher and python 3.10 or higher before proceeding. If you do not have these versions, you may have difficultly successfully completing the lab._] 36 | -------------------------------------------------------------------------------- /content/design-patterns/setup/Step3.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Step 3 - Check boto3 installation" 3 | date: 2019-12-02T10:07:52-08:00 4 | weight: 30 5 | --- 6 | 7 | 8 | Boto3 is the Amazon Web Services (AWS) Software Development Kit (SDK) for Python, which allows Python developers to build applications using AWS services. 9 | 10 | In the EC2 shell window, run ```python``` to make an interactive console with the first command and then copy and paste the following Python code: 11 | ```bash 12 | # Open python: 13 | python 14 | ``` 15 | ```py 16 | # Run this code: 17 | import boto3 18 | ddb = boto3.client('dynamodb') 19 | ddb.describe_limits() 20 | ``` 21 | 22 | 23 | You will see the following result: 24 | ```txt 25 | {u'TableMaxWriteCapacityUnits': 40000, u'TableMaxReadCapacityUnits': 40000, u'AccountMaxReadCapacityUnits': 80000, 'ResponseMetadata': {'RetryAttempts': 0, 'HTTPStatusCode': 200, 'RequestId': 'BFMGAS4P48I3DJTP5NU22QRDDJVV4KQNSO5AEMVJF66Q9ASUAAJG', 'HTTPHeaders': {'x-amzn-requestid': 'BFMGAS4P48I3DJTP5NU22QRDDJVV4KQNSO5AEMVJF66Q9ASUAAJG', 'content-length': '143', 'server': 'Server', 'connection': 'keep-alive', 'x-amz-crc32': '3062975651', 'date': 'Tue, 31 Dec 2020 00:00:00 GMT', 'content-type': 'application/x-amz-json-1.0'}}, u'AccountMaxWriteCapacityUnits': 80000} 26 | ``` 27 | To close Python console, type: 28 | ```py 29 | quit() 30 | ``` 31 | -------------------------------------------------------------------------------- /content/design-patterns/setup/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Start here: Getting Started" 3 | date: 2019-12-02T07:05:12-08:00 4 | weight: 1 5 | chapter: true 6 | description: "Setup the lab environment and connect to the lab instance on Amazon EC2." 7 | --- 8 | 9 | ## GETTING STARTED 10 | 11 | To set up this workshop, choose one of the following links, depending on whether you are: 12 | - :link[…running the workshop on your own (in your own account)]{href="/design-patterns/setup/user-account"}, or 13 | - :link[…attending an AWS-hosted event (using AWS-provided access codes)]{href="/design-patterns/setup/aws-ws-event"}, or 14 | 15 | Once you have completed with either setup, continue on to: 16 | - :link[Exercise 1: DynamoDB Capacity Units and Partitioning]{href="/design-patterns/ex1capacity"} 17 | -------------------------------------------------------------------------------- /content/dynamodb-opensearch-zetl/integrations/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "3. Integrations" 3 | menuTitle: "Integrations" 4 | date: 2024-02-23T00:00:00-00:00 5 | weight: 30 6 | --- 7 | In this section, you will configure integrations between services. You'll first set up ML and Pipeline connectors in OpenSearch Service followed by a zero ETL connector to move data written to DynamoDB to OpenSearch. Once these integrations are set up, you'll be able to write records to DynamoDB as your source of truth and then automatically have that data available to query in other services. -------------------------------------------------------------------------------- /content/dynamodb-opensearch-zetl/service-config/bedrock.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Enable Amazon Bedrock Models" 3 | menuTitle: "Enable Amazon Bedrock Models" 4 | date: 2024-02-23T00:00:00-00:00 5 | weight: 30 6 | --- 7 | Amazon Bedrock is a fully managed service that offers a choice of high-performing foundation models (FMs) from leading AI companies like AI21 Labs, Anthropic, Cohere, Meta, Mistral AI, Stability AI, and Amazon via a single API, along with a broad set of capabilities you need to build generative AI applications with security, privacy, and responsible AI. 8 | 9 | In this application, Bedrock will be used to make natural language product recommendation queries using OpenSearch Service as a vector database. 10 | 11 | Bedrock requires different FMs to be enabled before they are used. 12 | 13 | 1. Open [Amazon Bedrock Model Access](https://us-west-2.console.aws.amazon.com/bedrock/home?region=us-west-2#/modelaccess) 14 | 1. Click on "Manage model access" 15 | 16 | ![Manage model access](/static/images/ddb-os-zetl10.jpg) 17 | 1. Select "Titan Embeddings G1 - Text" and "Claude", then click `Request model access` 18 | 19 | 1. Wait until you are granted access to both models before continuing. The *Access status* should say *Access granted* before moving on. 20 | ::alert[_Do not continue unless the base models "Claude" and "Titan Embeddings G1 - Text" are granted to your account._] 21 | -------------------------------------------------------------------------------- /content/dynamodb-opensearch-zetl/service-config/ddb.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Load DynamoDB Data" 3 | menuTitle: "Load DynamoDB Data" 4 | date: 2024-02-23T00:00:00-00:00 5 | weight: 40 6 | --- 7 | Next, you'll load example product data into your DynamoDB Table. Pipelines will move this data into OpenSearch Service in later steps. 8 | 9 | ## Load and Review Data 10 | Return to the Cloud9 IDE. If you accidentally closed the IDE, you may search for the service in the AWS Management Console or use the Cloud9IDE URL found in the `Outputs` section of the CloudFormation stack. 11 | 12 | Load the sample data into your DynamoDB Table. 13 | ```bash 14 | cd ~/environment/OpenSearchPipeline 15 | aws dynamodb batch-write-item --request-items=file://product_en.json 16 | ``` 17 | ![CloudFormation Outputs](/static/images/ddb-os-zetl11.jpg) 18 | 19 | Next, navigate to the DynamoDB section of the AWS Management Console and click `Explore items` and then select the `ProductDetails` table. This is where the product information for this exercise originates from. Review the product names to get an idea for what kind of natural language searches you might want to provide later at the end of the lab. 20 | 21 | ![DynamoDB Console](/static/images/ddb-os-zetl19.jpg) -------------------------------------------------------------------------------- /content/dynamodb-opensearch-zetl/service-config/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "2. Service Configuration" 3 | menuTitle: "Service Configuration" 4 | date: 2024-02-23T00:00:00-00:00 5 | weight: 20 6 | --- 7 | In this section, you will load data into your DynamoDB table and configure your OpenSearch Service resources. 8 | 9 | Before beginning this section, make sure that :link[setup]{href="/dynamodb-opensearch-zetl/setup/"} has been completed for whichever way you're running this lab. Setup will deploy several resources. 10 | 11 | Dependencies from Cloud9 CloudFormation Template: 12 | - S3 Bucket: Used to store the initial export of DynamoDB data for the Zero-ETL Pipeline. 13 | - IAM Role: Used to grant permissions for pipeline integration and queries. 14 | - Cloud9 IDE: Console for executing commands, building integrations, and running sample queries. 15 | 16 | zETL CloudFormation Template Resources: 17 | - DynamoDB Table: DynamoDB table to store product descriptions. Has Point-in-time Recovery (PITR) and DynamoDB Streams enabled. 18 | - Amazon OpenSearch Service Domain: Single-node OpenSearch Service cluster to recieve data from DynamoDB and act as a vector database. 19 | 20 | ![Final Deployment Architecture](/static/images/ddb-os-zetl.png) 21 | -------------------------------------------------------------------------------- /content/event-driven-architecture/ex2pipeline/Step2.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Step 2: Check MapLambda trigger" 3 | date: 2019-12-02T10:35:42-08:00 4 | weight: 2 5 | --- 6 | 7 | ::alert[The `MapLambda` function is already connected for you, so let us quickly check if it works as expected!] 8 | 9 | ![Architecture-1](/static/images/event-driven-architecture/architecture/step2.png) 10 | 11 | Check that `MapLambda` has a correctly configured trigger to receive messages from the `StateTable` stream: 12 | 13 | 1. Navigate to the AWS Lambda service within the AWS Management Console. 14 | 2. Click on the `MapLambda` function to view its configuration. 15 | 3. Verify that the `MapLambda` function has a DynamoDB trigger and this trigger points to the `StateTable` (see figure below). 16 | 17 | ![Architecture-1](/static/images/event-driven-architecture/target/TargetMapLambda.png) 18 | 19 | ## How do you know it is working? 20 | 21 | Any row written to the `StateTable` should trigger the `MapLambda` function. Therefore, you should be able to see logs for the Lambda invocations. 22 | 23 | Alternatively, you can observe the outputs of the `MapLambda` function in the DynamoDB `ReduceTable`. To do that, navigate to the DynamoDB service in the AWS console, click `Items` on the left, and select `ReduceTable`. At this stage you should see multiple rows similar to the image below. 24 | 25 | ![Reduce table items](/static/images/event-driven-architecture/lab1/reduce-table-items.png) 26 | 27 | Continue on to: :link[Step 3]{href="/event-driven-architecture/ex2pipeline/step3"}. 28 | -------------------------------------------------------------------------------- /content/event-driven-architecture/setup/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Start here: Getting Started" 3 | date: 2019-12-02T07:05:12-08:00 4 | weight: 1 5 | chapter: true 6 | description: "Setup the lab environment." 7 | --- 8 | 9 | ## GETTING STARTED 10 | 11 | To set up this workshop, choose one of the following links, depending on whether you are: 12 | - :link[…running the workshop on your own (in your own account)]{href="/event-driven-architecture/setup/user-account/"}, or 13 | - :link[...attending an AWS-hosted event (using AWS-provided access codes)]{href="/event-driven-architecture/setup/aws-ws-event/"}, or 14 | 15 | Once you have completed with either setup, continue on to: 16 | - :link[Exercise 1: Overview]{href="/event-driven-architecture/ex1overview"} 17 | -------------------------------------------------------------------------------- /content/game-player-data/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "LGME: Modeling Game Player Data with Amazon DynamoDB" 3 | chapter: true 4 | description: "300 level: Hands-on exercise with Cloud9, Python, and data modelling best practices." 5 | weight: 50 6 | --- 7 | 8 | 9 | In this workshop, you will learn advanced data modeling patterns in [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html). When using DynamoDB, it is important to consider how you will access your data (your access patterns) before you model your data. You will go through an example multiplayer gaming application, learn about the access patterns in the gaming application, and see how to design a DynamoDB table to handle the access patterns by using secondary indexes and transactions. 10 | 11 | Read up more on how DynamoDB is used by existing customers in GameTech particularly 12 | https://aws.amazon.com/dynamodb/gaming/ 13 | 14 | Here's what this workshop includes: 15 | 16 | ::children{depth=1} 17 | 18 | 19 | ### Target audience 20 | 21 | This workshop is designed for developers, engineers, and database administrators who are involved in designing and maintaining DynamoDB applications. 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /content/game-player-data/past-games/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "6. View past games" 3 | menuTitle: "View past games" 4 | date: 2021-04-21T07:33:04-05:00 5 | weight: 60 6 | chapter: true 7 | description: "In this module, you handle the final access pattern — find all past games for a user. Users in the application might want to view games they’ve played to watch replays, or they might want to view their friend's games." 8 | --- 9 | 10 | In this module, you handle the final access pattern — find all past games for a user. Users in the application might want to view games they’ve played to watch replays, or they might want to view their friends’ games. 11 | 12 | ### Inverted index pattern 13 | 14 | You might recall that there is a many-to-many relationship between the `Game` entity and the associated `User` entities, and the relationship is represented by a `UserGameMapping` entity. 15 | 16 | Often, you want to query both sides of a relationship. With the primary key setup, you can find all the `User` entities in a `Game`. You can enable querying all `Game` entities for a `User` by using an *inverted index*. 17 | 18 | In DynamoDB, an inverted index is a global secondary index (GSI) that is the inverse of your primary key. The sort key becomes your partition key and vice versa. This pattern flips your table and allows you to query on the other side of your many-to-many relationships. 19 | 20 | In the following steps, you add an inverted index to the table and see how to use it to retrieve all `Game` entities for a specific `User`. 21 | -------------------------------------------------------------------------------- /content/game-player-data/plan-model/Step2.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Build your entity-relationship diagram" 3 | menuTitle: "ER diagram (ERD)" 4 | date: 2021-04-21T07:33:04-05:00 5 | weight: 22 6 | chapter: false 7 | description: "To get started, you configure your environment and download code that you use during the lab." 8 | --- 9 | 10 | The first step of any data modeling exercise is to build a diagram to show the entities in your application and how they relate to each other. 11 | 12 | In the application, you have the following entities: 13 | 14 | - `User` 15 | 16 | - `Game` 17 | 18 | - `UserGameMapping` 19 | 20 | A `User` entity represents a user in the application. A user can create multiple `Game` entities, and the creator of a game will determine which map is played and when the game starts. A `User` can create multiple `Game` entities, so there is a one-to-many relationship between `Users` and `Games`. 21 | 22 | Finally, a `Game` contains multiple `Users` and a `User` can play in multiple different `Games` over time. 23 | 24 | Thus, there is a many-to-many relationship between `Users` and `Games`. You can represent this relationship with the `UserGameMapping` entity. 25 | 26 | With these entities and relationships in mind, the entity-relationship diagram is shown below. 27 | 28 | ![ERD - Entity Relationship Diagram](/static/images/game-player-data/plan-model/erd.png) 29 | 30 | Next, we will take a look at the access patterns the data model needs to support. -------------------------------------------------------------------------------- /content/game-player-data/plan-model/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "2. Plan your data model" 3 | date: 2021-04-21T07:33:04-05:00 4 | weight: 20 5 | chapter: true 6 | description: "In this module, you learn about DynamoDB data modelling best practices and review application access patterns." 7 | --- 8 | 9 | **Data modeling** is the process of designing how an application stores data in a given database. With a NoSQL database such as DynamoDB, data modeling is different than modeling with a relational database. A relational database is built for flexibility and can be a great fit for analytical applications. In relational data modeling, you start with your entities first. When you have a [normalized](https://en.wikipedia.org/wiki/Database_normalization) relational model, you can satisfy any query pattern you need in your application. 10 | 11 | NoSQL databases are designed for speed and scale — not flexibility. Though the performance of your relational database may degrade as you scale up, horizontally scaling databases such as DynamoDB provides consistent performance at any scale. Some DynamoDB users have tables that are larger than 100 TB, and the read and write performance of their tables is the same as when the tables were smaller than 1 GB in size. 12 | 13 | Achieving best results with a NoSQL database such as DynamoDB requires a shift in thinking from the typical relational database. 14 | 15 | Let's take a look at some of the best practices when modeling data with DynamoDB. 16 | 17 | -------------------------------------------------------------------------------- /content/global-serverless-application/getting_started/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Getting Started 3 | weight: 10 4 | --- 5 | 6 | ## Overview 7 | 8 | Thanks for participanting in this workshop. 9 | The goal of this section is to help you access an AWS account. 10 | To get started, choose the option below based on the account you will use. 11 | 12 | Enjoy the lab! 13 | 14 | 15 | ## Getting Started 16 | 17 | To set up this workshop, choose one of the following paths, depending on whether you are: 18 | 19 | ::alert[If following the lab in your own AWS Account, you will create DynamoDB table(s) that will incur a cost that could approach many dollars a day. **Ensure you delete the DynamoDB tables using the DynamoDB console, and make sure you [delete the Cloud9 environment](https://docs.aws.amazon.com/cloud9/latest/user-guide/delete-environment.html) as soon as the lab is complete**.]{type="warning"} 20 | 21 | - :link[…running the workshop on your own (in your own AWS account)]{href="/global-serverless-application/getting_started/on-your-own"}, which guides you to launch a Cloud9 environment using CloudFormation 22 | 23 | - :link[…attending an AWS-hosted event (using AWS-provided access-code)]{href="/global-serverless-application/getting_started/aws-ws-event"} 24 | 25 | 26 | Once you have completed with either setup, continue on to: 27 | - :link[Module 1\: Deploy the backend resources]{href="/global-serverless-application/module_1"} 28 | -------------------------------------------------------------------------------- /content/global-serverless-application/summary/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : "Summary" 3 | weight : 60 4 | --- 5 | 6 | We hope you enjoyed this workshop and learning about how to build and deploy 7 | global applications! Please feel free to send change requests to [our GitHub issues](:param{key="github_issues_link"}). 8 | 9 | 10 | If you are running this workshop as part of an AWS sponsored event, your 11 | temporary account will be destroyed at the end of the event and all the 12 | resources will be deleted, so there is nothing else for you to do. 13 | 14 | If you are running this workshop in your own AWS account, you may 15 | delete the `DynamoDBID` CloudFormation Stack and the Chalice created components to avoid incurring 16 | any charges afterwards. The DynamoDB table was created in On Demand mode 17 | so there are no charges for provisioned capacity levels, only for actual usage. However there will be small charges for storage if the table is not cleaned up. 18 | 19 | -------------------------------------------------------------------------------- /content/hands-on-labs/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "LHOL: Hands-on Labs for Amazon DynamoDB" 3 | chapter: true 4 | description: "200 level: Hands-on exercises with Cloud9 using the AWS CLI and Console." 5 | weight: 10 6 | --- 7 | In this workshop, you will learn to create and work with [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html). 8 | 9 | Here's what this workshop includes: 10 | 11 | ::children{depth=1} 12 | 13 | ### Target audience 14 | 15 | This workshop is designed for developers, engineers, and database administrators who are involved in designing and maintaining DynamoDB applications. 16 | 17 | ### Requirements 18 | #### Basic knowledge of AWS services 19 | - Among other services this lab will guide you through the use of [AWS Cloud9](https://aws.amazon.com/cloud9/) and [AWS Lambda](https://aws.amazon.com/lambda/). 20 | 21 | #### Basic understanding of DynamoDB 22 | - If you're not familiar with DynamoDB or are not participating in this lab as part of an AWS event, consider reviewing the documentation on "[What is Amazon DynamoDB?](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html)" 23 | 24 | ### Recommended study before taking the lab 25 | 26 | If you're not part of an AWS event and you haven't recently reviewed DynamoDB design concepts, we suggest you watch this video on [Advanced Design Patterns for DynamoDB](:param{key="latest_rh_design_pattern_yt"}), which is about an hour in duration. 27 | -------------------------------------------------------------------------------- /content/hands-on-labs/setup/cleanup.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Cleanup" 3 | chapter: true 4 | description: "Cleanup Resources Created During Lab" 5 | weight: 1000 6 | --- 7 | 8 | If you used an account provided by Workshop Studio Event Delivery, you do not need to do any cleanup. The account terminates when the event is over. 9 | 10 | If you used your own account, please remove the following resources: 11 | 12 | * The four DynamoDB tables created in the Getting Started section of the lab: 13 | 14 | ```bash 15 | aws dynamodb delete-table \ 16 | --table-name ProductCatalog 17 | 18 | aws dynamodb delete-table \ 19 | --table-name Forum 20 | 21 | aws dynamodb delete-table \ 22 | --table-name Thread 23 | 24 | aws dynamodb delete-table \ 25 | --table-name Reply 26 | ``` 27 | 28 | * The Cloudformation template that was launched during the getting started section. Navigate to the Cloudformation console, select the `amazon-dynamodb-labs` stack and click `Delete`. 29 | 30 | ![Cleanup Delete dynamodb-labs CFN Stack](/static/images/hands-on-labs/dynamodb-labs-cfn-delete-stack.png) 31 | 32 | This should wrap up the cleanup process. 33 | -------------------------------------------------------------------------------- /content/hands-on-labs/setup/cloud9.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Launch Cloud9 IDE" 3 | date: 2021-04-21T07:33:04-05:00 4 | weight: 13 5 | --- 6 | 7 | Let's begin by navigating to [AWS cloud9 management Console](https://console.aws.amazon.com/cloud9/home) and choose *open IDE* on the *DynamoDBLabsIDE* instance to launch AWS Cloud9 environment. You can close the Welcome screen and adjust your terminal to increase screen area, or close all the windows and navigate to *Window* -> *New Terminal* to open a new terminal window. 8 | 9 | Then run the command `aws sts get-caller-identity` just to verify that your AWS credentials have been properly configured. 10 | 11 | ![Cloud9 Setup](/static/images/hands-on-labs/setup/cloud9_setup.png) 12 | -------------------------------------------------------------------------------- /content/hands-on-labs/setup/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "1. Getting Started" 3 | date: 2021-04-21T07:33:04-05:00 4 | weight: 10 5 | chapter: true 6 | --- 7 | 8 | 9 | In this chapter, we'll cover the prerequisites needed to get started with [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html). You'll create DynamoDB tables and use a AWS Cloud9 envrironment to query these tables. 10 | 11 | The deployment architecture that you will be building in this lab will look like the below. 12 | 13 | ![Final Deployment Architecture](/static/images/hands-on-labs/setup/dynamodb_lab_architecture.png) 14 | -------------------------------------------------------------------------------- /content/hands-on-labs/setup/load-sample-data.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Load Sample Data" 3 | date: 2020-04-21T07:38:58-05:00 4 | weight: 15 5 | --- 6 | 7 | Download and unzip the sample data: 8 | 9 | ```bash 10 | curl -O https://amazon-dynamodb-labs.com/static/hands-on-labs/sampledata.zip 11 | 12 | unzip sampledata.zip 13 | ``` 14 | 15 | Load the sample data using the `batch-write-item` CLI: 16 | 17 | ```bash 18 | aws dynamodb batch-write-item --request-items file://ProductCatalog.json 19 | 20 | aws dynamodb batch-write-item --request-items file://Forum.json 21 | 22 | aws dynamodb batch-write-item --request-items file://Thread.json 23 | 24 | aws dynamodb batch-write-item --request-items file://Reply.json 25 | ``` 26 | 27 | After each data load you should get this message saying that there were no Unprocessed Items: 28 | 29 | ```json 30 | { 31 | "UnprocessedItems": {} 32 | } 33 | ``` 34 | 35 | #### Sample output 36 | ![Cloud9 Setup](/static/images/hands-on-labs/setup/load_data.png) 37 | -------------------------------------------------------------------------------- /content/hands-on-labs/setup/prerequisites.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Prerequisites" 3 | date: 2020-08-06T07:38:58-05:00 4 | weight: 11 5 | --- 6 | 7 | To run this lab, you'll need an AWS account, and a user identity with access to the following services: 8 | 9 | * Amazon DynamoDB 10 | * AWS Cloud9 Environment 11 | 12 | You can use your own account, or an account provided through Workshop Studio Event Delivery as part of an AWS organized workshop. Using an account provided by Workshop Studio is the easier path, as you will have full access to all AWS services, and the account will terminate automatically when the event is over. 13 | 14 | ### Account setup 15 | 16 | #### Using an account provided to you by your lab instructor 17 | 18 | If you are running this workshop using a link provided to you by your AWS instructor, please use that link and enter the access-code provided to you as part of the workshop. In the lab AWS account, the Cloud9 instance should already be provisioned. Please open the "AWS Cloud9" section of the AWS Management Console in the correct region and look for a lab instance called **DynamoDBC9**. 19 | 20 | #### Using your own AWS account 21 | 22 | If you are using your own AWS account, be sure you have access to create and manage resources in Amazon DynamoDB and AWS Cloud9 environment 23 | 24 | *After completing the workshop, remember to complete the [cleanup](/hands-on-labs/cleanup.html) section to remove any unnecessary AWS resources.* 25 | -------------------------------------------------------------------------------- /content/rdbms-migration/migration-chapter00.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Exercise Overview" 3 | menuTitle: "Exercise Overview" 4 | date: 2021-04-25T07:33:04-05:00 5 | weight: 10 6 | --- 7 | In this module, you will create an environment to host the MySQL database on Amazon EC2. This instance will be used to host source database and simulate on-premise side of migration architecture. 8 | All the resources to configure source infrastructure are deployed via [Amazon CloudFormation](https://aws.amazon.com/cloudformation/) template. 9 | There are two CloudFormation templates used in this exercise which will deploy following resources. 10 | 11 | CloudFormation MySQL Template Resources: 12 | - OnPrem VPC: Source VPC will represent an on-premise source environment in the N. Virginia region. This VPC will host source MySQL database on Amazon EC2 13 | - Amazon EC2 MySQL Database: Amazon EC2 Amazon Linux 2 AMI with MySQL installed and running 14 | - Load IMDb dataset: The template will create IMDb database on MySQL and load IMDb public dataset files into database. You can learn more about IMDb dataset inside [Explore Source Model](/hands-on-labs/rdbms-migration/migration-chapter03) 15 | 16 | 17 | 18 | CloudFormation DMS Instance Resources: 19 | - DMS VPC: Migration VPC on in the N. Virginia region. This VPC will host DMS replication instance. 20 | - Replication Instance: DMS Replication instance that will facilitate database migration from source MySQL server on EC2 to Amazon DynamoDB 21 | 22 | ![Final Deployment Architecture](/static/images/migration-environment.png) 23 | -------------------------------------------------------------------------------- /content/relational-migration/application refactoring/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : "Application Refactoring" 3 | weight : 40 4 | --- 5 | 6 | ## Updating the Client Application for DynamoDB 7 | After you have chosen your DynamoDB table schema, and migrated any historical data over, 8 | you can consider what code changes are required so a new version of your app can call the DynamoDB 9 | read and write APIs. 10 | 11 | The web app we have been using includes forms and buttons to perform standard CRUD (Create, Read, Update, Delete) operations. 12 | 13 | The web app makes HTTP calls to the published API using standard GET and POST methods against certain API paths. 14 | 15 | 1. In Cloud9, open the left nav and locate the file **app.py** 16 | 2. Double click to open and review this file 17 | 18 | In the bottom half of the file you will see several small handler functions that 19 | pass core read and write requests on to the **db** object's functions. 20 | 21 | 22 | Notice the file contains a conditional import for the **db** object. 23 | 24 | ```python 25 | if migration_stage == 'relational': 26 | from chalicelib import mysql_calls as db 27 | else: 28 | from chalicelib import dynamodb_calls as db 29 | ``` 30 | 31 | -------------------------------------------------------------------------------- /content/relational-migration/application refactoring/index2.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : "DynamoDB-ready middle tier" 3 | weight : 41 4 | --- 5 | 6 | ## Deploy a new DynamoDB-ready API 7 | 8 | If you recall, we had run the command ```chalice deploy --stage relational``` previously 9 | to create the MySQL-ready middle tier. 10 | 11 | We can repeat this to create a new API Gateway and Lambda stack, this time using the DynamoDB stage. 12 | 13 | 1. Within the Cloud9 terminal window, run: 14 | ```bash 15 | chalice deploy --stage dynamodb 16 | ``` 17 | 2. When this completes, find the new Rest API URL and copy it. 18 | 3. You can paste this into a new browser tab to test it. You should see a status message indicating 19 | the DynamoDB version of the API is working. 20 | 21 | We now need a separate browser to test out the full web app experience, since 22 | the original browser has a cookie set to the relational Rest API. 23 | 24 | 4. If you have multiple browsers on your laptop, such as Edge, Firefox, or Safari, 25 | open a different browser and navigate to the web app: 26 | 27 | [https://amazon-dynamodb-labs.com/static/relational-migration/web/index.html](https://amazon-dynamodb-labs.com/static/relational-migration/web/index.html). 28 | 29 | (You can also open the same browser in Incognito Mode for this step.) 30 | 31 | 5. Click the Target API button and paste in the new Rest API URL. 32 | 6. Notice the title of the page has updated to **DynamoDB App** in a blue color. If it isn't blue, you can refresh the page and see the color change. 33 | -------------------------------------------------------------------------------- /content/relational-migration/data migration/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : "Data Migration" 3 | weight : 30 4 | --- 5 | 6 | ## Transform, Extract, Convert, Stage Import 7 | 8 | Recall our strategy for migrating table data into DynamoDB via S3 was 9 | summarized in the :link[Workshop Introduction]{href="../introduction/index5" target=_blank}. 10 | 11 | For each table or view that we want to migrate, we need a routine that will ```SELECT *``` from it, 12 | and convert the result dataset into DynamoDB JSON before writing it to an S3 bucket. 13 | 14 | ![Migration Flow](/static/images/relational-migration/migrate_flow.png) 15 | 16 | For migrations of very large tables we may choose to use purpose-built data tools like 17 | AWS Glue, Amazon EMR, or Amazon DMS. These tools can help you define and coordinate multiple 18 | parallel jobs that perform the work to extract, transform, and stage data into S3. 19 | 20 | In this workshop we can use a Python script to demonstrate this ETL process. 21 | -------------------------------------------------------------------------------- /content/relational-migration/data migration/index2.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : "ETL Scripts" 3 | weight : 31 4 | --- 5 | 6 | 7 | ## mysql_s3.py 8 | 9 | A script called mysql_s3.py is provided that performs all the work to convert and load a query result 10 | set into S3. We can run this script in preview mode by using the "stdout" parameter. 11 | 12 | 1. Run: 13 | ```bash 14 | python3 mysql_s3.py Customers stdout 15 | ``` 16 | You should see results in DynamoDB JSON format: 17 | 18 | ![mysql_s3.py output](/static/images/relational-migration/mysql_s3_output.png) 19 | 20 | 2. Next, run it for our view: 21 | ```bash 22 | python3 mysql_s3.py vCustOrders stdout 23 | ``` 24 | You should see similar output from the view results. 25 | 26 | The script can write these to S3 for us. We just need to omit the "stdout" command line parameter. 27 | 28 | 3. Now, run the script without preview mode: 29 | ```bash 30 | python3 mysql_s3.py Customers 31 | ``` 32 | You should see confirmation that objects have been written to S3: 33 | 34 | ![mysql_s3.py output](/static/images/relational-migration/mysql_s3_write_output.png) 35 | 36 | 37 | -------------------------------------------------------------------------------- /content/relational-migration/data migration/index6.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : "Custom VIEWs" 3 | weight : 35 4 | --- 5 | 6 | ## Challenge: Create New Views 7 | 8 | The SQL editor window is provided so that you have an easy way to run queries and 9 | experiment with data transformation techniques. 10 | 11 | Using the sample queries as a guide, see how many techniques you can combine in a single query. 12 | Look for opportunities to align attributes across the table so that they can be queried by a GSI. 13 | Consider using date fields in column two, so that they become Sort Key values, and be queryable with 14 | DynamoDB range queries. 15 | 16 | 1. When you have a SQL statement you like, click the CREATE VIEW button. 17 | 2. In the prompt, enter a name for your new view. This will add a CREATE VIEW statement to the top of you query. 18 | 3. Click RUN SQL to create the new view. 19 | 4. Refresh the page, and your view should appear as a button next to the vCustOrders button. 20 | 21 | -------------------------------------------------------------------------------- /content/relational-migration/introduction/img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/content/relational-migration/introduction/img.png -------------------------------------------------------------------------------- /content/relational-migration/introduction/index2.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : "Migration Phases" 3 | weight : 11 4 | --- 5 | 6 | ## Three phases 7 | You can tackle a migration project by breaking it into three distinct phases. 8 | 9 | 1. **Schema Refactoring**: Defining new tables and indexes to replace existing ones 10 | 2. **Data Migration**: Transforming and moving historical data into DynamoDB tables, with minimal downtime 11 | 3. **App Refactoring**: Replacing SQL calls with DynamoDB read and write calls 12 | 13 | The workshop will cover each challenge in turn. 14 | 15 | ![Migration Phases](/static/images/relational-migration/phases.png) 16 | -------------------------------------------------------------------------------- /content/relational-migration/scenario/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : "Business Scenario" 3 | weight : 20 4 | --- 5 | ## Business Scenario - Vehicle Sales 6 | 7 | Imagine we are hired as consultants to support the sales order application 8 | for a company that sells a range of vehicles, including cars, motorcycles, 9 | and helicopters. 10 | The vehicle customers are various taxi and transport companies, 11 | who contact one of our sales representatives to place new orders. 12 | 13 | 14 | ## Database Schema 15 | The company tracks five types of records in their MySQL Database. 16 | Each entity is stored in a separate table: 17 | 18 | * Customers 19 | * Orders 20 | * OrderLines 21 | * Products 22 | * Reps 23 | 24 | Foreign key constraints between these tables define **one-to-many** relationships. 25 | For example: 26 | * Each order is tied to one customer, while one customer might have 27 | multiple orders. 28 | * Each order line is tied to one order (the order header), while one order might have multiple order line items. 29 | 30 | The Entity Relationship Diagram (ERD) for our database schema is as follows: 31 | 32 | ![Relational Application Schema](/static/images/relational-migration/relational_schema.png) 33 | 34 | 35 | -------------------------------------------------------------------------------- /content/relational-migration/scenario/index2.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : "Project Requirements" 3 | weight : 21 4 | --- 5 | 6 | ## Plan a migration to DynamoDB 7 | The business has evaluated DynamoDB and likes the features and performance it offers. 8 | Our mission is to manage a project to assess, plan, and build a migration of the existing 9 | Sales Orders application from the relational database onto DynamoDB. 10 | 11 | ### Explore approaches 12 | 13 | We have been given time to explore different potential approaches to the migration. 14 | 15 | A goal of the project is to learn how to migrate tables using DynamoDB's Single Table pattern, 16 | while planning an alternate, traditional 1-for-1 table migration in case it seems to be a better approach. 17 | 18 | ### Leverage skills of IT staff 19 | 20 | We have been asked to write any data transformation logic in SQL, so the existing IT Database staff 21 | will feel comfortable performing future migrations. 22 | 23 | The existing application code is modular, so that operations like 24 | "list products", "get customer" and "delete order line" are defined and encapsulated 25 | in data access functions within the Python code base. 26 | This should make it somewhat easy to find these read and write functions and then 27 | swap out the SQL operations for DynamoDB API calls. If we do it right, the bulk of the application 28 | code will not need to be changed. 29 | 30 | But, we can't begin to make these changes until we have 31 | all agreed on what the new DynamoDB table schema and data formats will look like. 32 | 33 | 34 | -------------------------------------------------------------------------------- /content/relational-migration/schema refactoring/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : "Schema Refactoring" 3 | weight : 22 4 | --- 5 | 6 | ## Discovering Table columns, data types, and indexes 7 | 8 | As consultants, we need to do some discovery and scoping to define what our starting parameters are 9 | for the migration. In particular, we want to find out all we can about existing tables including their: 10 | * Columns and data types 11 | * Primary Key column(s) 12 | * Indexes 13 | * Constraints 14 | 15 | In MySQL, a system schema called INFORMATION_SCHEMA holds the answers to these questions. We could query 16 | this schema and learn what currently exists. We could also use the standard MySQL Workbench tool to do the same. 17 | However, what would be even better would be to get suggestions for how to convert the table metadata 18 | to DynamoDB format. The Chalice API and Web App are designed to help us with this. 19 | 20 | -------------------------------------------------------------------------------- /content/relational-migration/schema refactoring/index3.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : "Table and Index Survey" 3 | weight : 25 4 | --- 5 | 6 | ## Consider what indexes exist on the table 7 | 8 | Within the Web App, notice the two Access Pattern tabs near the top of the page. 9 | Click on the second tab called **Querying** 10 | 11 | 12 | ![Tab for Querying](/static/images/relational-migration/querying_tab.png) 13 | 14 | 15 | 16 | You will now see a form listing the Primary Key index, along with other secondary indexes. 17 | 18 | ![Customers Table With Indexes Form](/static/images/relational-migration/customers_indexes_ddb_form.png) 19 | 20 | 21 | ## Convert Table with Indexes to DynamoDB Table Definition 22 | Now, click on the Generate button below the form. You should see a new version of the DynamoDB 23 | table definition, this time with one Global Secondary Index (GSI) for each relational table index. 24 | 25 | The GSI is a separate data structure that stores your table's data organized by a different primary key, 26 | and can be used to perform efficient queries against a large table. It is similar to a relational database index 27 | 28 | ![Customers Table With Indexes](/static/images/relational-migration/customers_indexes_ddb.png) 29 | 30 | Notice that a few more attribute (column) names are defined in the AttributeDefinitions section. 31 | This is because any attributes that are involved in a GSI 32 | definition need to be declared in advance. 33 | 34 | 35 | -------------------------------------------------------------------------------- /content/relational-migration/setup/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : "Setup" 3 | weight : 15 4 | --- 5 | 6 | ### Starting Environment 7 | Let's get the workshop environment setup, so we can begin planning the migration. 8 | 9 | Here are the resources that have already been deployed for you in your AWS account. 10 | ![Starting Resources](/static/images/relational-migration/starting.png) 11 | 12 | This environment may look similar to what you have already in your organization! 13 | You likely have a developer desktop or laptop, 14 | the ability to find and clone the public Github code repository, 15 | and a running MySQL database instance. 16 | You can create a new Amazon S3 bucket quickly, which can be used as a staging area for data to be migrated. 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /content/relational-migration/setup/index3.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : "Relational Tables" 3 | weight : 18 4 | --- 5 | 6 | 7 | ### Create Tables, Views, and Load Data 8 | 9 | For your convenience, a single script can setup and populate the relational database schema. 10 | 11 | 1. From the Cloud9 terminal, run 12 | 13 | ```bash 14 | ./setup_tables.sh 15 | ``` 16 | 17 | This will create a set of tables, a SQL view, and fill the tables with sample records. 18 | You can re-run this at any time to reset the starting relational environment. 19 | 20 | ### Congratulations! 21 | Your starting environment has been setup and you now have the following components. 22 | 23 | ![Relational Application Stack](/static/images/relational-migration/relational-stack.png) 24 | 25 | 26 | -------------------------------------------------------------------------------- /content/relational-migration/summary/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title : "Summary" 3 | weight : 40 4 | --- 5 | 6 | Congratulations! You have completed the Relational Migration to DynamoDB workshop. 7 | You learned how to approach a migration project, what features, tools and script are available to help you, 8 | and gained hands-on experience with the components of an end-to-end custom migration job. 9 | 10 | If you are running this event in your own account, be sure to terminate the Cloudformation stack 11 | that launched the workshop, to avoid any unexpected charges. 12 | 13 | You used scripts and tools from the /workshops/relational-migration folder in the 14 | [github.com/aws-samples/aws-dynamodb-examples](https://github.com/aws-samples/aws-dynamodb-examples/) repository. -------------------------------------------------------------------------------- /content/scenarios/Retail Cart/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Retail Cart Scenario" 3 | chapter: false 4 | weight: 1 5 | --- 6 | 7 | ## Retail Cart Challenge 8 | 9 | An online retail store has asked you to design their data storage layer and NoSQL table(s). The website serves customers and the products they view, save, and purchase. The website traffic is currently low, but they want to be able to serve millions of concurrent customers. 10 | 11 | - Customers interact with products that can be `ACTIVE`, `SAVED`, or `PURCHASED`. Once they are `PURCHASED` they will be assigned an *OrderId*. 12 | - Products have the following attributes: *AccountID*, *Status* (`ACTIVE`, `SAVED`, or `PURCHASED`), *CreateTimestamp*, and *ItemSKU* (Total item size is <= 1 KB). 13 | - When a customer opens the retail store's application, they view the active products in their cart, which are organized by most recently added. 14 | - Users can view products that they have saved for later, which are organized by most recently saved. 15 | - Users can view products that they have purchased, which are organized by most recently purchased. 16 | - Product teams have the ability to regularly query across all customers to identify the people who have a specific product in their account that is either `ACTIVE`, `SAVED`, or `PURCHASED`. 17 | - The Business Intelligence team needs to run a number of complex ad hoc queries against the dataset to create weekly and monthly reports. 18 | 19 | Build a NoSQL Data Model to fulfill the OLTP component of the workload. How you would fulfill the BI team’s requirement? 20 | -------------------------------------------------------------------------------- /content/scenarios/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "LDC: Design Challenges" 3 | chapter: true 4 | weight: 70 5 | description: "400 level: A collection of data model design challenge labs to help you understand the decisions required when building efficient data models." 6 | --- 7 | ## Design Challenges 8 | 9 | ![Open the NoSQL Workbench Logo](/static/images/nosql_wb.png) 10 | 11 | This is a collection of data model design challenge scenarios to help you understand the decisions you make when building efficient data models. While not required for this section, the **[NoSQL Workbench for Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/workbench.html)**, is an excellent tool to help build, visualize, and manipulate data models for DynamoDB. 12 | -------------------------------------------------------------------------------- /contentspec.yaml: -------------------------------------------------------------------------------- 1 | # This is a stub to allow preview_build to run. Changes to this file do not make it to Workshop Studio 2 | version: 2.0 3 | 4 | defaultLocaleCode: en-US 5 | localeCodes: 6 | - en-US 7 | params: 8 | latest_rh_design_pattern_yt: "https://www.youtube.com/watch?v=xfxBhvGpoa0" 9 | design_patterns_s3_lab_yaml : "https://s3.amazonaws.com/amazon-dynamodb-labs.com/assets/C9.yaml" 10 | lhol_migration_setup_yaml : "https://s3.amazonaws.com/amazon-dynamodb-labs.com/assets/migration-env-setup.yaml" 11 | lhol_migration_dms_setup_yaml : "https://s3.amazonaws.com/amazon-dynamodb-labs.com/assets/migration-dms-setup.yaml" 12 | lhol_ddb_os_zetl_setup_yaml : "https://s3.amazonaws.com/amazon-dynamodb-labs.com/assets/dynamodb-opensearch-setup.yaml" 13 | event_driven_architecture_lab_yaml : "https://s3.amazonaws.com/amazon-dynamodb-labs.com/assets/event-driven-cfn.yaml" 14 | github_contributing_guide : "https://github.com/aws-samples/amazon-dynamodb-labs/blob/master/CONTRIBUTING.md" 15 | github_issues_link : "https://github.com/aws-samples/amazon-dynamodb-labs/issues" 16 | lsql_git_commit : "47a43bedf75bc0859e9141ad1bdd1f330f0933f1" 17 | -------------------------------------------------------------------------------- /design-patterns/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/design-patterns/.gitignore -------------------------------------------------------------------------------- /design-patterns/cloudformation/.gitignore: -------------------------------------------------------------------------------- 1 | taskcat_outputs/ 2 | -------------------------------------------------------------------------------- /design-patterns/ddbreplica_lambda.py: -------------------------------------------------------------------------------- 1 | import json 2 | import time 3 | import urllib 4 | import boto3 5 | import traceback 6 | from lab_config import boto_args 7 | from boto3.dynamodb.types import TypeDeserializer 8 | 9 | class StreamTypeDeserializer(TypeDeserializer): 10 | def _deserialize_n(self, value): 11 | return int(value) 12 | def _deserialize_b(self, value): 13 | return value # Already in Base64 14 | 15 | def get_table_name_from_arn(arn): 16 | return arn.split(':')[5].split('/')[1] 17 | 18 | def _lambda_handler(event, context): 19 | dynamodb = boto3.resource(**boto_args) 20 | dynamodb_table = dynamodb.Table('logfile_replica') 21 | 22 | ddb_deserializer = StreamTypeDeserializer() 23 | 24 | records = event['Records'] 25 | 26 | for record in records: 27 | ddb = record['dynamodb'] 28 | 29 | event_name = record['eventName'].upper() # INSERT, MODIFY, REMOVE 30 | 31 | if (event_name == 'INSERT') or (event_name == 'MODIFY'): 32 | if 'NewImage' not in ddb: 33 | print ('Cannot process stream if it does not contain NewImage') 34 | continue 35 | doc_fields = ddb_deserializer.deserialize({'M': ddb['NewImage']}) 36 | item = dynamodb_table.put_item(Item=doc_fields) 37 | 38 | def lambda_handler(event, context): 39 | try: 40 | return _lambda_handler(event, context) 41 | except Exception: 42 | print (traceback.format_exc()) 43 | -------------------------------------------------------------------------------- /design-patterns/gsi_city_dept.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "Create": { 4 | "IndexName": "GSI_3", 5 | "KeySchema": [ 6 | { 7 | "AttributeName": "GSI_3_PK", 8 | "KeyType": "HASH" 9 | }, 10 | { 11 | "AttributeName": "GSI_3_SK", 12 | "KeyType": "RANGE" 13 | } 14 | ], 15 | "Projection": { 16 | "ProjectionType": "ALL" 17 | }, 18 | "ProvisionedThroughput": { 19 | "ReadCapacityUnits": 10, 20 | "WriteCapacityUnits": 10 21 | } 22 | } 23 | } 24 | ] 25 | -------------------------------------------------------------------------------- /design-patterns/gsi_manager.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "Create": { 4 | "IndexName": "GSI_2", 5 | "KeySchema": [ 6 | { 7 | "AttributeName": "GSI_2_PK", 8 | "KeyType": "HASH" 9 | }, 10 | { 11 | "AttributeName": "GSI_2_SK", 12 | "KeyType": "RANGE" 13 | } 14 | ], 15 | "Projection": { 16 | "ProjectionType": "ALL" 17 | }, 18 | "ProvisionedThroughput": { 19 | "ReadCapacityUnits": 10, 20 | "WriteCapacityUnits": 10 21 | } 22 | } 23 | } 24 | ] 25 | -------------------------------------------------------------------------------- /design-patterns/iam-role-policy.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version": "2012-10-17", 3 | "Statement": [ 4 | { 5 | "Action": [ 6 | "dynamodb:DescribeStream", 7 | "dynamodb:GetRecords", 8 | "dynamodb:GetShardIterator", 9 | "dynamodb:ListStreams" 10 | ], 11 | "Resource": [ 12 | "*" 13 | ], 14 | "Effect": "Allow" 15 | }, 16 | { 17 | "Action": [ 18 | "dynamodb:DeleteItem", 19 | "dynamodb:PutItem" 20 | ], 21 | "Resource": [ 22 | "*" 23 | ], 24 | "Effect": "Allow" 25 | }, 26 | { 27 | "Action": [ 28 | "logs:CreateLogGroup", 29 | "logs:CreateLogStream", 30 | "logs:PutLogEvents" 31 | ], 32 | "Resource": [ 33 | "*" 34 | ], 35 | "Effect": "Allow" 36 | } 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /design-patterns/iam-trust-relationship.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version": "2012-10-17", 3 | "Statement": [ 4 | { 5 | "Effect": "Allow", 6 | "Principal": { 7 | "Service": "lambda.amazonaws.com" 8 | }, 9 | "Action": "sts:AssumeRole" 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /design-patterns/lab_config.py: -------------------------------------------------------------------------------- 1 | boto_args = {'service_name': 'dynamodb'} 2 | #boto_args['endpoint_url'] = 'http://localhost:8000' 3 | -------------------------------------------------------------------------------- /design-patterns/query_employees.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | import boto3 3 | from boto3.dynamodb.conditions import Key, Attr 4 | import time 5 | import sys 6 | from lab_config import boto_args 7 | 8 | def query_gsi(tableName,attribute,value,): 9 | dynamodb = boto3.resource(**boto_args) 10 | table = dynamodb.Table(tableName) 11 | 12 | if attribute == 'name': 13 | ke = Key('GSI_1_PK').eq('root') & Key('GSI_1_SK').eq(value) 14 | else: 15 | ke = Key('GSI_1_PK').eq(attribute + "#" + value) 16 | 17 | response = table.query( 18 | IndexName='GSI_1', 19 | KeyConditionExpression=ke 20 | ) 21 | 22 | print('List of employees with %s in the attribute %s:' % (value,attribute)) 23 | for i in response['Items']: 24 | print('\tEmployee name: %s - hire date: %s' % (i['name'],i['hire_date'])) 25 | 26 | return response['Count'] 27 | 28 | if __name__ == "__main__": 29 | args = sys.argv[1:] 30 | tableName = args[0] 31 | attribute = args[1] 32 | value = args[2] 33 | 34 | begin_time = time.time() 35 | count = query_gsi(tableName,attribute,value) 36 | print ('Total of employees: %s. Execution time: %s seconds' % (count, time.time() - begin_time)) 37 | # 38 | -------------------------------------------------------------------------------- /design-patterns/requirements.txt: -------------------------------------------------------------------------------- 1 | boto3==1.14.62 2 | awscli==1.18.139 3 | -------------------------------------------------------------------------------- /design-patterns/scan_for_managers.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | import boto3 3 | import time 4 | import sys 5 | from lab_config import boto_args 6 | 7 | def scan_table(tableName,pageSize): 8 | dynamodb = boto3.resource(**boto_args) 9 | table = dynamodb.Table(tableName) 10 | 11 | page = 1 12 | count = 0 13 | managers_count = 0 14 | 15 | fe = "is_manager = :f" 16 | eav = {":f": "1"} 17 | response = table.scan( 18 | FilterExpression=fe, 19 | ExpressionAttributeValues=eav, 20 | Limit=pageSize 21 | ) 22 | count = count + response['ScannedCount'] 23 | managers_count = managers_count + response['Count'] 24 | 25 | while 'LastEvaluatedKey' in response: 26 | page += 1 27 | response = table.scan( 28 | FilterExpression=fe, 29 | ExpressionAttributeValues=eav, 30 | Limit=pageSize, 31 | ExclusiveStartKey=response['LastEvaluatedKey']) 32 | count = count + response['ScannedCount'] 33 | managers_count = managers_count + response['Count'] 34 | 35 | return count, managers_count 36 | 37 | if __name__ == "__main__": 38 | args = sys.argv[1:] 39 | tableName = args[0] 40 | pagesize = args[1] 41 | 42 | begin_time = time.time() 43 | count, managers_count = scan_table(tableName,int(pagesize)) 44 | 45 | print ('Managers count: %s. # of records scanned: %s. Execution time: %s seconds' % (managers_count, count, time.time() - begin_time)) 46 | -------------------------------------------------------------------------------- /design-patterns/scan_for_managers_gsi.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | import boto3 3 | import time 4 | import sys 5 | from lab_config import boto_args 6 | 7 | def scan_table(tableName,pageSize): 8 | dynamodb = boto3.resource(**boto_args) 9 | table = dynamodb.Table(tableName) 10 | 11 | page = 1 12 | count = 0 13 | managers_count = 0 14 | 15 | response = table.scan( 16 | Limit=pageSize, 17 | IndexName='GSI_2' 18 | ) 19 | 20 | count = count + response['ScannedCount'] 21 | managers_count = managers_count + response['Count'] 22 | 23 | while 'LastEvaluatedKey' in response: 24 | page += 1 25 | response = table.scan( 26 | Limit=pageSize, 27 | IndexName='GSI_2', 28 | ExclusiveStartKey=response['LastEvaluatedKey']) 29 | count = count + response['ScannedCount'] 30 | managers_count = managers_count + response['Count'] 31 | 32 | return count, managers_count 33 | 34 | if __name__ == "__main__": 35 | args = sys.argv[1:] 36 | tableName = args[0] 37 | pagesize = args[1] 38 | 39 | begin_time = time.time() 40 | count, managers_count = scan_table(tableName,int(pagesize)) 41 | 42 | print ('Number of managers: %s. # of records scanned: %s. Execution time: %s seconds' % (managers_count, count, time.time() - begin_time)) 43 | -------------------------------------------------------------------------------- /design-patterns/scan_logfile_simple.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | import boto3 3 | import time 4 | import sys 5 | from lab_config import boto_args 6 | 7 | def scan_table(tableName): 8 | dynamodb = boto3.resource(**boto_args) 9 | table = dynamodb.Table(tableName) 10 | 11 | totalbytessent = 0 12 | pageSize = 10000 13 | 14 | fe = "responsecode <> :f" 15 | eav = {":f": 200} 16 | 17 | response = table.scan( 18 | FilterExpression=fe, 19 | ExpressionAttributeValues=eav, 20 | Limit=pageSize, 21 | ProjectionExpression='bytessent') 22 | 23 | for i in response['Items']: 24 | totalbytessent += i['bytessent'] 25 | 26 | while 'LastEvaluatedKey' in response: 27 | response = table.scan( 28 | FilterExpression=fe, 29 | ExpressionAttributeValues=eav, 30 | Limit=pageSize, 31 | ExclusiveStartKey=response['LastEvaluatedKey'], 32 | ProjectionExpression='bytessent') 33 | for i in response['Items']: 34 | totalbytessent += i['bytessent'] 35 | return totalbytessent 36 | 37 | if __name__ == "__main__": 38 | args = sys.argv[1:] 39 | tablename = args[0] 40 | 41 | print('Scanning 1 million rows of table %s to get the total of bytes sent' %(tablename)) 42 | 43 | begin_time = time.time() 44 | 45 | totalbytessent = scan_table(tablename) 46 | 47 | print ('Total bytessent %s in %s seconds' % (totalbytessent, time.time() - begin_time)) 48 | -------------------------------------------------------------------------------- /game-player-data/scripts/add_inverted_index.py: -------------------------------------------------------------------------------- 1 | import boto3 2 | 3 | dynamodb = boto3.client('dynamodb') 4 | 5 | try: 6 | dynamodb.update_table( 7 | TableName='battle-royale', 8 | AttributeDefinitions=[ 9 | { 10 | "AttributeName": "PK", 11 | "AttributeType": "S" 12 | }, 13 | { 14 | "AttributeName": "SK", 15 | "AttributeType": "S" 16 | } 17 | ], 18 | GlobalSecondaryIndexUpdates=[ 19 | { 20 | "Create": { 21 | "IndexName": "InvertedIndex", 22 | "KeySchema": [ 23 | { 24 | "AttributeName": "SK", 25 | "KeyType": "HASH" 26 | }, 27 | { 28 | "AttributeName": "PK", 29 | "KeyType": "RANGE" 30 | } 31 | ], 32 | "Projection": { 33 | "ProjectionType": "ALL" 34 | }, 35 | "ProvisionedThroughput": { 36 | "ReadCapacityUnits": 1, 37 | "WriteCapacityUnits": 1 38 | } 39 | } 40 | } 41 | ], 42 | ) 43 | print("Table 'battle-royale' updated successfully.") 44 | except Exception as e: 45 | print("Could not update table. Error:") 46 | print(e) 47 | -------------------------------------------------------------------------------- /game-player-data/scripts/bulk_load_table.py: -------------------------------------------------------------------------------- 1 | import json 2 | import boto3 3 | 4 | dynamodb = boto3.resource('dynamodb') 5 | table = dynamodb.Table('battle-royale') 6 | 7 | items = [] 8 | 9 | with open('scripts/items.json', 'r') as f: 10 | for row in f: 11 | items.append(json.loads(row)) 12 | 13 | with table.batch_writer() as batch: 14 | for item in items: 15 | batch.put_item(Item=item) 16 | -------------------------------------------------------------------------------- /game-player-data/scripts/create_table.py: -------------------------------------------------------------------------------- 1 | import boto3 2 | 3 | dynamodb = boto3.client('dynamodb') 4 | 5 | try: 6 | dynamodb.create_table( 7 | TableName='battle-royale', 8 | AttributeDefinitions=[ 9 | { 10 | "AttributeName": "PK", 11 | "AttributeType": "S" 12 | }, 13 | { 14 | "AttributeName": "SK", 15 | "AttributeType": "S" 16 | } 17 | ], 18 | KeySchema=[ 19 | { 20 | "AttributeName": "PK", 21 | "KeyType": "HASH" 22 | }, 23 | { 24 | "AttributeName": "SK", 25 | "KeyType": "RANGE" 26 | } 27 | ], 28 | ProvisionedThroughput={ 29 | "ReadCapacityUnits": 1, 30 | "WriteCapacityUnits": 1 31 | } 32 | ) 33 | print("Table 'battle-royale' created successfully.") 34 | except Exception as e: 35 | print("Could not create table. Error:") 36 | print(e) 37 | -------------------------------------------------------------------------------- /game-player-data/scripts/delete_table.py: -------------------------------------------------------------------------------- 1 | import boto3 2 | 3 | dynamodb = boto3.client('dynamodb') 4 | 5 | try: 6 | dynamodb.delete_table(TableName='battle-royale') 7 | print("Table deleted successfully.") 8 | except Exception as e: 9 | print("Could not delete table. Please try again in a moment. Error:") 10 | print(e) 11 | -------------------------------------------------------------------------------- /game-player-data/scripts/entities.py: -------------------------------------------------------------------------------- 1 | class User: 2 | 3 | def __init__(self, item): 4 | self.username = item.get('username').get('S') 5 | self.name = item.get('name').get('S') 6 | self.email = item.get('email').get('S') 7 | self.birthdate = item.get('birthdate').get('S') 8 | self.address = item.get('address').get('S') 9 | 10 | def __repr__(self): 11 | return f"User: {self.username} Name: {self.name}" 12 | 13 | 14 | class Game: 15 | 16 | def __init__(self, item): 17 | self.game_id = item.get('game_id').get('S') 18 | self.map = item.get('map').get('S') 19 | self.creator = item.get('creator').get('S') 20 | self.create_time = item.get('create_time').get('S') 21 | self.start_time = item.get('start_time', {}).get('S') 22 | self.end_time = item.get('end_time', {}).get('S') 23 | 24 | def __repr__(self): 25 | return f"Game: {self.game_id} Map: {self.map}" 26 | 27 | 28 | class UserGameMapping: 29 | 30 | def __init__(self, item): 31 | self.game_id = item.get('game_id').get('S') 32 | self.username = item.get('username').get('S') 33 | self.place = item.get('place', {}).get('S') 34 | 35 | def __repr__(self): 36 | if self.place: 37 | return f"UserGameMapping: {self.game_id} Username: {self.username} Place: {self.place.upper()}" 38 | return f"UserGameMapping: {self.game_id} Username: {self.username}" 39 | -------------------------------------------------------------------------------- /game-player-data/scripts/fetch_game_and_players.py: -------------------------------------------------------------------------------- 1 | import boto3 2 | from entities import Game, UserGameMapping 3 | 4 | dynamodb = boto3.client('dynamodb') 5 | 6 | GAME_ID = "3d4285f0-e52b-401a-a59b-112b38c4a26b" 7 | 8 | 9 | def fetch_game_and_users(game_id): 10 | resp = dynamodb.query( 11 | TableName='battle-royale', 12 | KeyConditionExpression="PK = :pk AND SK BETWEEN :metadata AND :users", 13 | ExpressionAttributeValues={ 14 | ":pk": { "S": "GAME#{}".format(game_id) }, 15 | ":metadata": { "S": "#METADATA#{}".format(game_id) }, 16 | ":users": { "S": "USER$" }, 17 | }, 18 | ScanIndexForward=True 19 | ) 20 | 21 | game = Game(resp['Items'][0]) 22 | game.users = [UserGameMapping(item) for item in resp['Items'][1:]] 23 | 24 | return game 25 | 26 | 27 | game = fetch_game_and_users(GAME_ID) 28 | 29 | print(game) 30 | for user in game.users: 31 | print(user) 32 | -------------------------------------------------------------------------------- /game-player-data/scripts/find_games_for_user.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import boto3 3 | 4 | from entities import UserGameMapping 5 | 6 | dynamodb = boto3.client('dynamodb') 7 | 8 | USERNAME = sys.argv[1] if len(sys.argv) == 2 else "carrpatrick" 9 | 10 | 11 | def find_games_for_user(username): 12 | try: 13 | resp = dynamodb.query( 14 | TableName='battle-royale', 15 | IndexName='InvertedIndex', 16 | KeyConditionExpression="SK = :sk", 17 | ExpressionAttributeValues={ 18 | ":sk": { "S": f"USER#{username}" } 19 | }, 20 | ScanIndexForward=True 21 | ) 22 | except Exception as e: 23 | print('Index is still backfilling. Please try again in a moment.') 24 | return None 25 | 26 | return [UserGameMapping(item) for item in resp['Items']] 27 | 28 | games = find_games_for_user(USERNAME) 29 | 30 | if games: 31 | print(f"Games played by user {USERNAME}:") 32 | for game in games: 33 | print(game) 34 | -------------------------------------------------------------------------------- /game-player-data/scripts/find_open_games.py: -------------------------------------------------------------------------------- 1 | import boto3 2 | from entities import Game 3 | 4 | dynamodb = boto3.client('dynamodb') 5 | 6 | def find_open_games(): 7 | resp = dynamodb.scan( 8 | TableName='battle-royale', 9 | IndexName="OpenGamesIndex", 10 | ) 11 | 12 | games = [Game(item) for item in resp['Items']] 13 | 14 | return games 15 | 16 | games = find_open_games() 17 | print("Open games:") 18 | for game in games: 19 | print(game) 20 | -------------------------------------------------------------------------------- /game-player-data/scripts/find_open_games_by_map.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import boto3 3 | from entities import Game 4 | 5 | dynamodb = boto3.client('dynamodb') 6 | 7 | MAP_NAME = sys.argv[1] if len(sys.argv) == 2 else "Green Grasslands" 8 | 9 | def find_open_games_by_map(map_name): 10 | resp = dynamodb.query( 11 | TableName='battle-royale', 12 | IndexName="OpenGamesIndex", 13 | KeyConditionExpression="#map = :map", 14 | ExpressionAttributeNames={ 15 | "#map": "map" 16 | }, 17 | ExpressionAttributeValues={ 18 | ":map": { "S": map_name }, 19 | }, 20 | ScanIndexForward=True 21 | ) 22 | 23 | games = [Game(item) for item in resp['Items']] 24 | 25 | return games 26 | 27 | games = find_open_games_by_map(MAP_NAME) 28 | print(f"Open games for map: {MAP_NAME}:") 29 | for game in games: 30 | print(game) 31 | -------------------------------------------------------------------------------- /game-player-data/scripts/start_game.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import boto3 3 | from entities import Game 4 | 5 | dynamodb = boto3.client('dynamodb') 6 | 7 | GAME_ID = "c6f38a6a-d1c5-4bdf-8468-24692ccc4646" 8 | CREATOR = "gstanley" 9 | 10 | def start_game(game_id, requesting_user, start_time): 11 | try: 12 | resp = dynamodb.update_item( 13 | TableName='battle-royale', 14 | Key={ 15 | "PK": { "S": f"GAME#{game_id}" }, 16 | "SK": { "S": f"#METADATA#{game_id}" } 17 | }, 18 | UpdateExpression="REMOVE open_timestamp SET start_time = :time", 19 | ConditionExpression="people = :limit AND creator = :requesting_user AND attribute_not_exists(start_time)", 20 | ExpressionAttributeValues={ 21 | ":time": { "S": start_time.isoformat() }, 22 | ":limit": { "N": "50" }, 23 | ":requesting_user": { "S": requesting_user } 24 | }, 25 | ReturnValues="ALL_NEW" 26 | ) 27 | return Game(resp['Attributes']) 28 | except Exception as e: 29 | print('Could not start game') 30 | return False 31 | 32 | game = start_game(GAME_ID, CREATOR, datetime.datetime(2019, 4, 16, 10, 15, 35)) 33 | 34 | if game: 35 | print(f"Started game: {game}") 36 | -------------------------------------------------------------------------------- /global-serverless/global-serverless/.chalice/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0", 3 | "app_name": "global-serverless", 4 | "stages": { 5 | "dev": { 6 | "api_gateway_stage": "api" 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /global-serverless/global-serverless/README.md: -------------------------------------------------------------------------------- 1 | ## Global Serverless workshop 🌎 🌍 🌏 2 | 3 | Welcome! This workshop will show you how to use DynamoDB Global Tables as the 4 | foundation for a resilient multi-region serverless application. 5 | 6 | For the full instructions please follow this link to [Amazon Workshop Studio](https://catalog.us-east-1.prod.workshops.aws/workshops/eb85cafa-2060-4524-9e70-20c2987ca378) -------------------------------------------------------------------------------- /global-serverless/global-serverless/requirements-dev.txt: -------------------------------------------------------------------------------- 1 | chalice==1.27.3 2 | pytest 3 | -------------------------------------------------------------------------------- /global-serverless/global-serverless/requirements.txt: -------------------------------------------------------------------------------- 1 | boto3 2 | chalice 3 | -------------------------------------------------------------------------------- /global-serverless/global-serverless/test.py: -------------------------------------------------------------------------------- 1 | from chalice.test import Client 2 | from app import app 3 | import json 4 | 5 | testpath = '/scan' 6 | testpath = '/query/user100' 7 | testpath = '/get/user100/AshlandValley' 8 | # testpath = '/update/user100/AshlandValley/-3' 9 | 10 | 11 | def test_index(): 12 | with Client(app) as client: 13 | response = client.http.get(testpath) 14 | print() 15 | print(json.dumps(response.json_body)) 16 | 17 | 18 | test_index() 19 | -------------------------------------------------------------------------------- /global-serverless/web/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/global-serverless/web/favicon.ico -------------------------------------------------------------------------------- /global-serverless/web/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/global-serverless/web/logo.png -------------------------------------------------------------------------------- /static/files/dynamodb-opensearch-zetl/OpenSearchPipeline/credentials.sh: -------------------------------------------------------------------------------- 1 | TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") 2 | INSTANCE_ROLE=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/) 3 | RESULTS=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/${INSTANCE_ROLE}) 4 | 5 | AccessKeyId=$(echo $RESULTS | jq -r '.AccessKeyId') 6 | SecretAccessKey=$(echo $RESULTS | jq -r '.SecretAccessKey') 7 | Region=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/\(.*\)[a-z]/\1/') 8 | Token=$(echo $RESULTS | jq -r '.Token') 9 | Role=$(aws sts get-caller-identity | jq -r '.Arn | sub("sts";"iam") | sub("assumed-role";"role") | sub("/i-[a-zA-Z0-9]+$";"")') 10 | 11 | export METADATA_AWS_ACCESS_KEY_ID=${AccessKeyId} 12 | export METADATA_AWS_SECRET_ACCESS_KEY=${SecretAccessKey} 13 | export METADATA_AWS_SESSION_TOKEN=${Token} 14 | export METADATA_AWS_REGION=${Region} 15 | export METADATA_AWS_ROLE=${Role} 16 | 17 | echo "METADATA_AWS_ACCESS_KEY_ID: $AccessKeyId" 18 | echo "METADATA_AWS_SECRET_ACCESS_KEY: $SecretAccessKey" 19 | echo "METADATA_AWS_SESSION_TOKEN: $Token" 20 | echo "METADATA_AWS_REGION: $Region" 21 | echo "METADATA_AWS_ROLE: $Role" -------------------------------------------------------------------------------- /static/files/event-driven-architecture/sample.json: -------------------------------------------------------------------------------- 1 | {"TradeID" : "0d957268", "Value": 10, "Version": 1, 2 | "Hierarchy" : {"RiskType": "Delta", "Region": "AMER", "TradeDesk": "FXSpot"} } 3 | 4 | {"TradeID" : "8ec2fdcd", "Value": 100, "Version": 1, 5 | "Hierarchy" : {"RiskType": "Delta", "Region": "EMEA", "TradeDesk": "FXSpot"} } 6 | 7 | {"TradeID" : "f5bb0ced", "Value": 5, "Version": 1, 8 | "Hierarchy" : {"RiskType": "Delta", "Region": "EMEA", "TradeDesk": "FXOptions"} } 9 | 10 | {"TradeID" : "8c935bf7", "Value": 3, "Version": 1, 11 | "Hierarchy" : {"RiskType": "Delta", "Region": "EMEA", "TradeDesk": "FXOptions"} } 12 | 13 | {"TradeID" : "395974a4", "Value": 20, "Version": 1, 14 | "Hierarchy" : {"RiskType": "Delta", "Region": "AMER", "TradeDesk": "FXSpot"} } 15 | 16 | 17 | 1,3,4 18 | 2,5 19 | 20 | {"Delta":18, "Delta:AMER":10, "Delta:AMER:FXSpot": 10, "Delta:EMEA":8, "Delta:EMEA:FXOptions":8} 21 | 22 | {"Delta":120, "Delta:EMEA":100, "Delta:EMEA:FXSpot": 100, "Delta:AMER":20, "Delta:AMER:FXSpot":20} 23 | -------------------------------------------------------------------------------- /static/files/visualizer/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2025 Amazon Web Services, Inc. or its Affiliates. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /static/files/visualizer/README.md: -------------------------------------------------------------------------------- 1 | ## The Visualizer 2 | 3 | 🚀 [Launch the visualizer!](http://amazondynamodblabs.com/static/visualizer/index.html) 🚀 4 | 5 | This is the source code from the DynamoDB visualizer original deployed to this [S3 bucket website](https://rh-web-bucket.s3.amazonaws.com/index.html). By using this code, you agree to the license found in [LICENSE.txt](LICENSE.txt) 6 | 7 | 8 | ![Sample screenshot](https://amazondynamodblabs.com/static/visualizer/img/model.png) 9 | 10 | 11 | ## Deployment and development 12 | 13 | On merge to the main branch, this code is auto deployed to [the Amazon DynamoDB Labs website](http://amazondynamodblabs.com/static/visualizer/index.html). Local development can be done in a simple web browser with a basic IDE. 14 | 15 | ## Authorship 16 | 17 | The original author was Rick Houlihan, during his time at AWS - [X.com](https://x.com/houlihan_rick) -------------------------------------------------------------------------------- /static/files/visualizer/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/favicon.ico -------------------------------------------------------------------------------- /static/files/visualizer/img/AttributeContext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/AttributeContext.png -------------------------------------------------------------------------------- /static/files/visualizer/img/DynamoDB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/DynamoDB.png -------------------------------------------------------------------------------- /static/files/visualizer/img/MappingFunction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/MappingFunction.png -------------------------------------------------------------------------------- /static/files/visualizer/img/OneTable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/OneTable.png -------------------------------------------------------------------------------- /static/files/visualizer/img/PK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/PK.png -------------------------------------------------------------------------------- /static/files/visualizer/img/PKcontext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/PKcontext.png -------------------------------------------------------------------------------- /static/files/visualizer/img/SK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/SK.png -------------------------------------------------------------------------------- /static/files/visualizer/img/SKcontext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/SKcontext.png -------------------------------------------------------------------------------- /static/files/visualizer/img/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/add.png -------------------------------------------------------------------------------- /static/files/visualizer/img/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/back.png -------------------------------------------------------------------------------- /static/files/visualizer/img/binoculars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/binoculars.png -------------------------------------------------------------------------------- /static/files/visualizer/img/button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/button.png -------------------------------------------------------------------------------- /static/files/visualizer/img/button1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/button1.png -------------------------------------------------------------------------------- /static/files/visualizer/img/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/delete.png -------------------------------------------------------------------------------- /static/files/visualizer/img/model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/model.png -------------------------------------------------------------------------------- /static/files/visualizer/img/model1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/model1.png -------------------------------------------------------------------------------- /static/files/visualizer/img/model2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/model2.png -------------------------------------------------------------------------------- /static/files/visualizer/img/model3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/model3.png -------------------------------------------------------------------------------- /static/files/visualizer/img/model4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/model4.png -------------------------------------------------------------------------------- /static/files/visualizer/img/model5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/model5.png -------------------------------------------------------------------------------- /static/files/visualizer/img/newTable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/newTable.png -------------------------------------------------------------------------------- /static/files/visualizer/img/primaryKey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/primaryKey.png -------------------------------------------------------------------------------- /static/files/visualizer/img/remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/remove.png -------------------------------------------------------------------------------- /static/files/visualizer/img/show-schema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/show-schema.png -------------------------------------------------------------------------------- /static/files/visualizer/img/swap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/swap.png -------------------------------------------------------------------------------- /static/files/visualizer/img/tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/tab.png -------------------------------------------------------------------------------- /static/files/visualizer/img/valueTemplate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/files/visualizer/img/valueTemplate.png -------------------------------------------------------------------------------- /static/images/Amazon-DynamoDB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/Amazon-DynamoDB.png -------------------------------------------------------------------------------- /static/images/GSI-logfile-stats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/GSI-logfile-stats.png -------------------------------------------------------------------------------- /static/images/adjacencylist1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/adjacencylist1.jpg -------------------------------------------------------------------------------- /static/images/adjacencylist2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/adjacencylist2.png -------------------------------------------------------------------------------- /static/images/aws-ws-event1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/aws-ws-event1.png -------------------------------------------------------------------------------- /static/images/aws-ws-event2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/aws-ws-event2.png -------------------------------------------------------------------------------- /static/images/aws-ws-event3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/aws-ws-event3.png -------------------------------------------------------------------------------- /static/images/aws-ws-event4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/aws-ws-event4.png -------------------------------------------------------------------------------- /static/images/aws-ws-event5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/aws-ws-event5.png -------------------------------------------------------------------------------- /static/images/awsconsole1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/awsconsole1.png -------------------------------------------------------------------------------- /static/images/awsconsole2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/awsconsole2.png -------------------------------------------------------------------------------- /static/images/awsconsole3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/awsconsole3.png -------------------------------------------------------------------------------- /static/images/awsconsole4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/awsconsole4.png -------------------------------------------------------------------------------- /static/images/awsconsole4a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/awsconsole4a.png -------------------------------------------------------------------------------- /static/images/awsconsole5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/awsconsole5.png -------------------------------------------------------------------------------- /static/images/awsconsole6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/awsconsole6.png -------------------------------------------------------------------------------- /static/images/awsconsole7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/awsconsole7.png -------------------------------------------------------------------------------- /static/images/awsconsolescan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/awsconsolescan.png -------------------------------------------------------------------------------- /static/images/awsnewconsole3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/awsnewconsole3.png -------------------------------------------------------------------------------- /static/images/change-data-capture/cdc-ddbs/create-order-history-ddbs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/cdc-ddbs/create-order-history-ddbs.png -------------------------------------------------------------------------------- /static/images/change-data-capture/cdc-kds/create-order-history-kds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/cdc-kds/create-order-history-kds.png -------------------------------------------------------------------------------- /static/images/change-data-capture/cleanup/delete-policies-one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/cleanup/delete-policies-one.png -------------------------------------------------------------------------------- /static/images/change-data-capture/cleanup/delete-policies-two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/cleanup/delete-policies-two.png -------------------------------------------------------------------------------- /static/images/change-data-capture/cleanup/delete-policies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/cleanup/delete-policies.png -------------------------------------------------------------------------------- /static/images/change-data-capture/cleanup/delete-roles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/cleanup/delete-roles.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/add-layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/add-layer.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/deploy-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/deploy-code.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/edit-env-var.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/edit-env-var.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/edit-item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/edit-item.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/explore-items.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/explore-items.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/explore-table-items.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/explore-table-items.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/iam-edit-policy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/iam-edit-policy.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/new-env-var.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/new-env-var.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/order-update-one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/order-update-one.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/orders-history-one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/orders-history-one.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/orders-history-two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/orders-history-two.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/orders-initial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/orders-initial.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/orders-update-two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/orders-update-two.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/select-dynamodb-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/select-dynamodb-service.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/select-item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/select-item.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/select-layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/select-layer.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/select-orders-table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/select-orders-table.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/set-name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/set-name.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/set-permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/set-permissions.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/specify-layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/specify-layer.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/trigger-config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/trigger-config.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/trigger-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/trigger-settings.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/triggers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/triggers.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex1/view-orders-table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex1/view-orders-table.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex2/add-layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex2/add-layer.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex2/deploy-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex2/deploy-code.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex2/orders-history-lab2-initial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex2/orders-history-lab2-initial.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex2/orders-history-one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex2/orders-history-one.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex2/orders-history-two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex2/orders-history-two.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex2/orders-lab2-initial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex2/orders-lab2-initial.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex2/orders-update-one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex2/orders-update-one.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex2/orders-update-two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex2/orders-update-two.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex2/select-layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex2/select-layer.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex2/trigger-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex2/trigger-settings.png -------------------------------------------------------------------------------- /static/images/change-data-capture/ex2/trigger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/ex2/trigger.png -------------------------------------------------------------------------------- /static/images/change-data-capture/setup/cloud9-create-env.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/setup/cloud9-create-env.png -------------------------------------------------------------------------------- /static/images/change-data-capture/setup/cloud9-launch-env.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/setup/cloud9-launch-env.png -------------------------------------------------------------------------------- /static/images/change-data-capture/setup/cloud9-name-env.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/setup/cloud9-name-env.png -------------------------------------------------------------------------------- /static/images/change-data-capture/setup/cloud9-select-ec2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/change-data-capture/setup/cloud9-select-ec2.png -------------------------------------------------------------------------------- /static/images/cloudformation-launch-stack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/cloudformation-launch-stack.png -------------------------------------------------------------------------------- /static/images/ddb-os-zetl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl.png -------------------------------------------------------------------------------- /static/images/ddb-os-zetl1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl1.jpg -------------------------------------------------------------------------------- /static/images/ddb-os-zetl10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl10.jpg -------------------------------------------------------------------------------- /static/images/ddb-os-zetl11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl11.jpg -------------------------------------------------------------------------------- /static/images/ddb-os-zetl12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl12.jpg -------------------------------------------------------------------------------- /static/images/ddb-os-zetl13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl13.jpg -------------------------------------------------------------------------------- /static/images/ddb-os-zetl14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl14.jpg -------------------------------------------------------------------------------- /static/images/ddb-os-zetl15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl15.jpg -------------------------------------------------------------------------------- /static/images/ddb-os-zetl16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl16.jpg -------------------------------------------------------------------------------- /static/images/ddb-os-zetl17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl17.jpg -------------------------------------------------------------------------------- /static/images/ddb-os-zetl18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl18.jpg -------------------------------------------------------------------------------- /static/images/ddb-os-zetl19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl19.jpg -------------------------------------------------------------------------------- /static/images/ddb-os-zetl3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl3.jpg -------------------------------------------------------------------------------- /static/images/ddb-os-zetl4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl4.jpg -------------------------------------------------------------------------------- /static/images/ddb-os-zetl5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl5.jpg -------------------------------------------------------------------------------- /static/images/ddb-os-zetl6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl6.jpg -------------------------------------------------------------------------------- /static/images/ddb-os-zetl7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl7.jpg -------------------------------------------------------------------------------- /static/images/ddb-os-zetl8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl8.jpg -------------------------------------------------------------------------------- /static/images/ddb-os-zetl9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/ddb-os-zetl9.jpg -------------------------------------------------------------------------------- /static/images/denormalization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/denormalization.png -------------------------------------------------------------------------------- /static/images/employees-GSI3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/employees-GSI3.png -------------------------------------------------------------------------------- /static/images/employees-scan-GSI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/employees-scan-GSI.png -------------------------------------------------------------------------------- /static/images/employeestablenew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/employeestablenew.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/.gitkeep -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/after-lab-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/after-lab-1.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/after-lab-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/after-lab-2.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/before-lab-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/before-lab-1.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/lab2-step1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/lab2-step1.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/lab2-step2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/lab2-step2.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/step1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/step1.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/step2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/step2.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/step3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/step3.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/workshop-pipeline-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/workshop-pipeline-1.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/workshop-pipeline-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/workshop-pipeline-2.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/workshop-pipeline-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/workshop-pipeline-3.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/workshop-pipeline-broken.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/workshop-pipeline-broken.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/workshop-pipeline-final-target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/workshop-pipeline-final-target.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/workshop-pipeline-lab-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/workshop-pipeline-lab-2.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/workshop-pipeline-lab1-all-steps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/workshop-pipeline-lab1-all-steps.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/workshop-pipeline-lab1-step1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/workshop-pipeline-lab1-step1.jpg -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/workshop-pipeline-lab1-step1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/workshop-pipeline-lab1-step1.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/workshop-pipeline-lab1-step2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/workshop-pipeline-lab1-step2.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/workshop-pipeline-lab1-step3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/workshop-pipeline-lab1-step3.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/architecture/workshop-pipeline-lab2-all-steps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/architecture/workshop-pipeline-lab2-all-steps.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/aws-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/aws-logo.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/deep-dive/pipeline-explanation-part-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/deep-dive/pipeline-explanation-part-1.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/deep-dive/pipeline-explanation-part-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/deep-dive/pipeline-explanation-part-2.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/deep-dive/pipeline-explanation-part-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/deep-dive/pipeline-explanation-part-3.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/deep-dive/stages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/deep-dive/stages.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/deep-dive/workshop-pipeline-stages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/deep-dive/workshop-pipeline-stages.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/event-engine/ee-aws-console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/event-engine/ee-aws-console.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/event-engine/ee-console-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/event-engine/ee-console-login.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/event-engine/ee-hash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/event-engine/ee-hash.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/event-engine/ee-readme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/event-engine/ee-readme.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/event-engine/ee-sign-in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/event-engine/ee-sign-in.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/event-engine/ee-teams.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/event-engine/ee-teams.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1-permissions/.gitignore: -------------------------------------------------------------------------------- 1 | originals 2 | -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1-permissions/click_add_new_statement.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1-permissions/click_add_new_statement.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1-permissions/click_on_edit_policy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1-permissions/click_on_edit_policy.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1-permissions/click_on_role.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1-permissions/click_on_role.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1-permissions/resource_stream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1-permissions/resource_stream.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1-permissions/resource_stream_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1-permissions/resource_stream_2.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1-permissions/set_resource.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1-permissions/set_resource.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1/add-trigger-map-lambda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1/add-trigger-map-lambda.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1/add-trigger-reduce-lambda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1/add-trigger-reduce-lambda.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1/add-trigger-state-lambda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1/add-trigger-state-lambda.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1/aggregate-table-items.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1/aggregate-table-items.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1/connect-state-lambda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1/connect-state-lambda.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1/dynamodb-ecosystem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1/dynamodb-ecosystem.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1/originals/connect-map-lambda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1/originals/connect-map-lambda.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1/originals/connect-reduce-lambda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1/originals/connect-reduce-lambda.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1/originals/connect-state-lambda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1/originals/connect-state-lambda.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1/originals/reduce-lambda-error-permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1/originals/reduce-lambda-error-permissions.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1/reduce-lambda-concurrency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1/reduce-lambda-concurrency.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1/reduce-lambda-error-permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1/reduce-lambda-error-permissions.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1/reduce-table-items.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1/reduce-table-items.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1/state-lambda-logs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1/state-lambda-logs.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab1/state-table-data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab1/state-table-data.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab2/failing-lambdas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab2/failing-lambdas.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab2/fix-map-lambda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab2/fix-map-lambda.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab2/fix-reduce-lambda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab2/fix-reduce-lambda.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab2/fix-state-lambda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab2/fix-state-lambda.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/lab2/lab2-optional.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/lab2/lab2-optional.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/target/TargetMapLambda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/target/TargetMapLambda.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/target/TargetReduceLambda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/target/TargetReduceLambda.png -------------------------------------------------------------------------------- /static/images/event-driven-architecture/target/TargetStateLambda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/event-driven-architecture/target/TargetStateLambda.png -------------------------------------------------------------------------------- /static/images/game-player-data/core-usage/aws-console-dynamodb-battle-royale-explore-items.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/game-player-data/core-usage/aws-console-dynamodb-battle-royale-explore-items.png -------------------------------------------------------------------------------- /static/images/game-player-data/join-games/aws-console-dynamodb-gsi-query-opengamesindex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/game-player-data/join-games/aws-console-dynamodb-gsi-query-opengamesindex.png -------------------------------------------------------------------------------- /static/images/game-player-data/open-games/aws-console-dynamodb-battle-royale-partiql-editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/game-player-data/open-games/aws-console-dynamodb-battle-royale-partiql-editor.png -------------------------------------------------------------------------------- /static/images/game-player-data/open-games/aws-console-dynamodb-partiql-editor-opengamesindex-query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/game-player-data/open-games/aws-console-dynamodb-partiql-editor-opengamesindex-query.png -------------------------------------------------------------------------------- /static/images/game-player-data/open-games/aws-console-menu-partiql-editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/game-player-data/open-games/aws-console-menu-partiql-editor.png -------------------------------------------------------------------------------- /static/images/game-player-data/plan-model/erd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/game-player-data/plan-model/erd.png -------------------------------------------------------------------------------- /static/images/game-player-data/setup/cloud9-environment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/game-player-data/setup/cloud9-environment.png -------------------------------------------------------------------------------- /static/images/global-serverless-application/getting_started/workshopstudio-awsconsole.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/global-serverless-application/getting_started/workshopstudio-awsconsole.png -------------------------------------------------------------------------------- /static/images/global-serverless-application/getting_started/workshopstudio-openconsole.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/global-serverless-application/getting_started/workshopstudio-openconsole.png -------------------------------------------------------------------------------- /static/images/global-serverless-application/module_1/cloud9-environment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/global-serverless-application/module_1/cloud9-environment.png -------------------------------------------------------------------------------- /static/images/global-serverless-application/module_1/cloudshell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/global-serverless-application/module_1/cloudshell.png -------------------------------------------------------------------------------- /static/images/global-serverless-application/module_2/architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/global-serverless-application/module_2/architecture.png -------------------------------------------------------------------------------- /static/images/global-serverless-application/module_2/distance_gt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/global-serverless-application/module_2/distance_gt.png -------------------------------------------------------------------------------- /static/images/global-serverless-application/module_2/gt_replication_conflict.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/global-serverless-application/module_2/gt_replication_conflict.png -------------------------------------------------------------------------------- /static/images/global-serverless-application/module_2/gt_replication_delay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/global-serverless-application/module_2/gt_replication_delay.png -------------------------------------------------------------------------------- /static/images/global-serverless-application/module_3/globalflix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/global-serverless-application/module_3/globalflix.png -------------------------------------------------------------------------------- /static/images/global-serverless-application/module_3/globalflix_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/global-serverless-application/module_3/globalflix_progress.png -------------------------------------------------------------------------------- /static/images/global-serverless-application/module_3/lambda_concurrency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/global-serverless-application/module_3/lambda_concurrency.png -------------------------------------------------------------------------------- /static/images/global-serverless-application/module_3/lambda_throttle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/global-serverless-application/module_3/lambda_throttle.png -------------------------------------------------------------------------------- /static/images/global-serverless-application/module_3/lambda_unthrottle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/global-serverless-application/module_3/lambda_unthrottle.png -------------------------------------------------------------------------------- /static/images/global-serverless-application/module_3/player.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/global-serverless-application/module_3/player.png -------------------------------------------------------------------------------- /static/images/global-serverless-application/module_3/ui_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/global-serverless-application/module_3/ui_error.png -------------------------------------------------------------------------------- /static/images/global-serverless-application/module_3/ui_failover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/global-serverless-application/module_3/ui_failover.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/backup_plan_delete_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/backup_plan_delete_1.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/backup_plan_delete_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/backup_plan_delete_2.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/backup_plan_delete_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/backup_plan_delete_3.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/backup_plan_delete_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/backup_plan_delete_4.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/backup_vault_delete_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/backup_vault_delete_1.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/backup_vault_delete_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/backup_vault_delete_2.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/od_backup_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/od_backup_1.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/od_backup_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/od_backup_2.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/od_backup_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/od_backup_3.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/od_backup_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/od_backup_4.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/od_backup_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/od_backup_5.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/od_backup_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/od_backup_6.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/pitr_backup_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/pitr_backup_1.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/pitr_backup_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/pitr_backup_2.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/pitr_restore_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/pitr_restore_1.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/pitr_restore_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/pitr_restore_2.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/pitr_restore_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/pitr_restore_3.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/pitr_unwanted_records.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/pitr_unwanted_records.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/restore_point_delete_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/restore_point_delete_1.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/restrict_delete_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/restrict_delete_1.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/restrict_delete_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/restrict_delete_2.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/sched_backup_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/sched_backup_1.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/sched_backup_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/sched_backup_10.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/sched_backup_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/sched_backup_11.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/sched_backup_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/sched_backup_12.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/sched_backup_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/sched_backup_13.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/sched_backup_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/sched_backup_14.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/sched_backup_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/sched_backup_15.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/sched_backup_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/sched_backup_16.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/sched_backup_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/sched_backup_2.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/sched_backup_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/sched_backup_3.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/sched_backup_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/sched_backup_4.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/sched_backup_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/sched_backup_5.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/sched_backup_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/sched_backup_6.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/sched_backup_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/sched_backup_7.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/sched_backup_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/sched_backup_8.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/backup/sched_backup_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/backup/sched_backup_9.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/dynamodb-labs-cfn-delete-stack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/dynamodb-labs-cfn-delete-stack.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_create_gsi_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_create_gsi_1.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_create_gsi_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_create_gsi_2.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_create_item_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_create_item_1.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_create_item_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_create_item_2.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_delete_gsi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_delete_gsi.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_delete_item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_delete_item.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_explore_item_select_table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_explore_item_select_table.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_item_editor_forms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_item_editor_forms.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_item_editor_json.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_item_editor_json.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_item_explorer_expand_tables.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_item_explorer_expand_tables.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_item_explorer_query_reply_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_item_explorer_query_reply_1.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_item_explorer_query_reply_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_item_explorer_query_reply_2.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_item_explorer_query_reply_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_item_explorer_query_reply_3.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_item_explorer_query_reply_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_item_explorer_query_reply_4.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_item_explorer_scan_reply_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_item_explorer_scan_reply_1.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_item_explorer_scan_reply_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_item_explorer_scan_reply_2.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_menu_explore_item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_menu_explore_item.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_menu_hamburger_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_menu_hamburger_icon.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_menu_item_explorer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_menu_item_explorer.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_modify_item_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_modify_item_1.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_modify_item_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_modify_item_2.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_modify_item_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_modify_item_3.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_modify_item_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_modify_item_4.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/console_productcatalog_preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/console_productcatalog_preview.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/explore-console/dynamodb_pick_tables.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/explore-console/dynamodb_pick_tables.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/setup/cloud9_setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/setup/cloud9_setup.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/setup/dynamodb-labs-vpc-create-stack-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/setup/dynamodb-labs-vpc-create-stack-1.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/setup/dynamodb-labs-vpc-create-stack-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/setup/dynamodb-labs-vpc-create-stack-2.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/setup/dynamodb-labs-vpc-create-stack-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/setup/dynamodb-labs-vpc-create-stack-3.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/setup/dynamodb_lab_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/setup/dynamodb_lab_architecture.png -------------------------------------------------------------------------------- /static/images/hands-on-labs/setup/load_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/hands-on-labs/setup/load_data.png -------------------------------------------------------------------------------- /static/images/iam-1-create-user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/iam-1-create-user.png -------------------------------------------------------------------------------- /static/images/iam-2-attach-policy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/iam-2-attach-policy.png -------------------------------------------------------------------------------- /static/images/iam-3-create-user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/iam-3-create-user.png -------------------------------------------------------------------------------- /static/images/iam-4-save-url.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/iam-4-save-url.png -------------------------------------------------------------------------------- /static/images/iam-signin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/iam-signin.png -------------------------------------------------------------------------------- /static/images/image1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/image1-1.png -------------------------------------------------------------------------------- /static/images/image1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/image1.jpg -------------------------------------------------------------------------------- /static/images/image2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/image2.jpg -------------------------------------------------------------------------------- /static/images/image3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/image3.jpg -------------------------------------------------------------------------------- /static/images/image4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/image4.jpg -------------------------------------------------------------------------------- /static/images/image5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/image5.jpg -------------------------------------------------------------------------------- /static/images/image6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/image6.jpg -------------------------------------------------------------------------------- /static/images/image7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/image7.jpg -------------------------------------------------------------------------------- /static/images/image8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/image8.jpg -------------------------------------------------------------------------------- /static/images/invoice-bills-GSI1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/invoice-bills-GSI1.png -------------------------------------------------------------------------------- /static/images/lowgsi-gsi1-throttles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/lowgsi-gsi1-throttles.png -------------------------------------------------------------------------------- /static/images/lowgsi-gsi1-wc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/lowgsi-gsi1-wc.png -------------------------------------------------------------------------------- /static/images/lowgsi-table-throttles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/lowgsi-table-throttles.png -------------------------------------------------------------------------------- /static/images/lowgsi-table-wc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/lowgsi-table-wc.png -------------------------------------------------------------------------------- /static/images/migration-environment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration-environment.png -------------------------------------------------------------------------------- /static/images/migration1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration1.jpg -------------------------------------------------------------------------------- /static/images/migration10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration10.jpg -------------------------------------------------------------------------------- /static/images/migration11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration11.jpg -------------------------------------------------------------------------------- /static/images/migration12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration12.jpg -------------------------------------------------------------------------------- /static/images/migration13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration13.jpg -------------------------------------------------------------------------------- /static/images/migration14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration14.jpg -------------------------------------------------------------------------------- /static/images/migration15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration15.jpg -------------------------------------------------------------------------------- /static/images/migration16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration16.jpg -------------------------------------------------------------------------------- /static/images/migration17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration17.jpg -------------------------------------------------------------------------------- /static/images/migration18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration18.jpg -------------------------------------------------------------------------------- /static/images/migration19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration19.jpg -------------------------------------------------------------------------------- /static/images/migration2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration2.jpg -------------------------------------------------------------------------------- /static/images/migration20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration20.jpg -------------------------------------------------------------------------------- /static/images/migration21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration21.jpg -------------------------------------------------------------------------------- /static/images/migration22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration22.jpg -------------------------------------------------------------------------------- /static/images/migration23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration23.jpg -------------------------------------------------------------------------------- /static/images/migration24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration24.jpg -------------------------------------------------------------------------------- /static/images/migration25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration25.jpg -------------------------------------------------------------------------------- /static/images/migration26.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration26.jpg -------------------------------------------------------------------------------- /static/images/migration27.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration27.jpg -------------------------------------------------------------------------------- /static/images/migration28.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration28.jpg -------------------------------------------------------------------------------- /static/images/migration29.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration29.jpg -------------------------------------------------------------------------------- /static/images/migration3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration3.jpg -------------------------------------------------------------------------------- /static/images/migration30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration30.jpg -------------------------------------------------------------------------------- /static/images/migration31.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration31.jpg -------------------------------------------------------------------------------- /static/images/migration32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration32.png -------------------------------------------------------------------------------- /static/images/migration33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration33.png -------------------------------------------------------------------------------- /static/images/migration34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration34.png -------------------------------------------------------------------------------- /static/images/migration35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration35.png -------------------------------------------------------------------------------- /static/images/migration36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration36.png -------------------------------------------------------------------------------- /static/images/migration4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration4.jpg -------------------------------------------------------------------------------- /static/images/migration5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration5.jpg -------------------------------------------------------------------------------- /static/images/migration6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration6.jpg -------------------------------------------------------------------------------- /static/images/migration7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration7.jpg -------------------------------------------------------------------------------- /static/images/migration8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration8.jpg -------------------------------------------------------------------------------- /static/images/migration9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/migration9.jpg -------------------------------------------------------------------------------- /static/images/nosql_wb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/nosql_wb.png -------------------------------------------------------------------------------- /static/images/relational-migration/customers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/customers.png -------------------------------------------------------------------------------- /static/images/relational-migration/customers_ddb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/customers_ddb.png -------------------------------------------------------------------------------- /static/images/relational-migration/customers_indexes_ddb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/customers_indexes_ddb.png -------------------------------------------------------------------------------- /static/images/relational-migration/customers_indexes_ddb_form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/customers_indexes_ddb_form.png -------------------------------------------------------------------------------- /static/images/relational-migration/ddb_gsi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/ddb_gsi.png -------------------------------------------------------------------------------- /static/images/relational-migration/extract.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/extract.png -------------------------------------------------------------------------------- /static/images/relational-migration/fk_result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/fk_result.png -------------------------------------------------------------------------------- /static/images/relational-migration/foreign_key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/foreign_key.png -------------------------------------------------------------------------------- /static/images/relational-migration/frontpage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/frontpage.png -------------------------------------------------------------------------------- /static/images/relational-migration/import-from-s3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/import-from-s3.png -------------------------------------------------------------------------------- /static/images/relational-migration/import.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/import.png -------------------------------------------------------------------------------- /static/images/relational-migration/migrate_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/migrate_flow.png -------------------------------------------------------------------------------- /static/images/relational-migration/migrate_output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/migrate_output.png -------------------------------------------------------------------------------- /static/images/relational-migration/mysql_s3_output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/mysql_s3_output.png -------------------------------------------------------------------------------- /static/images/relational-migration/mysql_s3_write_output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/mysql_s3_write_output.png -------------------------------------------------------------------------------- /static/images/relational-migration/oneforone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/oneforone.png -------------------------------------------------------------------------------- /static/images/relational-migration/orderlines.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/orderlines.png -------------------------------------------------------------------------------- /static/images/relational-migration/phases.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/phases.png -------------------------------------------------------------------------------- /static/images/relational-migration/querying_tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/querying_tab.png -------------------------------------------------------------------------------- /static/images/relational-migration/range_expression.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/range_expression.png -------------------------------------------------------------------------------- /static/images/relational-migration/rationales.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/rationales.png -------------------------------------------------------------------------------- /static/images/relational-migration/relational-stack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/relational-stack.png -------------------------------------------------------------------------------- /static/images/relational-migration/relational_schema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/relational_schema.png -------------------------------------------------------------------------------- /static/images/relational-migration/setenv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/setenv.png -------------------------------------------------------------------------------- /static/images/relational-migration/singletableview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/singletableview.png -------------------------------------------------------------------------------- /static/images/relational-migration/sparse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/sparse.png -------------------------------------------------------------------------------- /static/images/relational-migration/stacked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/stacked.png -------------------------------------------------------------------------------- /static/images/relational-migration/starting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/starting.png -------------------------------------------------------------------------------- /static/images/relational-migration/type_conversion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/type_conversion.png -------------------------------------------------------------------------------- /static/images/relational-migration/vehicles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/vehicles.png -------------------------------------------------------------------------------- /static/images/relational-migration/view_result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/relational-migration/view_result.png -------------------------------------------------------------------------------- /static/images/tablelogfile-stats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/tablelogfile-stats.png -------------------------------------------------------------------------------- /static/images/zetl-cfn-console1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/zetl-cfn-console1.png -------------------------------------------------------------------------------- /static/images/zetl-cloud9-environment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/amazon-dynamodb-labs/f1961be464d3ad2650658868d2a59de8cc60f95d/static/images/zetl-cloud9-environment.png --------------------------------------------------------------------------------