通过AWS命令行工具(CLI)管理DNS记录,可快速实现自动化操作。本教程将涵盖从安装配置到增删查改记录的完整流程。


准备工作

1. 安装AWS CLI

适用系统:

  • Linux/macOS

    bashcurl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
    unzip awscliv2.zip
    sudo ./aws/install
  • Windows
    下载 MSI安装包 并运行

如果有安装scoop,也可以直接通过scoop安装。Scoop

验证安装:

aws --version

2. 配置访问凭证

aws configure

按提示输入以下信息(从IAM控制台获取):

  • AWS Access Key ID:类似AKIAxxxxxxxx

  • AWS Secret Access Key:类似wJalrxxxxxxxx

  • Default region name:推荐us-east-1

  • Default output format:建议json

💡 安全提示:建议为CLI创建仅具有Route53FullAccess权限的IAM用户,避免使用root账户密钥。


核心操作指南

1. 列出所有托管区域

aws route53 list-hosted-zones

输出示例:

json{
  "HostedZones": [{
    "Id": "/hostedzone/Z1PA6795EXAMPLE",
    "Name": "example.com.",
    "ResourceRecordSetCount": 5
  }]
}

关键操作:

  • 记录Id字段(Z1PA6795EXAMPLE即为托管区域ID)

  • 使用jq工具快速提取ID:

    aws route53 list-hosted-zones | jq -r '.HostedZones[] | .Id'

2. 添加DNS记录

操作流程:

  1. 创建change-record.json文件:

{
  "Changes": [{
    "Action": "CREATE",
    "ResourceRecordSet": {
      "Name": "app.example.com",
      "Type": "A",
      "TTL": 300,
      "ResourceRecords": [{ "Value": "192.0.2.1" }]
    }
  }]
}
  1. 执行命令进行添加:

aws route53 change-resource-record-sets --hosted-zone-id Z1PA6795EXAMPLE --change-batch file://change-record.json

重要说明:

  • 支持所有记录类型(CNAME、MX等),修改Type即可

  • 批量操作:在Changes数组中可同时添加多个记录

  • 变更返回Pending状态需等待传播(通常<60秒)


3. 删除DNS记录

  1. 修改JSON文件:

{
  "Changes": [{
    "Action": "DELETE",
    "ResourceRecordSet": {
      "Name": "app.example.com",
      "Type": "A",
      "TTL": 300,
      "ResourceRecords": [{ "Value": "192.0.2.1" }]
    }
  }]
}
  1. 使用相同命令执行删除:

aws route53 change-resource-record-sets --hosted-zone-id Z1PA6795EXAMPLE --change-batch file://change-record.json

⚠️ 删除注意事项:

  • 必须与现有记录完全匹配(包括TTL和值)

  • 建议先通过查询确认记录准确信息


4. 记录查询技巧

查询全部记录:

aws route53 list-resource-record-sets --hosted-zone-id Z1PA6795EXAMPLE

精准过滤记录:

aws route53 list-resource-record-sets --hosted-zone-id Z1PA6795EXAMPLE --query "ResourceRecordSets[?Name=='app.example.com.']"

高级技巧

  1. 批量导入/导出
    结合jq处理JSON文件,可实现记录集的批量迁移

  2. 变更跟踪
    通过get-change命令追踪操作状态:

    aws route53 get-change --id C3B62EXAMPLE
  3. 别名记录配置
    添加ELB等服务的别名记录:

{
  "AliasTarget": {
    "HostedZoneId": "Z35SXDOTEXAMPLE",
    "DNSName": "dualstack.my-elb.us-east-1.amazonaws.com.",
    "EvaluateTargetHealth": false
  }
}

常见问题排查

权限错误
确认IAM用户具有route53:ChangeResourceRecordSets权限

Invalid JSON格式
使用jsonlint验证文件格式

记录已存在
删除前需确保记录完全匹配,包括TTL和值


通过AWS CLI操作Route 53,开发者可轻松实现DNS管理的自动化。建议结合Shell脚本或CI/CD工具,构建高效的基础设施管理流程。

延伸阅读: