DynamoDB环境搭建 #

一、环境搭建概述 #

DynamoDB 提供多种开发和测试环境选择:

环境 适用场景 特点
AWS DynamoDB 生产环境 完全托管,真实环境
DynamoDB Local 本地开发 免费,离线可用
DynamoDB Accelerator 测试环境 AWS托管测试

二、AWS账户准备 #

2.1 创建AWS账户 #

text
步骤:
1. 访问 https://aws.amazon.com
2. 点击"创建AWS账户"
3. 填写账户信息
4. 选择支持计划(基础版免费)
5. 完成身份验证

2.2 IAM用户配置 #

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:*"
      ],
      "Resource": "*"
    }
  ]
}

2.3 访问密钥 #

text
获取访问密钥:
1. 登录AWS控制台
2. 进入IAM服务
3. 创建访问密钥
4. 保存Access Key ID和Secret Access Key

三、AWS CLI配置 #

3.1 安装AWS CLI #

macOS:

bash
# 使用Homebrew
brew install awscli

# 或使用安装包
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /

Windows:

powershell
# 使用MSI安装包
msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi

# 或使用Chocolatey
choco install awscli

Linux:

bash
# Ubuntu/Debian
sudo apt update
sudo apt install awscli

# CentOS/RHEL
sudo yum install awscli

# 或使用pip
pip install awscli

3.2 配置AWS CLI #

bash
# 配置凭证
aws configure

# 按提示输入:
AWS Access Key ID [None]: YOUR_ACCESS_KEY
AWS Secret Access Key [None]: YOUR_SECRET_KEY
Default region name [None]: us-east-1
Default output format [None]: json

3.3 验证配置 #

bash
# 查看配置
aws configure list

# 测试DynamoDB连接
aws dynamodb list-tables

# 查看当前身份
aws sts get-caller-identity

3.4 多配置文件 #

bash
# 添加新配置
aws configure --profile dev

# 使用指定配置
aws dynamodb list-tables --profile dev

# 配置文件位置
~/.aws/credentials
~/.aws/config

credentials文件示例:

ini
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[dev]
aws_access_key_id = AKIAI44QH8DHBEXAMPLE
aws_secret_access_key = je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY

config文件示例:

ini
[default]
region = us-east-1
output = json

[profile dev]
region = us-west-2
output = json

四、DynamoDB Local本地环境 #

4.1 下载安装 #

方式一:直接下载

bash
# 下载DynamoDB Local
mkdir dynamodb-local
cd dynamodb-local
wget https://s3.us-west-2.amazonaws.com/dynamodb-local/dynamodb_local_latest.tar.gz

# 解压
tar -xzf dynamodb_local_latest.tar.gz

方式二:Docker(推荐)

bash
# 拉取镜像
docker pull amazon/dynamodb-local

# 运行容器
docker run -p 8000:8000 amazon/dynamodb-local

# 后台运行
docker run -d -p 8000:8000 --name dynamodb-local amazon/dynamodb-local

# 持久化数据
docker run -d -p 8000:8000 \
  -v $(pwd)/dynamodb-data:/home/dynamodblocal/data \
  --name dynamodb-local \
  amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb -dbPath ./data

4.2 启动DynamoDB Local #

bash
# Java方式启动
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb

# 常用参数
java -jar DynamoDBLocal.jar \
  -sharedDb \           # 共享数据库
  -inMemory \           # 内存模式
  -port 8000 \          # 端口
  -dbPath ./data        # 数据目录

4.3 连接本地DynamoDB #

bash
# 使用AWS CLI连接本地
aws dynamodb list-tables \
  --endpoint-url http://localhost:8000

# 创建表
aws dynamodb create-table \
  --table-name Users \
  --attribute-definitions \
    AttributeName=UserId,AttributeType=S \
  --key-schema \
    AttributeName=UserId,KeyType=HASH \
  --billing-mode PAY_PER_REQUEST \
  --endpoint-url http://localhost:8000

五、SDK环境配置 #

5.1 Node.js SDK #

bash
# 安装SDK
npm install @aws-sdk/client-dynamodb
npm install @aws-sdk/lib-dynamodb

# 或安装v2版本
npm install aws-sdk

JavaScript示例:

javascript
// ES Modules (v3)
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';

const client = new DynamoDBClient({
  region: 'us-east-1',
  endpoint: 'http://localhost:8000',  // 本地开发
  credentials: {
    accessKeyId: 'local',
    secretAccessKey: 'local'
  }
});

const docClient = DynamoDBDocumentClient.from(client);
javascript
// CommonJS (v2)
const AWS = require('aws-sdk');

const dynamodb = new AWS.DynamoDB({
  region: 'us-east-1',
  endpoint: 'http://localhost:8000'
});

const docClient = new AWS.DynamoDB.DocumentClient({
  region: 'us-east-1',
  endpoint: 'http://localhost:8000'
});

5.2 Python SDK (Boto3) #

bash
# 安装Boto3
pip install boto3

Python示例:

python
import boto3

# 连接AWS DynamoDB
dynamodb = boto3.resource('dynamodb', region_name='us-east-1')

# 连接本地DynamoDB
dynamodb_local = boto3.resource(
    'dynamodb',
    region_name='us-east-1',
    endpoint_url='http://localhost:8000'
)

