Files
openclaw-setup-cn/configure-aws-bedrock.sh
Rick Mu 1ee3a97ebf Add AWS Bedrock configuration script with manual setup
- Manual provider and model configuration (not auto-discovery)
- Supports latest Claude 4.5/4.6 models on AWS Bedrock
- Includes Opus 4.6, Opus 4.5, Sonnet 4.5, and Haiku 4.5
- Auto-restarts gateway after configuration
- Tests connection with health check and test message
- Uses bedrock-converse-stream API with aws-sdk auth

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-13 17:34:37 +11:00

305 lines
11 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
# ─────────────────────────────────────────────
# OpenClaw AWS Bedrock 配置脚本
# ─────────────────────────────────────────────
# 颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
BOLD='\033[1m'
NC='\033[0m' # 无颜色
info() { echo -e "${BLUE}[信息]${NC} $*"; }
success() { echo -e "${GREEN}[完成]${NC} $*"; }
warn() { echo -e "${YELLOW}[警告]${NC} $*"; }
error() { echo -e "${RED}[错误]${NC} $*"; exit 1; }
header() {
echo ""
echo -e "${BOLD}========================================${NC}"
echo -e "${BOLD} OpenClaw AWS Bedrock 配置器${NC}"
echo -e "${BOLD}========================================${NC}"
echo ""
}
header
# ─────────────────────────────────────────────
# 检查是否已配置
# ─────────────────────────────────────────────
SKIP_INPUT=false
if [[ -f ~/.openclaw/.env ]] && grep -q "AWS_ACCESS_KEY_ID" ~/.openclaw/.env 2>/dev/null; then
warn "检测到已存在 AWS 凭证配置"
echo -e "${YELLOW}是否使用现有凭证? [Y/n]${NC}"
read -r USE_EXISTING
if [[ "$USE_EXISTING" != "n" && "$USE_EXISTING" != "N" ]]; then
SKIP_INPUT=true
# 加载现有凭证
source ~/.openclaw/.env
success "使用现有凭证 (Access Key: ${AWS_ACCESS_KEY_ID:0:20}...)"
fi
fi
# ─────────────────────────────────────────────
# 步骤 1: 获取 AWS 访问密钥
# ─────────────────────────────────────────────
if [[ "$SKIP_INPUT" == false ]]; then
info "请输入你的 AWS Access Key ID"
echo -e "${YELLOW}(从 https://console.aws.amazon.com/bedrock/home#/api-keys 获取)${NC}"
read -r AWS_ACCESS_KEY_ID
if [[ -z "$AWS_ACCESS_KEY_ID" ]]; then
error "AWS Access Key ID 不能为空"
fi
info "请输入你的 AWS Secret Access Key"
read -sr AWS_SECRET_ACCESS_KEY
echo ""
if [[ -z "$AWS_SECRET_ACCESS_KEY" ]]; then
error "AWS Secret Access Key 不能为空"
fi
info "请输入 AWS 区域 (默认: us-west-2)"
read -r AWS_REGION
AWS_REGION=${AWS_REGION:-us-west-2}
success "已获取 AWS 凭证"
fi
# ─────────────────────────────────────────────
# 步骤 1.5: 创建环境变量文件
# ─────────────────────────────────────────────
if [[ "$SKIP_INPUT" == false ]]; then
info "正在创建 ~/.openclaw/.env 文件..."
mkdir -p ~/.openclaw
# 备份现有的 .env 文件
if [[ -f ~/.openclaw/.env ]]; then
cp ~/.openclaw/.env ~/.openclaw/.env.backup.$(date +%s)
warn "已备份现有 .env 文件"
fi
cat > ~/.openclaw/.env <<EOF
# AWS Bedrock Credentials
export AWS_ACCESS_KEY_ID="${AWS_ACCESS_KEY_ID}"
export AWS_SECRET_ACCESS_KEY="${AWS_SECRET_ACCESS_KEY}"
export AWS_REGION="${AWS_REGION}"
EOF
success "已创建环境变量文件"
else
info "跳过环境变量文件创建(使用现有配置)"
fi
# ─────────────────────────────────────────────
# 步骤 2: 配置 openclaw.json
# ─────────────────────────────────────────────
info "正在配置 ~/.openclaw/openclaw.json..."
mkdir -p ~/.openclaw
# 备份现有配置
if [[ -f ~/.openclaw/openclaw.json ]]; then
cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.backup.$(date +%s)
warn "已备份现有 openclaw.json 文件"
fi
# 写入配置 (手动配置)
cat > ~/.openclaw/openclaw.json <<EOF
{
"gateway": {
"mode": "local"
},
"models": {
"providers": {
"amazon-bedrock": {
"baseUrl": "https://bedrock-runtime.${AWS_REGION}.amazonaws.com",
"api": "bedrock-converse-stream",
"auth": "aws-sdk",
"models": [
{
"id": "global.anthropic.claude-opus-4-6-v1",
"name": "Claude Opus 4.6 (Bedrock)",
"reasoning": true,
"input": ["text", "image"],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 8192
},
{
"id": "global.anthropic.claude-opus-4-5-20251001-v1:0",
"name": "Claude Opus 4.5 (Bedrock)",
"reasoning": true,
"input": ["text", "image"],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 8192
},
{
"id": "global.anthropic.claude-sonnet-4-5-20250929-v1:0",
"name": "Claude Sonnet 4.5 (Bedrock)",
"reasoning": true,
"input": ["text", "image"],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 8192
},
{
"id": "global.anthropic.claude-haiku-4-5-20251001-v1:0",
"name": "Claude Haiku 4.5 (Bedrock)",
"reasoning": false,
"input": ["text", "image"],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 8192
}
]
}
}
},
"agents": {
"defaults": {
"model": {
"primary": "amazon-bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0"
}
}
}
}
EOF
success "已配置 openclaw.json"
# ─────────────────────────────────────────────
# 步骤 3: 完成
# ─────────────────────────────────────────────
echo ""
echo -e "${GREEN}${BOLD}========================================${NC}"
echo -e "${GREEN}${BOLD} 配置完成!${NC}"
echo -e "${GREEN}${BOLD}========================================${NC}"
echo ""
echo -e " ${BOLD}配置摘要:${NC}"
echo -e " Provider: ${BLUE}AWS Bedrock (手动配置)${NC}"
echo -e " Region: ${BLUE}${AWS_REGION}${NC}"
echo -e " 默认模型: ${BLUE}Claude Sonnet 4.5${NC}"
echo -e " 已配置模型:"
echo -e "${BLUE}Claude Opus 4.6 (amazon-bedrock/global.anthropic.claude-opus-4-6-v1)${NC}"
echo -e "${BLUE}Claude Opus 4.5 (amazon-bedrock/global.anthropic.claude-opus-4-5-20251001-v1:0)${NC}"
echo -e "${BLUE}Claude Sonnet 4.5 (amazon-bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0)${NC}"
echo -e "${BLUE}Claude Haiku 4.5 (amazon-bedrock/global.anthropic.claude-haiku-4-5-20251001-v1:0)${NC}"
echo ""
echo -e " ${BOLD}所需 IAM 权限:${NC}"
echo -e " ${YELLOW}确保你的 AWS 凭证具有以下权限:${NC}"
echo -e "${BLUE}bedrock:InvokeModel${NC}"
echo -e "${BLUE}bedrock:InvokeModelWithResponseStream${NC}"
echo -e " ${YELLOW}或使用托管策略:${BLUE}AmazonBedrockFullAccess${NC}"
echo ""
echo -e " ${BOLD}使用方法:${NC}"
echo ""
echo -e " ${BLUE}# 加载 AWS 凭证到环境变量${NC}"
echo -e " ${BLUE}source ~/.openclaw/.env${NC}"
echo ""
echo -e " ${BLUE}# 启动 OpenClaw TUI${NC}"
echo -e " ${BLUE}openclaw tui${NC}"
echo ""
echo -e " ${BOLD}测试命令:${NC}"
echo ""
echo -e " ${BLUE}# 检查 Gateway 健康状态${NC}"
echo -e " ${BLUE}openclaw gateway health${NC}"
echo ""
echo -e " ${BLUE}# 列出 AWS Bedrock 模型${NC}"
echo -e " ${BLUE}openclaw models list --provider amazon-bedrock${NC}"
echo ""
echo -e " ${BLUE}# 测试发送消息${NC}"
echo -e " ${BLUE}openclaw agent --local --message \"Hello, test connection\"${NC}"
echo ""
echo -e " ${BOLD}注意:${NC}"
echo -e " - 使用前必须先运行 ${BLUE}source ~/.openclaw/.env${NC}"
echo -e " - 建议将 ${BLUE}source ~/.openclaw/.env${NC} 添加到 ~/.bashrc 或 ~/.zshrc"
echo -e " - 确保在 AWS Bedrock 控制台启用了这些模型的访问权限"
echo -e " - 如需添加更多模型,编辑 ${BLUE}~/.openclaw/openclaw.json${NC}"
echo ""
# ─────────────────────────────────────────────
# 步骤 4: 重启 Gateway
# ─────────────────────────────────────────────
info "正在重启 OpenClaw Gateway 以应用新配置..."
# 先加载环境变量
source ~/.openclaw/.env
# 重启 gateway
if openclaw gateway restart 2>/dev/null; then
success "Gateway 已重启"
else
warn "Gateway 重启失败,请手动运行: ${BLUE}openclaw gateway restart${NC}"
fi
echo ""
# ─────────────────────────────────────────────
# 步骤 5: 测试连接
# ─────────────────────────────────────────────
info "正在测试 AWS Bedrock 连接..."
# 等待 gateway 完全启动
sleep 2
# 检查 gateway 健康状态
if openclaw gateway health --timeout 5000 >/dev/null 2>&1; then
success "Gateway 运行正常"
else
warn "Gateway 健康检查失败"
fi
# 列出配置的模型
info "检查已配置的 AWS Bedrock 模型..."
echo ""
openclaw models list --provider amazon-bedrock 2>/dev/null || warn "无法列出模型,请检查配置"
echo ""
# 测试实际连接
info "测试实际连接到 AWS Bedrock..."
echo ""
if openclaw agent --session-id test --message "Say OK" --local 2>/dev/null; then
echo ""
success "AWS Bedrock 连接测试成功!"
else
warn "AWS Bedrock 连接测试失败,请检查:"
echo -e " • AWS 凭证是否正确"
echo -e " • AWS Bedrock 模型访问是否已启用"
echo -e " • IAM 权限是否配置正确"
fi
echo ""
echo -e "${GREEN}${BOLD}✓ 测试完成${NC}"
echo ""