{"id":"4f31a75e-42e3-4c1c-ac9a-e20a27ff8214","shortId":"zxBw48","kind":"skill","title":"dynamodb","tagline":"AWS DynamoDB NoSQL database for scalable data storage. Use when designing table schemas, writing queries, configuring indexes, managing capacity, implementing single-table design, or troubleshooting performance issues.","description":"# AWS DynamoDB\n\nAmazon DynamoDB is a fully managed NoSQL database service providing fast, predictable performance at any scale. It supports key-value and document data structures.\n\n## Table of Contents\n\n- [Core Concepts](#core-concepts)\n- [Common Patterns](#common-patterns)\n- [CLI Reference](#cli-reference)\n- [Best Practices](#best-practices)\n- [Troubleshooting](#troubleshooting)\n- [References](#references)\n\n## Core Concepts\n\n### Keys\n\n| Key Type | Description |\n|----------|-------------|\n| **Partition Key (PK)** | Required. Determines data distribution |\n| **Sort Key (SK)** | Optional. Enables range queries within partition |\n| **Composite Key** | PK + SK combination |\n\n### Secondary Indexes\n\n| Index Type | Description |\n|------------|-------------|\n| **GSI (Global Secondary Index)** | Different PK/SK, separate throughput, eventually consistent |\n| **LSI (Local Secondary Index)** | Same PK, different SK, shares table throughput, strongly consistent option |\n\n### Capacity Modes\n\n| Mode | Use Case |\n|------|----------|\n| **On-Demand** | Unpredictable traffic, pay-per-request |\n| **Provisioned** | Predictable traffic, lower cost, can use auto-scaling |\n\n## Common Patterns\n\n### Create a Table\n\n**AWS CLI:**\n\n```bash\naws dynamodb create-table \\\n  --table-name Users \\\n  --attribute-definitions \\\n    AttributeName=PK,AttributeType=S \\\n    AttributeName=SK,AttributeType=S \\\n  --key-schema \\\n    AttributeName=PK,KeyType=HASH \\\n    AttributeName=SK,KeyType=RANGE \\\n  --billing-mode PAY_PER_REQUEST\n```\n\n**boto3:**\n\n```python\nimport boto3\n\ndynamodb = boto3.resource('dynamodb')\n\ntable = dynamodb.create_table(\n    TableName='Users',\n    KeySchema=[\n        {'AttributeName': 'PK', 'KeyType': 'HASH'},\n        {'AttributeName': 'SK', 'KeyType': 'RANGE'}\n    ],\n    AttributeDefinitions=[\n        {'AttributeName': 'PK', 'AttributeType': 'S'},\n        {'AttributeName': 'SK', 'AttributeType': 'S'}\n    ],\n    BillingMode='PAY_PER_REQUEST'\n)\n\ntable.wait_until_exists()\n```\n\n### Basic CRUD Operations\n\n```python\nimport boto3\nfrom boto3.dynamodb.conditions import Key, Attr\n\ndynamodb = boto3.resource('dynamodb')\ntable = dynamodb.Table('Users')\n\n# Put item\ntable.put_item(\n    Item={\n        'PK': 'USER#123',\n        'SK': 'PROFILE',\n        'name': 'John Doe',\n        'email': 'john@example.com',\n        'created_at': '2024-01-15T10:30:00Z'\n    }\n)\n\n# Get item\nresponse = table.get_item(\n    Key={'PK': 'USER#123', 'SK': 'PROFILE'}\n)\nitem = response.get('Item')\n\n# Update item\ntable.update_item(\n    Key={'PK': 'USER#123', 'SK': 'PROFILE'},\n    UpdateExpression='SET #name = :name, updated_at = :updated',\n    ExpressionAttributeNames={'#name': 'name'},\n    ExpressionAttributeValues={\n        ':name': 'John Smith',\n        ':updated': '2024-01-16T10:30:00Z'\n    }\n)\n\n# Delete item\ntable.delete_item(\n    Key={'PK': 'USER#123', 'SK': 'PROFILE'}\n)\n```\n\n### Query Operations\n\n```python\n# Query by partition key\nresponse = table.query(\n    KeyConditionExpression=Key('PK').eq('USER#123')\n)\n\n# Query with sort key condition\nresponse = table.query(\n    KeyConditionExpression=Key('PK').eq('USER#123') & Key('SK').begins_with('ORDER#')\n)\n\n# Query with filter\nresponse = table.query(\n    KeyConditionExpression=Key('PK').eq('USER#123'),\n    FilterExpression=Attr('status').eq('active')\n)\n\n# Query with projection\nresponse = table.query(\n    KeyConditionExpression=Key('PK').eq('USER#123'),\n    ProjectionExpression='PK, SK, #name, email',\n    ExpressionAttributeNames={'#name': 'name'}\n)\n\n# Paginated query\npaginator = dynamodb.meta.client.get_paginator('query')\nfor page in paginator.paginate(\n    TableName='Users',\n    KeyConditionExpression='PK = :pk',\n    ExpressionAttributeValues={':pk': {'S': 'USER#123'}}\n):\n    for item in page['Items']:\n        print(item)\n```\n\n### Batch Operations\n\n```python\n# Batch write (up to 25 items)\nwith table.batch_writer() as batch:\n    for i in range(100):\n        batch.put_item(Item={\n            'PK': f'USER#{i}',\n            'SK': 'PROFILE',\n            'name': f'User {i}'\n        })\n\n# Batch get (up to 100 items)\ndynamodb = boto3.resource('dynamodb')\nresponse = dynamodb.batch_get_item(\n    RequestItems={\n        'Users': {\n            'Keys': [\n                {'PK': 'USER#1', 'SK': 'PROFILE'},\n                {'PK': 'USER#2', 'SK': 'PROFILE'}\n            ]\n        }\n    }\n)\n```\n\n### Create GSI\n\n```bash\naws dynamodb update-table \\\n  --table-name Users \\\n  --attribute-definitions AttributeName=email,AttributeType=S \\\n  --global-secondary-index-updates '[\n    {\n      \"Create\": {\n        \"IndexName\": \"email-index\",\n        \"KeySchema\": [{\"AttributeName\": \"email\", \"KeyType\": \"HASH\"}],\n        \"Projection\": {\"ProjectionType\": \"ALL\"}\n      }\n    }\n  ]'\n```\n\n### Conditional Writes\n\n```python\nfrom botocore.exceptions import ClientError\n\n# Only put if item doesn't exist\ntry:\n    table.put_item(\n        Item={'PK': 'USER#123', 'SK': 'PROFILE', 'name': 'John'},\n        ConditionExpression='attribute_not_exists(PK)'\n    )\nexcept ClientError as e:\n    if e.response['Error']['Code'] == 'ConditionalCheckFailedException':\n        print(\"Item already exists\")\n\n# Optimistic locking with version\ntable.update_item(\n    Key={'PK': 'USER#123', 'SK': 'PROFILE'},\n    UpdateExpression='SET #name = :name, version = version + :inc',\n    ConditionExpression='version = :current_version',\n    ExpressionAttributeNames={'#name': 'name'},\n    ExpressionAttributeValues={\n        ':name': 'New Name',\n        ':inc': 1,\n        ':current_version': 5\n    }\n)\n```\n\n## CLI Reference\n\n### Table Operations\n\n| Command | Description |\n|---------|-------------|\n| `aws dynamodb create-table` | Create table |\n| `aws dynamodb describe-table` | Get table info |\n| `aws dynamodb update-table` | Modify table/indexes |\n| `aws dynamodb delete-table` | Delete table |\n| `aws dynamodb list-tables` | List all tables |\n\n### Item Operations\n\n| Command | Description |\n|---------|-------------|\n| `aws dynamodb put-item` | Create/replace item |\n| `aws dynamodb get-item` | Read single item |\n| `aws dynamodb update-item` | Update item attributes |\n| `aws dynamodb delete-item` | Delete item |\n| `aws dynamodb query` | Query by key |\n| `aws dynamodb scan` | Full table scan |\n\n### Batch Operations\n\n| Command | Description |\n|---------|-------------|\n| `aws dynamodb batch-write-item` | Batch write (25 max) |\n| `aws dynamodb batch-get-item` | Batch read (100 max) |\n| `aws dynamodb transact-write-items` | Transaction write |\n| `aws dynamodb transact-get-items` | Transaction read |\n\n## Best Practices\n\n### Data Modeling\n\n- **Design for access patterns** — know your queries before designing\n- **Use composite keys** — PK for grouping, SK for sorting/filtering\n- **Prefer query over scan** — scans are expensive\n- **Use sparse indexes** — only items with index attributes are indexed\n- **Consider single-table design** for related entities\n\n### Performance\n\n- **Distribute partition keys evenly** — avoid hot partitions\n- **Use batch operations** to reduce API calls\n- **Enable DAX** for read-heavy workloads\n- **Use projections** to reduce data transfer\n\n### Cost Optimization\n\n- **Use on-demand** for variable workloads\n- **Use provisioned + auto-scaling** for predictable workloads\n- **Set TTL** for expiring data\n- **Archive to S3** for cold data\n\n## Troubleshooting\n\n### Throttling\n\n**Symptom:** `ProvisionedThroughputExceededException`\n\n**Causes:**\n- Hot partition (uneven key distribution)\n- Burst traffic exceeding capacity\n- GSI throttling affecting base table\n\n**Solutions:**\n\n```python\n# Use exponential backoff\nimport time\nfrom botocore.config import Config\n\nconfig = Config(\n    retries={\n        'max_attempts': 10,\n        'mode': 'adaptive'\n    }\n)\ndynamodb = boto3.resource('dynamodb', config=config)\n```\n\n### Hot Partitions\n\n**Debug:**\n\n```bash\n# Check consumed capacity by partition\naws cloudwatch get-metric-statistics \\\n  --namespace AWS/DynamoDB \\\n  --metric-name ConsumedReadCapacityUnits \\\n  --dimensions Name=TableName,Value=Users \\\n  --start-time $(date -d '1 hour ago' -u +%Y-%m-%dT%H:%M:%SZ) \\\n  --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \\\n  --period 60 \\\n  --statistics Sum\n```\n\n**Solutions:**\n- Add randomness to partition keys\n- Use write sharding\n- Distribute access across partitions\n\n### Query Returns No Items\n\n**Debug checklist:**\n1. Verify key values exactly match (case-sensitive)\n2. Check key types (S, N, B)\n3. Confirm table/index name\n4. Review filter expressions (they apply AFTER read)\n\n### Scan Performance\n\n**Issue:** Scans are slow and expensive\n\n**Solutions:**\n- Use parallel scan for large tables\n- Create GSI for the access pattern\n- Use filter expressions to reduce returned data\n\n```python\n# Parallel scan\nimport concurrent.futures\n\ndef scan_segment(segment, total_segments):\n    return table.scan(\n        Segment=segment,\n        TotalSegments=total_segments\n    )\n\nwith concurrent.futures.ThreadPoolExecutor() as executor:\n    results = list(executor.map(\n        lambda s: scan_segment(s, 4),\n        range(4)\n    ))\n```\n\n## References\n\n- [DynamoDB Developer Guide](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/)\n- [DynamoDB API Reference](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/)\n- [DynamoDB CLI Reference](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/)\n- [boto3 DynamoDB](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html)\n- [DynamoDB Best Practices](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/best-practices.html)","tags":["dynamodb","aws","agent","skills","itsmostafa","agent-skills","agentic-ai","claude-code","claude-skills","codex","coding-agents"],"capabilities":["skill","source-itsmostafa","skill-dynamodb","topic-agent-skills","topic-agentic-ai","topic-aws","topic-claude-code","topic-claude-skills","topic-codex","topic-coding-agents"],"categories":["aws-agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/itsmostafa/aws-agent-skills/dynamodb","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add itsmostafa/aws-agent-skills","source_repo":"https://github.com/itsmostafa/aws-agent-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 1085 github stars · SKILL.md body (9,518 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-03T00:52:58.360Z","embedding":null,"createdAt":"2026-04-18T21:55:39.383Z","updatedAt":"2026-05-03T00:52:58.360Z","lastSeenAt":"2026-05-03T00:52:58.360Z","tsv":"'-01':281,326 '-15':282 '-16':327 '/amazondynamodb/latest/apireference/)':1060 '/amazondynamodb/latest/developerguide/)':1054 '/amazondynamodb/latest/developerguide/best-practices.html)':1077 '/cli/latest/reference/dynamodb/)':1066 '/v1/documentation/api/latest/reference/services/dynamodb.html)':1071 '00z':285,330 '1':486,605,915,959 '10':876 '100':454,472,720 '123':270,294,307,338,355,368,384,400,428,551,583 '2':491,968 '2024':280,325 '25':443,710 '3':975 '30':284,329 '4':979,1045,1047 '5':608 '60':937 'access':744,950,1006 'across':951 'activ':389 'adapt':878 'add':941 'affect':857 'ago':917 'alreadi':572 'amazon':32 'api':798,1056 'appli':984 'archiv':835 'attempt':875 'attr':256,386 'attribut':182,507,557,678,774 'attribute-definit':181,506 'attributedefinit':230 'attributenam':184,188,195,199,222,226,231,235,509,524 'attributetyp':186,190,233,237,511 'auto':162,825 'auto-sc':161,824 'avoid':790 'aw':2,30,169,172,497,615,622,630,637,644,656,663,671,679,686,692,702,712,722,730,893 'aws/dynamodb':900 'b':974 'backoff':864 'base':858 'bash':171,496,887 'basic':246 'batch':436,439,449,468,698,705,708,715,718,794 'batch-get-item':714 'batch-write-item':704 'batch.put':455 'begin':371 'best':75,78,738,1073 'best-practic':77 'bill':204 'billing-mod':203 'billingmod':239 'boto3':209,212,251,1067 'boto3.amazonaws.com':1070 'boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html)':1069 'boto3.dynamodb.conditions':253 'boto3.resource':214,258,475,880 'botocore.config':868 'botocore.exceptions':535 'burst':851 'call':799 'capac':20,140,854,890 'case':144,966 'case-sensit':965 'caus':845 'check':888,969 'checklist':958 'cli':70,73,170,609,1062 'cli-refer':72 'clienterror':537,562 'cloudwatch':894 'code':568 'cold':839 'combin':110 'command':613,654,700 'common':65,68,164 'common-pattern':67 'composit':106,752 'concept':61,64,85 'concurrent.futures':1019 'concurrent.futures.threadpoolexecutor':1034 'condit':360,531 'conditionalcheckfailedexcept':569 'conditionexpress':556,593 'config':870,871,872,882,883 'configur':17 'confirm':976 'consid':777 'consist':125,138 'consum':889 'consumedreadcapacityunit':904 'content':59 'core':60,63,84 'core-concept':62 'cost':158,813 'creat':166,175,278,494,518,618,620,1002 'create-t':174,617 'create/replace':661 'crud':247 'current':595,606 'd':914 'data':8,55,95,740,811,834,840,1014 'databas':5,39 'date':913,928 'dax':801 'debug':886,957 'def':1020 'definit':183,508 'delet':331,640,642,682,684 'delete-item':681 'delete-t':639 'demand':147,818 'describ':625 'describe-t':624 'descript':89,115,614,655,701 'design':12,25,742,750,781 'determin':94 'develop':1050 'differ':120,132 'dimens':905 'distribut':96,786,850,949 'docs.aws.amazon.com':1053,1059,1065,1076 'docs.aws.amazon.com/amazondynamodb/latest/apireference/)':1058 'docs.aws.amazon.com/amazondynamodb/latest/developerguide/)':1052 'docs.aws.amazon.com/amazondynamodb/latest/developerguide/best-practices.html)':1075 'docs.aws.amazon.com/cli/latest/reference/dynamodb/)':1064 'document':54 'doe':275 'doesn':542 'dt':921,932 'dynamodb':1,3,31,33,173,213,215,257,259,474,476,498,616,623,631,638,645,657,664,672,680,687,693,703,713,723,731,879,881,1049,1055,1061,1068,1072 'dynamodb.batch':478 'dynamodb.create':217 'dynamodb.meta.client.get':412 'dynamodb.table':261 'e':564 'e.response':566 'email':276,405,510,521,525 'email-index':520 'enabl':101,800 'end':926 'end-tim':925 'entiti':784 'eq':353,366,382,388,398 'error':567 'even':789 'eventu':124 'exact':963 'exceed':853 'except':561 'executor':1036 'executor.map':1039 'exist':245,544,559,573 'expens':766,994 'expir':833 'exponenti':863 'express':982,1010 'expressionattributenam':317,406,597 'expressionattributevalu':320,424,600 'f':459,465 'fast':42 'filter':376,981,1009 'filterexpress':385 'full':695 'fulli':36 'get':286,469,479,627,666,716,734,896 'get-item':665 'get-metric-statist':895 'global':117,514 'global-secondary-index-upd':513 'group':756 'gsi':116,495,855,1003 'guid':1051 'h':922,933 'hash':198,225,527 'heavi':805 'hot':791,846,884 'hour':916 'implement':21 'import':211,250,254,536,865,869,1018 'inc':592,604 'index':18,112,113,119,129,516,522,769,773,776 'indexnam':519 'info':629 'issu':29,989 'item':264,266,267,287,290,297,299,301,303,332,334,430,433,435,444,456,457,473,480,541,547,548,571,579,652,660,662,667,670,675,677,683,685,707,717,727,735,771,956 'john':274,322,555 'john@example.com':277 'key':51,86,87,91,98,107,193,255,291,304,335,347,351,359,364,369,380,396,483,580,691,753,788,849,945,961,970 'key-schema':192 'key-valu':50 'keyconditionexpress':350,363,379,395,421 'keyschema':221,523 'keytyp':197,201,224,228,526 'know':746 'lambda':1040 'larg':1000 'list':647,649,1038 'list-tabl':646 'local':127 'lock':575 'lower':157 'lsi':126 'm':920,923,931,934 'manag':19,37 'match':964 'max':711,721,874 'metric':897,902 'metric-nam':901 'mode':141,142,205,877 'model':741 'modifi':635 'n':973 'name':179,273,312,313,318,319,321,404,407,408,464,504,554,588,589,598,599,601,603,903,906,978 'namespac':899 'new':602 'nosql':4,38 'on-demand':145,816 'oper':248,342,437,612,653,699,795 'optim':814 'optimist':574 'option':100,139 'order':373 'page':416,432 'pagin':409,411,413 'paginator.paginate':418 'parallel':997,1016 'partit':90,105,346,787,792,847,885,892,944,952 'pattern':66,69,165,745,1007 'pay':151,206,240 'pay-per-request':150 'per':152,207,241 'perform':28,44,785,988 'period':936 'pk':92,108,131,185,196,223,232,268,292,305,336,352,365,381,397,402,422,423,425,458,484,489,549,560,581,754 'pk/sk':121 'practic':76,79,739,1074 'predict':43,155,828 'prefer':760 'print':434,570 'profil':272,296,309,340,463,488,493,553,585 'project':392,528,808 'projectionexpress':401 'projectiontyp':529 'provid':41 'provis':154,823 'provisionedthroughputexceededexcept':844 'put':263,539,659 'put-item':658 'python':210,249,343,438,533,861,1015 'queri':16,103,341,344,356,374,390,410,414,688,689,748,761,953 'random':942 'rang':102,202,229,453,1046 'read':668,719,737,804,986 'read-heavi':803 'reduc':797,810,1012 'refer':71,74,82,83,610,1048,1057,1063 'relat':783 'request':153,208,242 'requestitem':481 'requir':93 'respons':288,348,361,377,393,477 'response.get':298 'result':1037 'retri':873 'return':954,1013,1026 'review':980 's3':837 'scalabl':7 'scale':47,163,826 'scan':694,697,763,764,987,990,998,1017,1021,1042 'schema':14,194 'secondari':111,118,128,515 'segment':1022,1023,1025,1028,1029,1032,1043 'sensit':967 'separ':122 'servic':40 'set':311,587,830 'shard':948 'share':134 'singl':23,669,779 'single-t':22,778 'sk':99,109,133,189,200,227,236,271,295,308,339,370,403,462,487,492,552,584,757 'skill' 'skill-dynamodb' 'slow':992 'smith':323 'solut':860,940,995 'sort':97,358 'sorting/filtering':759 'source-itsmostafa' 'spars':768 'start':911 'start-tim':910 'statist':898,938 'status':387 'storag':9 'strong':137 'structur':56 'sum':939 'support':49 'symptom':843 'sz':924,935 't10':283,328 'tabl':13,24,57,135,168,176,178,216,218,260,501,503,611,619,621,626,628,634,641,643,648,651,696,780,859,1001 'table-nam':177,502 'table.batch':446 'table.delete':333 'table.get':289 'table.put':265,546 'table.query':349,362,378,394 'table.scan':1027 'table.update':302,578 'table.wait':243 'table/index':977 'table/indexes':636 'tablenam':219,419,907 'throttl':842,856 'throughput':123,136 'time':866,912,927 'topic-agent-skills' 'topic-agentic-ai' 'topic-aws' 'topic-claude-code' 'topic-claude-skills' 'topic-codex' 'topic-coding-agents' 'total':1024,1031 'totalseg':1030 'traffic':149,156,852 'transact':725,728,733,736 'transact-get-item':732 'transact-write-item':724 'transfer':812 'tri':545 'troubleshoot':27,80,81,841 'ttl':831 'type':88,114,971 'u':918,929 'uneven':848 'unpredict':148 'updat':300,314,316,324,500,517,633,674,676 'update-item':673 'update-t':499,632 'updateexpress':310,586 'use':10,143,160,751,767,793,807,815,822,862,946,996,1008 'user':180,220,262,269,293,306,337,354,367,383,399,420,427,460,466,482,485,490,505,550,582,909 'valu':52,908,962 'variabl':820 'verifi':960 'version':577,590,591,594,596,607 'within':104 'workload':806,821,829 'write':15,440,532,706,709,726,729,947 'writer':447 'y':919,930","prices":[{"id":"548ce024-3f65-4e41-988d-667350993bd5","listingId":"4f31a75e-42e3-4c1c-ac9a-e20a27ff8214","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"itsmostafa","category":"aws-agent-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:55:39.383Z"}],"sources":[{"listingId":"4f31a75e-42e3-4c1c-ac9a-e20a27ff8214","source":"github","sourceId":"itsmostafa/aws-agent-skills/dynamodb","sourceUrl":"https://github.com/itsmostafa/aws-agent-skills/tree/main/skills/dynamodb","isPrimary":false,"firstSeenAt":"2026-04-18T21:55:39.383Z","lastSeenAt":"2026-05-03T00:52:58.360Z"}],"details":{"listingId":"4f31a75e-42e3-4c1c-ac9a-e20a27ff8214","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"itsmostafa","slug":"dynamodb","github":{"repo":"itsmostafa/aws-agent-skills","stars":1085,"topics":["agent-skills","agentic-ai","aws","claude-code","claude-skills","codex","coding-agents"],"license":"mit","html_url":"https://github.com/itsmostafa/aws-agent-skills","pushed_at":"2026-04-27T09:45:24Z","description":"AWS Skills for Agents","skill_md_sha":"536cf069997feffe034f7e895eb508167f7713be","skill_md_path":"skills/dynamodb/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/itsmostafa/aws-agent-skills/tree/main/skills/dynamodb"},"layout":"multi","source":"github","category":"aws-agent-skills","frontmatter":{"name":"dynamodb","description":"AWS DynamoDB NoSQL database for scalable data storage. Use when designing table schemas, writing queries, configuring indexes, managing capacity, implementing single-table design, or troubleshooting performance issues."},"skills_sh_url":"https://skills.sh/itsmostafa/aws-agent-skills/dynamodb"},"updatedAt":"2026-05-03T00:52:58.360Z"}}