为 Windows 实例设置时间 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

为 Windows 实例设置时间

对于许多服务器任务和进程来说,准确一致的时间参考是非常重要的。大多数系统日志包含时间戳,您可以用来确定问题发生的时间以及事件发生的顺序。如果您使用 Amazon CLI 或 Amazon 开发工具包从您的实例发送请求,这些工具会以您的名义签署请求。如果您的实例的日期和时间设置不正确,签名中的日期可能与请求的日期不匹配,进而导致 Amazon 拒绝请求。

Amazon 提供 Amazon Time Sync Service,该服务可从所有 EC2 实例访问,同样由其他 Amazon 服务使用。该服务在每个区域中使用一组与卫星连接的原子参考时钟,以通过网络时间协议 (NTP) 提供准确的当前协调世界时 (UTC) 全球标准时间读数。Amazon Time Sync Service 自动消除在 UTC 中添加的任何闰秒。

Amazon Time Sync Service 是通过 NTP (IP 地址为 169.254.169.123 IPv4 或 fd00:ec2::123 IPv6) 为 VPC 中运行的任何实例提供的。您的实例不需要访问 Internet,并且您不必配置安全组规则或网络 ACL 规则以允许进行访问。最新版本的 Amazon Windows AMI 默认情况下与 Amazon Time Sync Service 同步。

注意

本节中的示例使用 Amazon Time Sync Service 的 IPv4 地址:169.254.169.123。如果您要通过 IPv6 地址检索 EC2 实例的时间,请确保您使用 IPv6 地址:fd00:ec2::123。IPv6 地址仅可在 基于 Nitro 系统构建的实例 上访问。

我应该为我的实例使用 UTC 吗?

我们建议您为实例使用协调世界时 (UTC),以避免人为错误并促进您的 CloudWatch Logs、指标、本地日志和其他服务的同步。但是,您可以选择使用更适合您的需求的不同时区。

当您使用本地时区而不是 UTC 时,请确保考虑自动化的夏令时(如果适用)、代码、计划作业、故障排除活动(关联日志)等方面。

可以使用以下步骤通过命令提示符在实例上配置 Amazon Time Sync Service。或者,您也可以使用外部 NTP 源。有关 NTP 和公共时间源的更多信息,请访问 http://www.ntp.org/。实例必须能够访问互联网,外部 NTP 时间源才能正常工作。

对于 Linux 实例,请参阅为 Linux 实例设置时间

更改时区

默认情况下,Windows 实例设置为 UTC 时区。您可以更改时间以符合本地时区或您的网络中其他部分的时区。

更改实例上的时区

  1. 从实例打开命令提示符窗口。

  2. 确定将在实例上使用的时区。要获取时区的列表,请使用以下命令:

    tzutil /l

    该命令用以下格式返回所有可用时区的列表:

    display name time zone ID
  3. 查找要分配给该实例的时区 ID。

  4. 使用以下命令分配到替代时区:

    tzutil /s "Pacific Standard Time"

    新时区应立即生效。

注意

您可以使用以下命令分配推荐的 UTC 时区:

tzutil /s "UTC"

配置网络时间协议 (NTP)

Amazon 提供 Amazon Time Sync Service,该服务可从所有 EC2 实例访问,同样由其他 Amazon 服务使用。我们建议您配置实例以使用 Amazon Time Sync Service。该服务在每个 Amazon 区域中使用一组与卫星连接的原子参考时钟,以提供准确的当前协调世界时 (UTC) 全球标准时间读数。Amazon Time Sync Service 自动消除在 UTC 中添加的任何闰秒。该服务是在 169.254.169.123 IPv4 或 fd00:ec2::123 IPv6 IP 地址中为 VPC 中运行的任何实例提供的,您的实例无需访问 Internet 即可使用该服务。从 2018 年 8 月的发行版开始,Windows AMI 默认情况下使用 Amazon Time Sync Service。

验证 NTP 配置

  1. 从实例打开命令提示符窗口。

  2. 通过键入以下命令获取当前 NTP 配置:

    w32tm /query /configuration

    该命令返回 Windows 实例的当前配置设置。

  3. (可选) 通过键入以下命令获取当前配置的状态:

    w32tm /query /status

    该命令返回实例与 NTP 服务器同步的最后时间和轮询间隔等信息。

更改 NTP 服务器以使用 Amazon Time Sync Service

  1. 从命令提示符窗口运行以下命令:

    w32tm /config /manualpeerlist:169.254.169.123 /syncfromflags:manual /update
  2. 使用以下命令验证新设置:

    w32tm /query /configuration

    在返回的输出中,确认 NtpServer 显示 169.254.169.123 IP 地址。

