Home Assistant 中 route53.update_records 动作详解:手动触发 AWS Route53 DNS 记录更新
2026/9/17 19:10:31 网站建设 项目流程

Home Assistant 中 route53.update_records 动作详解:手动触发 AWS Route53 DNS 记录更新

【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io

导读

route53.update_records是 Home Assistant 的 AWS Route53 集成提供的"更新记录"动作,用于将你在 AWS Route53 中配置的 DNS 记录立即更新为当前公网 IP 地址。本指南将带你完整掌握该动作的 UI 与 YAML 两种调用方式、集成所需的 AWS IAM 权限与配置项,并提供一个"公网 IP 变化即自动更新 DNS"的实战自动化方案。阅读后你将能够独立完成从 AWS 侧权限准备、Home Assistant 配置到自动化触发更新的全流程。

动作概述:按需更新,无需等待定时任务

route53.update_records的核心作用是立即将你的 AWS Route53 DNS 记录更新为当前公网 IP 地址。它解决了一个实际痛点:AWS Route53 集成默认每小时自动执行一次记录更新,如果恰好刚完成一次更新后公网 IP 发生变化(例如 ISP 重新分配了地址),你需要等待最多一小时才能让 DNS 记录指向新地址。此时手动调用该动作即可立刻应用变更。

需要特别说明的两点(原文 "Good to know"):

  • 集成本身每一小时自动更新一次记录,该动作只是提供按需触发的入口;
  • 动作更新的是你在集成配置中指定的那批记录(见下文records配置项),而非全部 Route53 资源。

前置条件:集成与 AWS 侧权限准备

在动作可用之前,必须先完成 AWS Route53 集成 的配置。该集成自 Home Assistant 0.81 版本引入(ha_release: 0.81),属于 Network 类别、Cloud Push 物联网类型,负责将 Route53 DNS 记录与你的公网 IP 保持同步,其中公网 IP 通过 ipify.org 的 API 获取。

AWS 侧需要完成以下步骤:

  1. 创建托管区域(Hosted Zone):在 Route53 中为你拥有的域名创建托管区域,文档示例使用home.yourdomain.com
  2. 记录 Hosted Zone ID:创建完成后记下该域名的 Hosted Zone ID,后续 IAM 配置与 Home Assistant 集成配置都需要用到。
  3. 创建最小权限 IAM 策略:仅允许对该域名执行更新与查询操作,不给 AWS 账户其他权限。官方给出的 IAM 策略示例(请务必把Resource行中的YOURZONEIDGOESHERE替换为你的 Zone ID):
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "route53:GetHostedZone", "route53:ChangeResourceRecordSets", "route53:ListResourceRecordSets" ], "Resource": "arn:aws:route53:::hostedzone/YOURZONEIDGOESHERE" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "route53:TestDNSAnswer", "Resource": "*" } ] }

从策略可以看出动作实际依赖的 AWS API:ChangeResourceRecordSets(提交记录变更)、GetHostedZoneListResourceRecordSets(查询托管区域与现有记录)、TestDNSAnswer(验证解析结果)。这正是"最小权限"原则的落地——只授予更新与查询指定域名的能力。

  1. 创建用户并附加策略:新建名为homeassistant的 IAM 用户,将上述策略附加到该用户,使其只能管理这个 DNS 资源。
  2. 生成访问密钥:在该用户的安全凭证(Security Credentials)选项卡下创建一组访问密钥(Access Key),用于填入后续集成定义的 YAML 中。

集成配置:动作所操作的记录从何而来

将以下配置加入configuration.yaml(配置完成后需重启 Home Assistant):

# Example configuration.yaml entry route53: aws_access_key_id: ABC123 aws_secret_access_key: DEF456 zone: ZONEID678 domain: yourdomain.com records: - vpn - hassio - home

各配置项说明:

配置项是否必填类型说明
aws_access_key_idstring具备该域名 IAM 访问权限的 AWS 访问密钥 ID
aws_secret_access_keystring对应账户的 AWS 密钥访问密钥
zonestring该域名在 Route53 中的 AWS Zone ID
domainstring在 Route53 中的域名名称
recordslist需要更新的记录列表;使用.表示更新默认记录(即yourdomain.com本身)
ttlintegerDNS 记录的 TTL 值,默认300

关键理解点:

  • records列表中的每个条目会被拼接到domain下形成完整记录名。例如上述配置会更新vpn.yourdomain.comhassio.yourdomain.comhome.yourdomain.com三个记录。
  • 若想更新根域名的 A 记录,在records中写入.即可。
  • ttl默认 300 秒(5 分钟),决定了 DNS 缓存刷新速度;公网 IP 变化较频繁的场景可适当调低,但也要权衡 DNS 查询压力。

在 UI 中使用该动作(可视化方式)

如果偏好可视化构建自动化与脚本,可按以下步骤操作(此步骤在动作文档中有明确说明):

  1. 进入Settings > Automations & scenes(自动化与场景)。
  2. 打开现有的自动化或脚本,或选择Create新建。
  3. 如果是新建自动化,在When(何时)部分添加触发器;脚本则无需触发器。
  4. Then do(然后执行)部分选择Add action(添加动作)。
  5. 在搜索框中搜索并选择Update records
  6. 点击Save(保存)。

特别说明:该动作不支持 targets(目标对象)。在 UI 中你不会被提示选择区域(area)、设备(device)、实体(entity)或标签(label)——这一点与大多数支持目标选择域的动作(参考 targets.md 中描述的实体/设备/区域/楼层/标签目标机制)不同,因为该动作的操作对象是集成配置中预先定义好的 DNS 记录集合,而非某个实体。

该动作在 UI 中没有额外选项,直接执行即可。

在 YAML 中使用该动作(底层技术参考)

如果直接在 YAML 中编写自动化或脚本,动作的引用方式如下:

action: | action: route53.update_records

即服务调用格式action: route53.update_records,执行后即用当前公网 IP 更新 Route53 DNS 记录。与 UI 版本一致,YAML 中同样没有额外选项。

调用该动作的最简单方式是通过 Home Assistant 的开发者工具(Settings > Tools > Actions)搜索该动作并点击Perform action直接执行,无需编写任何 YAML,即可在真实环境观察效果。

实战示例:公网 IP 变化时自动更新 DNS 记录

动作文档给出的经典场景是:用传感器追踪公网 IP,一旦地址变化立即更新 Route53 记录,避免等待最长一小时的定时任务。

自动化逻辑:

  • 触发器:公网 IP 传感器状态变化
  • 动作:更新记录(route53.update_records

完整 YAML 示例:

automation: | alias: "Update Route53 records on IP change" triggers: - trigger: state entity_id: sensor.public_ip actions: - action: route53.update_records

该示例的触发器监听sensor.public_ip(例如由wundergroundddns或其他 IP 检测集成提供的公网 IP 实体)的state变化;一旦检测到 IP 地址改变,立即执行route53.update_records将集成配置中的所有记录更新为新地址。需要说明的是,示例中的sensor.public_ip实体需要你根据实际安装的 IP 检测集成替换为真实实体 ID。

你可以将同样的动作嵌入到脚本中,或与其他触发条件组合(例如网络接口重新拨号、定时巡检等),实现更符合自己网络环境的 DNS 自动同步策略。

常见问题排查

  • 动作执行后记录未更新:优先检查 AWS 侧 IAM 权限是否完整(特别是route53:ChangeResourceRecordSets是否作用于正确的 Zone ID),以及configuration.yaml中的zonedomainrecords是否与 Route53 控制台中的实际值一致。
  • 如何验证更新结果:可在执行动作后,用route53:TestDNSAnswer(IAM 策略中已包含该权限)或系统自带的dig/nslookup命令查询记录,确认解析结果已指向新 IP。
  • 找不到该动作:确认 AWS Route53 集成已成功加载(route53:配置存在且 Home Assistant 已重启),动作由集成动态注册,集成未加载时动作不会出现。

总结

route53.update_records是 AWS Route53 集成"每小时自动同步"机制的有力补充,让你能够在公网 IP 变化后立即完成 DNS 记录更新。配合最小权限 IAM 策略、records/ttl等配置项以及"IP 变化即触发"的自动化模式,你可以构建一套准实时、安全的最小权限 DNS 动态更新方案。该动作在 UI 与 YAML 中均无附加选项、不支持 targets,操作对象即集成配置中声明的记录集合——理解这一点,就能准确预判动作的行为边界。

【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询