# 使用客户端
client = boto3.client('dynamodb', region_name='us-east-1')

5.3 Java SDK #

Maven依赖:

xml
<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>dynamodb</artifactId>
    <version>2.20.0</version>
</dependency>

Java示例:

java
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;

DynamoDbClient client = DynamoDbClient.builder()
    .region(Region.US_EAST_1)
    .endpointOverride(URI.create("http://localhost:8000"))
    .build();

5.4 Go SDK #

bash
# 安装SDK
go get github.com/aws/aws-sdk-go-v2/service/dynamodb
go get github.com/aws/aws-sdk-go-v2/service/dynamodbtypes

Go示例:

go
package main

import (
    "context"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/dynamodb"
)

func main() {
    cfg, err := config.LoadDefaultConfig(context.TODO(),
        config.WithRegion("us-east-1"),
    )
    if err != nil {
        panic(err)
    }
    
    client := dynamodb.NewFromConfig(cfg)
}

六、开发工具配置 #

6.1 VS Code扩展 #

text
推荐扩展:
├── AWS Toolkit
├── DynamoDB Explorer
└── YAML (for CloudFormation)

6.2 NoSQL Workbench #

下载安装:

text
1. 访问 https://aws.amazon.com/dynamodb/nosql-workbench/
2. 下载对应平台版本
3. 安装并启动

功能特点:

text
NoSQL Workbench功能:
├── 可视化数据建模
├── 查询构建器
├── 数据浏览
├── 导入/导出数据
└── 连接本地或云端DynamoDB

6.3 DynamoDB Admin (开源工具) #

bash
# 安装
npm install -g dynamodb-admin

# 运行
DYNAMO_ENDPOINT=http://localhost:8000 dynamodb-admin

# 访问
# http://localhost:8001

七、环境变量配置 #

7.1 常用环境变量 #

bash
# AWS凭证
export AWS_ACCESS_KEY_ID=your_access_key
export AWS_SECRET_ACCESS_KEY=your_secret_key
export AWS_SESSION_TOKEN=your_session_token  # 临时凭证

# 区域配置
export AWS_DEFAULT_REGION=us-east-1

# 配置文件
export AWS_PROFILE=dev

# 本地DynamoDB
export DYNAMO_ENDPOINT=http://localhost:8000

7.2 使用.env文件 #

bash
# .env文件
AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_key
AWS_DEFAULT_REGION=us-east-1
DYNAMO_ENDPOINT=http://localhost:8000
javascript
// Node.js加载环境变量
require('dotenv').config();

const client = new DynamoDBClient({
  region: process.env.AWS_DEFAULT_REGION,
  endpoint: process.env.DYNAMO_ENDPOINT
});

八、测试环境配置 #

8.1 使用LocalStack #

bash
# 安装LocalStack
pip install localstack

# 启动
localstack start

# 或使用Docker
docker run -d -p 4566:4566 localstack/localstack

# 连接
aws dynamodb list-tables --endpoint-url http://localhost:4566

8.2 测试配置示例 #

javascript
// Jest测试配置
const { DynamoDBClient } = require('@aws-sdk/client-dynamodb');

const testConfig = {
  region: 'us-east-1',
  endpoint: process.env.DYNAMO_ENDPOINT || 'http://localhost:8000',
  credentials: {
    accessKeyId: 'test',
    secretAccessKey: 'test'
  }
};

beforeAll(async () => {
  // 创建测试表
});

afterAll(async () => {
  // 清理测试数据
});

九、最佳实践 #

9.1 环境隔离 #

text
推荐配置:
├── 开发环境:DynamoDB Local
├── 测试环境:AWS测试账户
├── 预发布环境:AWS预发布账户
└── 生产环境:AWS生产账户

9.2 配置管理 #

javascript
// 配置管理示例
const getConfig = () => {
  const env = process.env.NODE_ENV || 'development';
  
  const configs = {
    development: {
      endpoint: 'http://localhost:8000',
      region: 'us-east-1'
    },
    test: {
      endpoint: process.env.DYNAMO_ENDPOINT,
      region: 'us-east-1'
    },
    production: {
      region: process.env.AWS_REGION || 'us-east-1'
    }
  };
  
  return configs[env];
};

9.3 安全建议 #

text
安全最佳实践:
├── 不要在代码中硬编码凭证
├── 使用IAM角色(EC2/Lambda)
├── 定期轮换访问密钥
├── 使用最小权限原则
└── 启用MFA保护

十、常见问题 #

10.1 连接问题 #

bash
# 检查AWS CLI配置
aws configure list

# 测试网络连接
aws dynamodb list-tables --debug

# 检查本地DynamoDB
curl http://localhost:8000

10.2 权限问题 #

bash
# 检查用户权限
aws iam get-user
aws iam list-attached-user-policies --user-name your-username

# 测试DynamoDB权限
aws dynamodb describe-limits

10.3 区域问题 #

bash
# 查看可用区域
aws ec2 describe-regions

# 切换区域
aws configure set region us-west-2

十一、总结 #

环境搭建要点:

环境 配置方式 适用场景
AWS云端 AWS CLI配置 生产环境
DynamoDB Local Docker/Java 本地开发
LocalStack Docker 集成测试

下一步,让我们学习DynamoDB的核心概念!

最后更新:2026-03-27