如果需要,您可以将实例更改为使用一组不同的 NTP 服务器。例如,如果您的 Windows 实例无法访问 Internet,您可以将其配置为使用位于您的私有网络中的 NTP 服务器。如果您的实例位于域中,则应更改设置以使用域控制器作为时间源,从而避免时间偏移。必须配置实例的安全组以允许端口 123 (NTP) 上的出站 UDP 流量。

更改 NTP 服务器

  1. 从命令提示符窗口运行以下命令:

    w32tm /config /manualpeerlist:"NTP servers" /syncfromflags:manual /update

    其中,NTP 服务器是所使用的实例的 NTP 服务器的空格分隔列表。

  2. 使用以下命令验证新设置:

    w32tm /query /configuration

Amazon Windows AMI 的默认网络时间协议 (NTP) 设置

Amazon Machine Image (AMI) 通常符合现成的默认值,但在需要更改以便在 EC2 基础设施上正常工作的情况除外。以下设置已确定可在虚拟环境中正常工作,此外,还可将任何时间偏差保持在一秒的准确率内:

  • 更新间隔 – 控制时间服务调整系统时间准确性的频率。Amazon 将更新间隔配置为每两分钟发生一次。

  • NTP 服务器 – 从 2018 年 8 月版本开始,AMI 现在将默认使用 Amazon Time Sync Service。此时间服务可通过位于 169.254.169.123 终端节点的任何 EC2 区域访问。此外,0x9 标记指示时间服务充当客户端,并使用 SpecialPollInterval 来确定与所配置的时间服务器核查时间的频率。

  • 类型 –“NTP”指示服务将充当独立的 NTP 客户端而不是作为域的一部分。

  • 已启用和 InputProvider – 时间服务已启用并向操作系统提供时间。

  • 特殊轮询间隔 – 对照所配置的 NTP 服务器,每 900 秒(即 15 分钟)检查一次。

注册表路径 密钥名称 数据

HKLM:\System\CurrentControlSet\services\w32time\Config

UpdateInterval

120

HKLM:\System\CurrentControlSet\services\w32time\Parameters

NtpServer

169.254.169.123,0x9

HKLM:\System\CurrentControlSet\services\w32time\Parameters

类型

NTP

HKLM:\System\CurrentControlSet\services\w32time\TimeProviders\NtpClient

启用

1

HKLM:\System\CurrentControlSet\services\w32time\TimeProviders\NtpClient

InputProvider

1

HKLM:\System\CurrentControlSet\services\w32time\TimeProviders\NtpClient

SpecialPollInterval

900

为 Windows Server 2008 和更高版本配置时间设置

在更改 Windows 实例上的时间时,必须确保该时间在系统重新启动后仍然保留。否则,当实例重新启动时,它会恢复使用 UTC 时间。对于 Windows Server 2008 及更高版本,可通过添加 RealTimeIsUniversal 注册表项来保留时间设置。默认情况下,会在所有当前一代实例上设置此注册表项。若要验证是否设置了 RealTimeIsUniversal 注册表项,请参阅以下过程中的步骤 4。如果未设置该注册表项,请从头开始执行以下步骤。

设置 RealTimeIsUniversal 注册表项

  1. 从实例打开命令提示符窗口。

  2. 使用以下命令添加注册表项:

    reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
  3. 如果您使用的是在 2013 年 2 月 22 日之前创建的 Windows Server 2008 AMI(不是 Windows Server 2008 R2),我们建议更新到最新的 Amazon Windows AMI。如果使用的是运行 Windows Server 2008 R2(不是 Windows Server 2008)的 AMI,则必须验证是否安装了 Microsoft 修补程序 KB2922223。如果未安装此修补程序,建议您更新到最新的 Amazon Windows AMI。

  4. (可选) 验证该实例是否使用以下命令成功保存了该注册表项:

    reg query "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /s

    此命令返回 TimeZoneInformation 注册表项的子项。您应在列表底部看到 RealTimeIsUniversal 项,类似于下文:

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation Bias REG_DWORD 0x1e0 DaylightBias REG_DWORD 0xffffffc4 DaylightName REG_SZ @tzres.dll,-211 DaylightStart REG_BINARY 00000300020002000000000000000000 StandardBias REG_DWORD 0x0 StandardName REG_SZ @tzres.dll,-212 StandardStart REG_BINARY 00000B00010002000000000000000000 TimeZoneKeyName REG_SZ Pacific Standard Time DynamicDaylightTimeDisabled REG_DWORD 0x0 ActiveTimeBias REG_DWORD 0x1a4 RealTimeIsUniversal REG_DWORD 0x1

有关 Windows 操作系统如何协调和管理时间 (包括闰秒的添加) 的更多信息,请参阅以下文档: