

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定 EC2 執行個體的時間參考以使用本機 Amazon Time Sync Service
<a name="configure-ec2-ntp"></a>

本機 Amazon Time Sync Service 可以使用網路時間通訊協定 (NTP)，或在[支援的執行個體](#ptp-hardware-clock-requirements)上提供本機精確時間協定 (PTP) 硬體時鐘。PTP 硬體時鐘支援 NTP 連線 (Linux 和 Windows 執行個體) 或直接 PTP 連線 (僅限 Linux 執行個體)。NTP 和直接 PTP 連線使用的是相同高度精確時間來源，但直接 PTP 連線比 NTP 連線更精確。與 Amazon Time Sync Service 的 NTP 連線支援飛躍塗抹，而 PTP 與 PTP 硬體時鐘的連線不會塗抹時間。如需詳細資訊，請參閱[閏秒](set-time.md#leap-seconds)。

您的執行個體可以存取本機 Amazon Time Sync Service，如下所示：
+ 透過位於下列 IP 地址端點的 NTP：
  + IPv4：`169.254.169.123`
  + IPv6：`fd00:ec2::123` (僅在 [Nitro 型執行個體](instance-types.md#instance-hypervisor-type)上存取。)
+ (僅限 Linux) 透過直接 PTP 連線連接至本機 PTP 硬體時鐘：
  + `PHC0`

Amazon Linux AMIs、Windows AMIs 和大多數合作夥伴 AMI 會根據預設設定執行個體使用 NTP IPv4 端點。這是大多數客戶工作負載的建議設定。除非您要使用 IPv6 端點或直接連接到 PTP 硬體時鐘，否則從這些 AMI 啟動的執行個體不需要進一步的設定。

NTP 和 PTP 連線不需要變更任何 VPC 組態，而且執行個體不需要存取網際網路。

**考量事項**
+ 使用[連結本機](using-instance-addressing.md#link-local-addresses)位址的服務有每秒 1024 個封包 (PPS) 限制。此限制包括 [Route 53 Resolver DNS 查詢](https://docs.aws.amazon.com/vpc/latest/userguide/AmazonDNS-concepts.html#vpc-dns-limits)、[執行個體中繼資料服務 (IMDS)](instancedata-data-retrieval.md) 請求、Amazon Time Service Network Time Protocol (NTP) 請求和 [Windows Licensing Service (適用於 Microsoft Windows 型執行個體)](https://aws.amazon.com/windows/resources/licensing/) 請求的彙總。
+ 僅 Linux 執行個體可使用*直接 PTP 連線*連接至本機 PTP 硬體時鐘。Windows 執行個體使用 NTP 連線到本機 PTP 硬體時鐘。

**Topics**
+ [連接至 Amazon Time Sync Service 的 IPv4 端點](#configure-amazon-time-service-IPv4)
+ [連接至 Amazon Time Sync Service 的 IPv6 端點](#configure-amazon-time-service-IPv6)
+ [連接至 PTP 硬體時鐘](#connect-to-the-ptp-hardware-clock)

## 連接至 Amazon Time Sync Service 的 IPv4 端點
<a name="configure-amazon-time-service-IPv4"></a>

您的 AMI 可能依預設已設定 Amazon Time Sync Service。否則，請使用下列程序，將您的執行個體設定為透過 IPv4 端點使用本機 Amazon Time Sync Service。

如需對問題進行故障診斷的協助，請參閱[針對 Linux 執行個體上的 NTP 同步問題進行故障診斷](https://repost.aws/knowledge-center/linux-troubleshoot-ntp-synchronization)，或[針對 Windows 執行個體上的時間問題進行故障診斷](https://repost.aws/knowledge-center/ec2-windows-time-service)。

------
#### [ Amazon Linux ]

預設情況下，AL2023 和最新版的 Amazon Linux 2 設定為使用 Amazon Time Sync Service IPv4 端點。若您確認您的執行個體已設定，可以略過下列程序。

**驗證 chrony 是否設定為使用 IPv4 端點**  
執行下列命令。在輸出中，以 `^*` 開頭的行表示偏好的時間來源。

```
chronyc sources -v | grep -F ^*
^* 169.254.169.123               3   4   377    14    +12us[+9653ns] +/-  290us
```

**設定 chrony，以連線至舊版 Amazon Linux 2 上的 IPv4 端點**

1. 連線到您的執行個體，然後解除安裝 NTP 服務。

   ```
   [ec2-user ~]$ sudo yum erase 'ntp*'
   ```

1. 安裝 `chrony` 套裝服務。

   ```
   [ec2-user ~]$ sudo yum install chrony
   ```

1. 使用文字編輯器 (例如 `/etc/chrony.conf` 或 **vim**) 開啟 **nano** 檔案。將下列程式碼新增在檔案中已有之任何其他 `server` 或 `pool` 的陳述式之前，然後儲存您的變更：

   ```
   server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4
   ```

1. 重新啟動 `chrony` 協助程式 (`chronyd`)。

   ```
   [ec2-user ~]$ sudo service chronyd restart
   ```

   ```
   Starting chronyd:                                          [  OK  ]
   ```
**注意**  
在 RHEL 和 CentOS (最新為 6 版) 上，服務名稱為 `chrony`，而不是 `chronyd`。

1. 使用 `chkconfig` 命令設定 `chronyd` 在每次系統開機時啟動。

   ```
   [ec2-user ~]$ sudo chkconfig chronyd on
   ```

1. 確認 `chrony` 是否使用 `169.254.169.123` IPv4 端點來同步時間。

   ```
   [ec2-user ~]$ chronyc sources -v | grep -F ^*
   ```

   在輸出中，`^*` 表示偏好的時間來源。

   ```
   ^* 169.254.169.123               3   6    17    43    -30us[ -226us] +/-  287us
   ```

1. 確認時間同步指標是否由 `chrony` 回報。

   ```
   [ec2-user ~]$ chronyc tracking
   ```

   ```
   Reference ID    : A9FEA97B (169.254.169.123)
   Stratum         : 4
   Ref time (UTC)  : Wed Nov 22 13:18:34 2017
   System time     : 0.000000626 seconds slow of NTP time
   Last offset     : +0.002852759 seconds
   RMS offset      : 0.002852759 seconds
   Frequency       : 1.187 ppm fast
   Residual freq   : +0.020 ppm
   Skew            : 24.388 ppm
   Root delay      : 0.000504752 seconds
   Root dispersion : 0.001112565 seconds
   Update interval : 64.4 seconds
   Leap status     : Normal
   ```

------
#### [ Ubuntu ]

**設定 chrony，以連線至 Ubuntu 上的 IPv4 端點**

1. 連線至您的執行個體，然後使用 `apt` 來安裝 `chrony` 套件。

   ```
   ubuntu:~$ sudo apt install chrony
   ```
**注意**  
如有必要，請執行 `sudo apt update` 先更新您的執行個體。

1. 使用文字編輯器 (例如 `/etc/chrony/chrony.conf` 或 **vim**) 開啟 **nano** 檔案。將下列程式碼新增在檔案中已有之任何其他 `server` 或 `pool` 的陳述式之前，然後儲存您的變更：

   ```
   server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4
   ```

1. 重新啟動 `chrony` 服務。

   ```
   ubuntu:~$ sudo /etc/init.d/chrony restart
   ```

   ```
   Restarting chrony (via systemctl): chrony.service.
   ```

1. 確認 `chrony` 是使用 `169.254.169.123` IPv4 端點來同步時間。

   ```
   ubuntu:~$ chronyc sources -v | grep -F ^*
   ```

   在輸出中，以 `^*` 開頭的行表示偏好的時間來源。

   ```
   ^* 169.254.169.123               3   6    17    12    +15us[  +57us] +/-  320us
   ```

1. 確認時間同步指標是否由 `chrony` 回報。

   ```
   ubuntu:~$ chronyc tracking
   ```

   ```
   Reference ID    : 169.254.169.123 (169.254.169.123)
   Stratum         : 4
   Ref time (UTC)  : Wed Nov 29 07:41:57 2017
   System time     : 0.000000011 seconds slow of NTP time
   Last offset     : +0.000041659 seconds
   RMS offset      : 0.000041659 seconds
   Frequency       : 10.141 ppm slow
   Residual freq   : +7.557 ppm
   Skew            : 2.329 ppm
   Root delay      : 0.000544 seconds
   Root dispersion : 0.000631 seconds
   Update interval : 2.0 seconds
   Leap status     : Normal
   ```

------
#### [ SUSE Linux ]

從 SUSE Linux Enterprise Server 15 開始，`chrony` 是 NTP 的預設實作。

**設定 chrony，以連線至 SUSE Linux 上的 IPv4 端點**

1. 使用文字編輯器 (例如 `/etc/chrony.conf` 或 **vim**) 開啟 **nano** 檔案。

1. 確認檔案是否包含下列程式碼行：

   ```
   server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4
   ```

   如果此程式碼不存在，請新增它。

1. 將任何其他伺服器或集區的程式碼行變更為註解。

1. 開啟 YaST 並啟用 chrony 服務。

------
#### [ Windows ]

從 2018 年 8 月版本開始，Windows AMI 預設會使用 Amazon Time Sync Service。從這些 AMI 啟動的執行個體不需要進一步的設定，您可以略過下列程序。

如果您使用的 AMI 未依預設設定 Amazon Time Sync Service，請先驗證您目前的 NTP 組態。如果您的執行個體已在使用 Amazon Time Sync Service 的 IPv4 端點，則無需進一步設定。如果您的執行個體不是使用 Amazon Time Sync Service，請完成程序，將 NTP 伺服器變更為使用 Amazon Time Sync Service。

**確認 NTP 組態**

1. 從執行個體中，開啟命令提示視窗。

1. 輸入下列命令，以取得目前 NTP 組態：

   ```
   w32tm /query /configuration
   ```

   此命令會傳回 Windows 執行個體目前的組態設定，並顯示是否已連接至 Amazon Time Sync Service。

1. (選用) 輸入下列命令，以取得目前組態的狀態：

   ```
   w32tm /query /status
   ```

   此命令會傳回資訊，例如執行個體最後一次與 NTP 伺服器同步的時間以及輪詢間隔。

**將 NTP 伺服器改為使用 Amazon Time Sync Service**

1. 從命令提示視窗，執行下列命令：

   ```
   w32tm /config /manualpeerlist:169.254.169.123 /syncfromflags:manual /update
   ```

1. 使用下列命令，確認新設定：

   ```
   w32tm /query /configuration
   ```

   在傳回的輸出中，確認 `NtpServer` 顯示 `169.254.169.123` IPv4 端點。

**Amazon Windows AMI 的預設 NTP 設定**

Amazon Machine Images (AMIs) 通常依循立即可用的預設值，但需要變更才能在 EC2 基礎設施上運作的狀況除外。下列設定已確認在虛擬化環境中運作良好，以及可將任何時鐘漂移保持在一秒的準確度內：
+ **更新間隔** – 規範時間服務將系統時間調整為準確性的頻率。 會將更新間隔 AWS 設定為每兩分鐘發生一次。
+ **NTP 伺服器**：從 2018 年 8 月發行版本開始，AMI 預設使用 Amazon Time Sync Service。這次服務可從 AWS 區域 169.254.169.123 IPv4 端點的任何 存取。此外，0x9 標記表示時間服務正作為用戶端，並使用 `SpecialPollInterval` 來判定以設定的時間伺服器進行查入的頻率。
+ **類型** – “NTP” 表示服務將充當獨立式 NTP 用戶端，而不是充當網域的一部分。
+ **Enabled 和 InputProvider**：時間服務已啟用，並提供時間給作業系統。
+ **特殊輪詢間隔**：每 900 秒 (15 分鐘) 檢查一次已設定的 NTP 伺服器。
**注意**  
對於 Windows Server 2025 AMIs，`SpecialPollInterval`值為 1024 秒，而不是 900 秒。


| 登錄檔路徑 | 金鑰名稱 | 資料 | 
| --- | --- | --- | 
|  HKLM:\$1System\$1CurrentControlSet\$1services\$1w32time\$1Config  |  UpdateInterval  | 120 | 
| HKLM:\$1System\$1CurrentControlSet\$1services\$1w32time\$1Parameters | NtpServer | 169.254.169.123,0x9 | 
| HKLM:\$1System\$1CurrentControlSet\$1services\$1w32time\$1Parameters | 類型 | NTP | 
| HKLM:\$1System\$1CurrentControlSet\$1services\$1w32time\$1TimeProviders\$1NtpClient | Enabled | 1 | 
| HKLM:\$1System\$1CurrentControlSet\$1services\$1w32time\$1TimeProviders\$1NtpClient | InputProvider | 1 | 
| HKLM:\$1System\$1CurrentControlSet\$1services\$1w32time\$1TimeProviders\$1NtpClient | SpecialPollInterval | 900 (Windows Server 2016、2019 和 2022) 或 1024 (Windows Server 2025) | 

------

## 連接至 Amazon Time Sync Service 的 IPv6 端點
<a name="configure-amazon-time-service-IPv6"></a>

本節說明如要設定執行個體以透過 IPv6 端點使用本機 Amazon Time Sync Service，步驟與 [連接至 Amazon Time Sync Service 的 IPv4 端點](#configure-amazon-time-service-IPv4) 所述有何不同。它不會說明整個 Amazon Time Sync Service 組態程序。

IPv6 端點僅在 [Nitro 型執行個體](instance-types.md#instance-hypervisor-type)上可供存取。

我們不建議同時使用 IPv4 和 IPv6 端點項目。IPv4 和 IPv6 NTP 封包來自您的執行個體的相同本機伺服器。同時設定 IPv4 和 IPv6 端點是不必要的做法，而且不會改善執行個體的時間準確性。

------
#### [ Linux ]

根據您使用的 Linux 發行版本，當您到達編輯 `chrony.conf` 檔案的步驟時，您將使用 Amazon Time Sync Service 的 IPv6 端點 (`fd00:ec2::123`)，而不是 IPv4 端點 (`169.254.169.123`)：

```
server fd00:ec2::123 prefer iburst minpoll 4 maxpoll 4
```

儲存檔案，並確認 chrony 是否使用 `fd00:ec2::123` IPv6 端點來同步時間：

```
[ec2-user ~]$ chronyc sources -v
```

在輸出中，如果有看到 `fd00:ec2::123` IPv6 端點，表示組態已完成。

------
#### [ Windows ]

當您到達將 NTP 伺服器變更為使用 Amazon Time Sync Service 的步驟時，您會使用 Amazon Time Sync Service (`fd00:ec2::123`) 的 IPv6 端點，而不是 IPv4 端點 (`169.254.169.123`)：

```
w32tm /config /manualpeerlist:fd00:ec2::123 /syncfromflags:manual /update
```

確認您的新設定正在使用 `fd00:ec2::123` IPv6 端點來同步時間：

```
w32tm /query /configuration
```

在輸出中，確認 `NtpServer` 顯示 `fd00:ec2::123` IPv6 端點。

------

## 連接至 PTP 硬體時鐘
<a name="connect-to-the-ptp-hardware-clock"></a>

PTP 硬體時鐘是 [AWS Nitro 系統](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html)的一部分，因此可在[支援的裸機和虛擬化 EC2 執行個體](#ptp-hardware-clock-requirements)上直接存取，不會使用任何客戶資源。

PTP 硬體時鐘的 NTP 端點與一般 Amazon Time Sync Service 相同。如果您的執行個體具有 PTP 硬體時鐘，而且您已設定 NTP 連線 (連接 IPv4 或 IPv6 端點)，執行個體時間便會自動通過 NTP 使用 PTP 硬體時鐘。

針對 Linux 執行個體，您可以設定*直接* PTP 連線，這將為您提供比 NTP 連線更精準的時間。Windows 執行個體僅支援連接 PTP 硬體時鐘的 NTP 連線。

### 要求
<a name="ptp-hardware-clock-requirements"></a>

符合下列需求才能在執行個體上使用 PTP 硬體時鐘：
+ 支援 AWS 區域：美國東部 （維吉尼亞北部）、美國東部 （俄亥俄）、亞太區域 （馬來西亞）、亞太區域 （泰國）、亞太區域 （東京） 和歐洲 （斯德哥爾摩）
+ 支援的本地區域：美國東部 (紐約市)
+ 支援的執行個體系列：
  + **一般用途：**M7a、M7g、M7i
  + **記憶體最佳化：**R7a、R7g、R7i
  + **儲存最佳化：**I8g、I8ge
+ (僅限 Linux) 在支援的作業系統上安裝 ENA 驅動程式 2.10.0 版或更新版本。如需支援作業系統的詳細資訊，請參閱 *GitHub* 上的驅動程式[先決條件](https://github.com/amzn/amzn-drivers/tree/master/kernel/linux/ena#prerequisites)。

### (僅限 Linux) 設定 PTP 硬體時鐘的直接 PTP 連線
<a name="connect-to-the-ptp-hardware-clock-linux"></a>

本節說明如何使用直接 PTP 連線，將 Linux 執行個體設定為透過 PTP 硬體時鐘使用本機 Amazon Time Sync Service。需將 PTP 硬體時鐘的伺服器項目新增至 `chrony` 組態檔。

**設定 PTP 硬體時鐘的直接 PTP 連線 (僅限 Linux 執行個體)**

1. **安裝先決條件**

   連線到您的 Linux 執行個體，並執行下列動作：

   1. 安裝適用於彈性網路介面卡 (ENA) 2.10.0 版或更新版本的 Linux 核心驅動程式。

   1. 啟用 PTP 硬體時鐘。

   如需安裝指示，請參閱 *GitHub* 上的[適用於彈性網路介面卡 (ENA) 系列的 Linux 核心驅動程式](https://github.com/amzn/amzn-drivers/tree/master/kernel/linux/ena#linux-kernel-driver-for-elastic-network-adapter-ena-family)。

1. **驗證 ENA PTP 裝置**

   確認 ENA PTP 硬體時鐘裝置顯示在執行個體上。

   ```
   [ec2-user ~]$ for file in /sys/class/ptp/*; do echo -n "$file: "; cat "$file/clock_name"; done
   ```

   預期的輸出結果

   ```
   /sys/class/ptp/ptp<index>: ena-ptp-<PCI slot>
   ```

   其中：
   + `index` 為核心註冊的 PTP 硬體時鐘索引。
   + `PCI slot` 為 ENA 乙太網路控制器 PCI 插槽。此插槽與 `lspci | grep ENA` 中顯示的插槽相同。

   範例輸出

   ```
   /sys/class/ptp/ptp0: ena-ptp-05
   ```

   如果 `ena-ptp-<PCI slot>` 不在輸出中，表示 ENA 驅動程式未正確安裝。請參閱此程序中的步驟 1 以安裝驅動程式。

1. **設定 PTP 符號連結**

   PTP 裝置通常命名為 `/dev/ptp0`、`/dev/ptp1` 等，其索引取決於硬體初始化順序。建立符號連結可確保 chrony 等應用程式能一致參考正確的裝置，不受索引變更影響。

   最新的 Amazon Linux 2023 AMI 包含建立 `/dev/ptp_ena` 符號連結的 `udev` 規則，指向與 ENA 主機相關聯的正確 `/dev/ptp` 項目。

   首先透過執行下列命令，檢查符號連結是否存在。

   ```
   [ec2-user ~]$ ls -l /dev/ptp*
   ```

   範例輸出

   ```
   crw------- 1 root root 245, 0 Jan 31 2025 /dev/ptp0
   lrwxrwxrwx 1 root root      4 Jan 31 2025 /dev/ptp_ena -> ptp0
   ```

   其中：
   + `/dev/ptp<index>` 為 PTP 裝置的路徑。
   + `/dev/ptp_ena` 為固定的符號連結，指向同一個 PTP 裝置。

    

   若 `/dev/ptp_ena` 符號連結存在，跳至此程序的步驟 4。若遺失，請執行下列動作：

   1. 新增下列 `udev` 規則。

      ```
      [ec2-user ~]$ echo "SUBSYSTEM==\"ptp\", ATTR{clock_name}==\"ena-ptp-*\", SYMLINK += \"ptp_ena\"" | sudo tee -a /etc/udev/rules.d/53-ec2-network-interfaces.rules
      ```

   1. 透過重新啟動執行個體或執行下列命令，重新載入 `udev` 規則。

      ```
      [ec2-user ~]$ sudo udevadm control --reload-rules && udevadm trigger
      ```

1. **設定 chrony**

   chrony 必須設定為使用 `/dev/ptp_ena` 符號連結，而非直接參考 /`dev/ptp<index>`。

   1. 使用文字編輯器編輯 `/etc/chrony.conf`，然後在檔案中的任何位置新增以下行。

      ```
      refclock PHC /dev/ptp_ena poll 0 delay 0.000010 prefer
      ```

   1. 重新啟動 chrony。

      ```
      [ec2-user ~]$ sudo systemctl restart chronyd
      ```

1. **驗證 chrony 組態**

   確認 chrony 是使用 PTP 硬體時鐘來同步此執行個體上的時間。

   ```
   [ec2-user ~]$ chronyc sources
   ```

   預期的輸出結果

   ```
   MS Name/IP address         Stratum Poll Reach LastRx Last sample
   ===============================================================================
   #* PHC0                          0   0    377    1   +2ns[ +1ns] +/-   5031ns
   ```

   在傳回的輸出中，`*` 表示偏好的時間來源。`PHC0` 對應 PTP 硬體時鐘。重新啟動 chrony 之後，可能需要等待幾秒鐘，星號才會出現。