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 侧需要完成以下步骤:
- 创建托管区域(Hosted Zone):在 Route53 中为你拥有的域名创建托管区域,文档示例使用
home.yourdomain.com。 - 记录 Hosted Zone ID:创建完成后记下该域名的 Hosted Zone ID,后续 IAM 配置与 Home Assistant 集成配置都需要用到。
- 创建最小权限 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(提交记录变更)、GetHostedZone与ListResourceRecordSets(查询托管区域与现有记录)、TestDNSAnswer(验证解析结果)。这正是"最小权限"原则的落地——只授予更新与查询指定域名的能力。
- 创建用户并附加策略:新建名为
homeassistant的 IAM 用户,将上述策略附加到该用户,使其只能管理这个 DNS 资源。 - 生成访问密钥:在该用户的安全凭证(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_id | 是 | string | 具备该域名 IAM 访问权限的 AWS 访问密钥 ID |
aws_secret_access_key | 是 | string | 对应账户的 AWS 密钥访问密钥 |
zone | 是 | string | 该域名在 Route53 中的 AWS Zone ID |
domain | 是 | string | 在 Route53 中的域名名称 |
records | 是 | list | 需要更新的记录列表;使用.表示更新默认记录(即yourdomain.com本身) |
ttl | 否 | integer | DNS 记录的 TTL 值,默认300秒 |
关键理解点:
records列表中的每个条目会被拼接到domain下形成完整记录名。例如上述配置会更新vpn.yourdomain.com、hassio.yourdomain.com、home.yourdomain.com三个记录。- 若想更新根域名的 A 记录,在
records中写入.即可。 ttl默认 300 秒(5 分钟),决定了 DNS 缓存刷新速度;公网 IP 变化较频繁的场景可适当调低,但也要权衡 DNS 查询压力。
在 UI 中使用该动作(可视化方式)
如果偏好可视化构建自动化与脚本,可按以下步骤操作(此步骤在动作文档中有明确说明):
- 进入Settings > Automations & scenes(自动化与场景)。
- 打开现有的自动化或脚本,或选择Create新建。
- 如果是新建自动化,在When(何时)部分添加触发器;脚本则无需触发器。
- 在Then do(然后执行)部分选择Add action(添加动作)。
- 在搜索框中搜索并选择Update records。
- 点击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(例如由wunderground、ddns或其他 IP 检测集成提供的公网 IP 实体)的state变化;一旦检测到 IP 地址改变,立即执行route53.update_records将集成配置中的所有记录更新为新地址。需要说明的是,示例中的sensor.public_ip实体需要你根据实际安装的 IP 检测集成替换为真实实体 ID。
你可以将同样的动作嵌入到脚本中,或与其他触发条件组合(例如网络接口重新拨号、定时巡检等),实现更符合自己网络环境的 DNS 自动同步策略。
常见问题排查
- 动作执行后记录未更新:优先检查 AWS 侧 IAM 权限是否完整(特别是
route53:ChangeResourceRecordSets是否作用于正确的 Zone ID),以及configuration.yaml中的zone、domain、records是否与 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),仅供参考