

# EC2 인스턴스의 정밀 클럭 및 시간 동기화
<a name="set-time"></a>

Amazon EC2 인스턴스에서 일관되고 정확한 시간 참조는 많은 서버 작업과 프로세스에 매우 중요합니다. 시스템 로그의 타임스탬프는 문제가 발생한 시기와 이벤트의 연대순을 식별하는 데 중요한 역할을 합니다. AWS CLI 또는 AWS SDK를 사용하면 인스턴스에서 요청하는 경우 이러한 도구가 사용자를 대신하여 요청에 서명합니다. 인스턴스의 날짜 및 시간 설정이 정확하지 않아 서명 날짜와 요청 날짜 불일치로 인해 AWS가 요청을 거부할 수 있습니다.

이러한 중요한 측면을 해결하기 위해 Amazon은 모든 EC2 인스턴스에서 액세스할 수 있고 다양한 AWS 서비스 인스턴스에서 사용되는 Amazon Time Sync Service를 제공합니다. 서비스는 AWS 리전의 위성 연결 및 원자 기준 시계 집합을 사용하여 협정 세계시(UTC) 세계 표준의 정확한 현재 시간 판독을 제공합니다.

최상의 성능을 위해서는 EC2 인스턴스에서 [로컬 Amazon Time Sync Service](configure-ec2-ntp.md)를 사용하는 것이 좋습니다. 인스턴스의 로컬 Amazon Time Sync Service에 백업하거나 Amazon EC2 외부의 리소스를 Amazon Time Sync Service에 연결하려면 `time.aws.com`에 있는 [퍼블릭 Amazon Time Sync Service](configure-time-sync.md)를 사용하면 됩니다. 로컬 Amazon Time Sync Service와 마찬가지로 퍼블릭 Amazon Time Sync Service는 UTC에 추가된 윤초를 자동으로 제거합니다. 퍼블릭 Amazon Time Sync Service는 각 AWS 리전의 위성 연결 및 원자 기준 시계 플릿을 사용하여 전 세계적으로 지원됩니다.

## 하드웨어 패킷 타임스탬핑
<a name="hardware-packet-timestamping"></a>

인스턴스에서 하드웨어 패킷 타임스탬핑을 활성화하여 모든 수신 네트워크 패킷에 64비트 나노초 정밀도 타임스탬프를 추가할 수 있습니다. 하드웨어 패킷 타임스탬핑은 패킷이 커널, 소켓 또는 애플리케이션 계층에 도달하기 전에 하드웨어 수준에서 발생하므로 소프트웨어 타임스탬핑으로 추가된 지연을 우회합니다. 하드웨어 타임스탬핑을 위한 기본 참조 클럭은 Amazon Time Sync Service [PTP 하드웨어 클럭](configure-ec2-ntp.md#connect-to-the-ptp-hardware-clock)입니다.

**이점**

하드웨어 패킷 타임스탬핑은 다음과 같은 이점을 제공합니다.
+ 이벤트 순서를 개선합니다. 이 순서는 패킷이 EC2 인스턴스에 도착하는 실제 순서를 결정하는 데도 사용할 수 있으므로 공정한 패킷 처리가 보장됩니다.
+ 단방향 네트워크 지연 시간을 측정합니다.
+ 대부분의 온프레미스 솔루션에 비해 더 높은 정밀도 및 정확도로 분산 트랜잭션 속도를 높입니다.

**사전 조건 및 구성**

하드웨어 패킷 타임스탬핑을 활성화하려면 인스턴스가 다음 사전 조건을 충족해야 합니다.
+ Linux 인스턴스여야 합니다.
+ [PTP 하드웨어 클럭을 지원하기 위한 요구 사항](configure-ec2-ntp.md#ptp-hardware-clock-requirements)을 충족합니다.

구성 지침은 *GitHub*의 **Linux kernel driver for Elastic Network Adapter (ENA) family**에서 [Hardware Packet Timestamping](https://github.com/amzn/amzn-drivers/tree/master/kernel/linux/ena#hardware-packet-timestamping) 페이지를 참조하세요.

## 윤초
<a name="leap-seconds"></a>

1972년에 도입된 윤초는 국제 원자시(TAI)와 태양시(Ut1) 간의 차이를 수용하기 위해 지구 자전의 불규칙성을 고려하여 UTC 시간을 1초씩 조정하는 것입니다. 고객을 대신하여 윤초를 관리하기 위해 Amazon Time Sync Service 내에서 윤초 스미어링(leap smearing)을 설계했습니다. 자세한 내용은 [Look Before You Leap – The Coming Leap Second and AWS](https://aws.amazon.com/blogs/aws/look-before-you-leap-the-coming-leap-second-and-aws/)를 참조하세요.

윤초는 사라지고 있으며, Amzaon은 [2035년 또는 그 이전에 윤초를 없애기로 한 제27차 도량형 총회 결정](https://www.bipm.org/en/cgpm-2022/resolution-4)을 전적으로 지지합니다.

이러한 전환을 지원하기 위해 로컬 NTP 연결 또는 퍼블릭 NTP 풀(`time.aws.com`)을 통해 Amazon Time Sync Service에 액세스할 때 윤초 발생 시 시간 스미어링(smearing)을 계획하고 있습니다. 그러나 PTP 하드웨어 클럭은 스미어링한 시간 옵션을 제공하지 않습니다. 윤초가 발생하는 경우 PTP 하드웨어 클럭은 UTC 표준에 따라 윤초를 추가합니다. 대부분의 경우 윤초를 스미어링한 시간 소스와 윤초 시간 소스는 동일합니다. 그러나 윤초 발생 시에는 다르므로 시간 클라이언트 구성에서 스미어링한 시간 소스와 스미어링하지 않은 시간 소스 모두 사용하지 않는 것이 좋습니다.

 

**Topics**
+ [하드웨어 패킷 타임스탬핑](#hardware-packet-timestamping)
+ [윤초](#leap-seconds)
+ [로컬 Amazon Time Sync Service를 사용하도록 EC2 인스턴스의 시간 참조 설정](configure-ec2-ntp.md)
+ [퍼블릭 Amazon Time Sync Service를 사용하도록 EC2 인스턴스 또는 인터넷 연결 디바이스의 시간 참조 설정](configure-time-sync.md)
+ [Linux 인스턴스의 타임스탬프 비교](compare-timestamps-with-clockbound.md)
+ [인스턴스의 시간대 변경](change-time-zone-of-instance.md)

 

**관련 리소스**
+ AWS 컴퓨팅 블로그: [It’s About Time: Microsecond-Accurate Clocks on Amazon EC2 Instances](https://aws.amazon.com/blogs/compute/its-about-time-microsecond-accurate-clocks-on-amazon-ec2-instances/)
+ AWS 클라우드 운영 및 마이그레이션 블로그: [Amazon Time Sync Service 및 Amazon CloudWatch를 사용하여 Amazon EC2 인스턴스 클럭 정확도 관리 - 1부](https://aws.amazon.com/blogs/mt/manage-amazon-ec2-instance-clock-accuracy-using-amazon-time-sync-service-and-amazon-cloudwatch-part-1/)
+ (Linux) [https://chrony-project.org/](https://chrony-project.org/)

# 로컬 Amazon Time Sync Service를 사용하도록 EC2 인스턴스의 시간 참조 설정
<a name="configure-ec2-ntp"></a>

로컬 Amazon Time Sync Service는 NTP(Network Time Protocol)를 사용하거나 [지원되는 인스턴스](#ptp-hardware-clock-requirements)에서 로컬 PTP(Precision Time Protocol) 하드웨어 클럭을 제공합니다. PTP 하드웨어 클럭은 NTP 연결(Linux 및 Windows 인스턴스) 또는 직접 PTP 연결(Linux 인스턴스만 해당)을 지원합니다. NTP 및 직접 PTP 연결은 매우 정확한 동일한 시간 소스를 사용하지만 직접 PTP 연결이 NTP 연결보다 더 정확합니다. Amazon Time Sync Service에 대한 NTP 연결은 윤초 스미어링(leap smearing)을 지원하는 반면, 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 AMI, Windows AMI와 대부분의 파트너 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 네트워크 타임 프로토콜(NTP) 요청, [Windows 라이선스 서비스(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 엔드포인트를 사용하도록 구성되어 있습니다. 인스턴스가 이미 구성되었음을 확인하면 다음 절차를 건너뛸 수 있습니다.

**IPv4 엔드포인트를 사용하도록 chrony가 구성되어 있는지 확인하는 방법**  
다음 명령을 실행합니다. 출력에서 `^*`로 시작되는 줄은 기본 시간 소스를 나타냅니다.

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

**이전 버전의 Amazon Linux 2에서 IPv4 엔드포인트에 연결하도록 chrony를 구성하는 방법**

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. 각 시스템 부팅 시 `chronyd`가 시작되도록 구성하려면 `chkconfig` 명령을 사용합니다.

   ```
   [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 ]

**Ubuntu에서 IPv4 엔드포인트에 연결하도록 chrony를 구성하는 방법**

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의 기본 구현입니다.

**SUSE Linux에서 IPv4 엔드포인트에 연결하도록 chrony를 구성하는 방법**

1. `/etc/chrony.conf` 또는 **vim**과 같은 텍스트 편집기를 사용하여 **nano** 파일을 엽니다.

1. 파일이 다음 라인을 포함하고 있는지 확인합니다.

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

   이 라인이 표시되지 않는 경우, 추가합니다.

1. 다른 서버 혹은 풀 라인 설명

1. YaST를 열고 chrony 서비스를 활성화하세요.

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

Windows AMI는 2018년 8월 릴리스부터 기본적으로 Amazon Time Sync Service를 사용합니다. 이러한 AMI에서 시작된 인스턴스에는 추가 구성이 필요하지 않으며 다음 절차를 건너뛰어도 됩니다.

기본적으로 Amazon Time Sync Service가 구성되지 않은 AMI를 사용하는 경우 먼저 현재 NTP 구성을 확인하세요. 인스턴스가 이미 Amazon Time Sync Service의 IPv4 엔드포인트를 사용하고 있는 경우 추가 구성이 필요하지 않습니다. 인스턴스가 Amazon Time Sync Service를 사용하지 않는 경우 Amazon Time Sync Service를 사용하도록 NTP 서버를 변경하는 절차를 완료합니다.

**NTP 구성을 확인하려면**

1. 인스턴스에서 명령 프롬프트 창을 엽니다.

1. 다음 명령을 입력하여 현재 NTP 구성을 가져옵니다.

   ```
   w32tm /query /configuration
   ```

   이 명령은 Windows 인스턴스에 대한 현재 구성 설정을 반환하고 Amazon Time Sync Service에 연결되어 있는지 보여줍니다.

1. (선택 사항) 다음 명령을 입력하여 현재 구성의 상태를 가져옵니다.

   ```
   w32tm /query /status
   ```

   이 명령은 인스턴스를 NTP 서버와 마지막으로 동기화한 시간, 폴링 간격 등의 정보를 반환합니다.

**Amazon Time Sync Service를 사용하도록 NTP 서버를 변경하려면**

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 Image(AMI)는 EC2 인프라에서 함수 변경이 필요한 경우를 제외하고는 내장된 기본 설정을 그대로 유지합니다. 다음 설정은 가상 환경에서 잘 작동할 뿐 아니라 클럭 드리프트를 1초 이내의 정확도로 유지하는 것으로 판명되었습니다.
+ **업데이트 간격** - 시간 서비스가 시스템 시간의 정확도를 조정하는 빈도를 제어합니다. AWS는 업데이트 간격을 2분에 한 번으로 구성합니다.
+ **NTP 서버** – AMI는 2018년 8월 릴리스부터 기본적으로 Amazon Time Sync Service를 사용합니다. 이 시간 서비스는 169.254.169.123 IPv4 엔드포인트에 있는 모든 AWS 리전에서 액세스할 수 있습니다. 뿐만 아니라 0x9 플래그는 시간 서비스가 클라이언트 역할을 하면서 `SpecialPollInterval`을 사용하여 구성된 시간 서버에 체크인하는 빈도를 파악함을 나타냅니다.
+ **유형** – “NTP”는 서비스가 도메인 일부의 역할을 수행하는 대신 독립 실행형 NTP 클라이언트의 역할을 수행할 것임을 뜻합니다.
+ **활성화 및 InputProvider** – 시간 서비스가 활성화되어 운영 체제에 시간을 제공합니다.
+ **특수 폴링 간격** – 900초(15분)마다 구성된 NTP 서버를 확인합니다.
**참고**  
Windows Server 2025 AMI의 경우 `SpecialPollInterval` 값은 900초가 아닌 1024초입니다.


| 레지스트리 경로 | 키 이름 | Data | 
| --- | --- | --- | 
|  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 | 활성 | 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` 파일을 편집하는 단계에 도달하면 IPv4 엔드포인트(`169.254.169.123`) 대신 Amazon Time Sync Service(`fd00:ec2::123`)의 IPv6 엔드포인트를 사용합니다.

```
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 ]

Amazon Time Sync Service를 사용하도록 NTP 서버를 변경하는 단계에 도달하면 IPv4 엔드포인트(`169.254.169.123`)가 아닌 Amazon Time Sync Service(`fd00:ec2::123`)의 IPv6 엔드포인트를 사용하게 됩니다.

```
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 하드웨어 클럭이 있고 IPv4 또는 IPv6 엔드포인트에 대한 NTP 연결을 구성한 경우 인스턴스 시간은 NTP를 통해 PTP 하드웨어 클럭에서 자동으로 생성됩니다.

Linux 인스턴스의 경우 NTP 연결보다 더 정확한 시간을 제공하는 *직접* PTP 연결을 구성할 수 있습니다. 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 직접 연결을 사용하여 PTP 하드웨어 클럭을 통해 로컬 Amazon Time Sync Service를 사용하도록 Linux 인스턴스를 구성하는 방법을 설명합니다. `chrony` 구성 파일에서 PTP 하드웨어 클럭에 대한 서버 항목을 추가해야 합니다.

**PTP 하드웨어 클럭에 대한 직접 PTP 연결을 구성하려면(Linux 인스턴스만 해당)**

1. **사전 조건 설치**

   Linux 인스턴스에 연결하고 다음을 수행합니다.

   1. Elastic Network Adapter(ENA) 버전 2.10.0 이상용 Linux 커널 드라이버를 설치합니다.

   1. PTP 하드웨어 클럭을 활성화합니다.

   설치 지침은 **GitHub의 [Linux kernel driver for Elastic Network Adapter (ENA) family](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 symlink 구성**

   PTP 디바이스 이름은 하드웨어 초기화 순서에 따라 인덱스가 지정되며 일반적으로 `/dev/ptp0`, `/dev/ptp1` 등입니다. symlink를 생성하면 chrony와 같은 애플리케이션이 인덱스 변경에 관계없이 올바른 디바이스를 일관되게 참조할 수 있습니다.

   최신 Amazon Linux 2023 AMI에는 ENA 호스트에 연결된 올바른 `/dev/ptp` 항목을 가리키는 `/dev/ptp_ena` symlink를 생성하는 `udev` 규칙이 포함되어 있습니다.

   먼저 다음 명령을 실행하여 symlink가 있는지 확인하세요.

   ```
   [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 디바이스를 가리키는 상수 symlink입니다.

    

   `/dev/ptp_ena` symlink가 있는 경우 이 절차의 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 구성**

   /`dev/ptp<index>`를 직접 참조하는 대신 `/dev/ptp_ena` symlink를 사용하도록 chrony를 구성해야 합니다.

   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를 다시 시작한 후 별표가 나타나려면 몇 초 정도 기다려야 할 수 있습니다.

# 퍼블릭 Amazon Time Sync Service를 사용하도록 EC2 인스턴스 또는 인터넷 연결 디바이스의 시간 참조 설정
<a name="configure-time-sync"></a>

인터넷을 통해 `time.aws.com`에 액세스할 수 있는 퍼블릭 Amazon Time Sync Service를 사용하도록 인스턴스나 로컬 컴퓨터, 온프레미스 서버 등 인터넷에 연결된 모든 디바이스를 설정할 수 있습니다. 퍼블릭 Amazon Time Sync Service를 로컬 Amazon Time Sync Service의 백업으로 사용하고 AWS 외부의 리소스를 Amazon Time Sync Service에 연결할 수 있습니다.

**참고**  
최상의 성능을 위해 인스턴스에서는 **로컬 Amazon Time Sync Service를 사용하고 백업으로만 **퍼블릭 Amazon Time Sync Service를 사용하는 것이 좋습니다.

인스턴스 또는 디바이스의 운영 체제에 대한 지침을 따르세요.

## Linux
<a name="configure-time-sync-linux"></a>

**chrony 또는 ntpd로 퍼블릭 Amazon Time Sync Service를 사용하도록 Linux 인스턴스 또는 디바이스 설정**

1. 다음과 같은 텍스트 편집기를 사용하여 `/etc/chrony.conf`(chrony를 사용하는 경우) 또는 `/etc/ntp.conf`(ntpd를 사용하는 경우)를 편집합니다.

   1. 인스턴스나 디바이스에서 스미어링한 서버와 스미어링하지 않은 서버를 혼용하지 않도록 하려면 로컬 Amazon Time Sync Service에 대한 기존 연결을 제외하고 `server`로 시작하는 줄을 제거하거나 주석 처리합니다.
**중요**  
퍼블릭 Amazon Time Sync Service에 연결하도록 EC2 인스턴스를 설정하는 경우 로컬 Amazon Time Sync Service에 연결하도록 인스턴스를 설정하는 다음 줄을 제거하지 마세요. 로컬 Amazon Time Sync Service는 보다 직접적인 연결이며 더 나은 클럭 정확도를 제공합니다. 퍼블릭 Amazon Time Sync Service는 백업으로만 사용해야 합니다.  

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

   1. 퍼블릭 Amazon Time Sync Service에 연결하려면 다음 줄을 추가합니다.

      ```
      pool time.aws.com iburst
      ```

1. 다음 명령 중 하나를 사용하여 대몬(daemon)을 다시 시작합니다.
   + chrony

     ```
     sudo service chronyd force-reload
     ```
   + ntpd

     ```
     sudo service ntp reload
     ```

## macOS
<a name="configure-time-sync-macos"></a>

**퍼블릭 Amazon Time Sync Service를 사용하도록 macOS 인스턴스 또는 디바이스 설정**

1. **시스템 환경 설정**를 엽니다.

1. **Date & Time**(날짜 및 시간)을 선택한 다음 **Date & Time**(날짜 및 시간) 탭을 선택합니다.

1. 변경하려면 잠금 아이콘을 선택하고 암호를 묻는 메시지가 표시되면 암호를 입력합니다.

1. **Set date and time automatically**(날짜 및 시간 자동 설정)에 **time.aws.com**을 입력합니다.

## Windows
<a name="configure-time-sync-windows"></a>

**퍼블릭 Amazon Time Sync Service를 사용하도록 Windows 인스턴스 또는 디바이스 설정**

1. **제어판**을 엽니다.

1. **날짜 및 시간** 아이콘을 선택합니다.

1. **인터넷 시간** 탭을 선택합니다. PC가 도메인에 속해 있는 경우에는 이 탭을 사용할 수 없습니다. 이 경우 도메인 컨트롤러와 시간이 동기화됩니다. 퍼블릭 Amazon Time Sync Service를 사용하도록 컨트롤러를 구성할 수 있습니다.

1. **설정 변경**을 선택합니다.

1. **인터넷 시간 서버와 동기화** 확인란을 선택합니다.

1. **서버** 옆에 **time.aws.com**을 입력합니다.

**퍼블릭 Amazon Time Sync Service를 사용하도록 Windows Server 인스턴스 또는 디바이스 설정**
+ [Microsoft의 지침](https://support.microsoft.com/en-us/kb/816042)에 따라 레지스트리를 업데이트합니다.

# Linux 인스턴스의 타임스탬프 비교
<a name="compare-timestamps-with-clockbound"></a>

Amazon Time Sync Service를 사용하는 경우 Amazon EC2 Linux 인스턴스의 타임스탬프를 ClockBound와 비교하여 이벤트의 실제 시간을 결정할 수 있습니다. ClockBound는 EC2 인스턴스의 클록 정확도를 측정하고 지정된 타임스탬프가 인스턴스의 현재 클록과 관련하여 과거인지 미래인지 확인할 수 있도록 합니다. 이 정보는 각 인스턴스의 지리적 위치에 관계없이 EC2 인스턴스 전체에서 이벤트 및 트랜잭션의 순서와 일관성을 결정하는 데 유용합니다.

ClockBond는 오픈 소스 대몬과 라이브러리입니다. 설치 지침을 포함하여 ClockBound에 대한 자세한 내용은 [GitHub](https://github.com/aws/clock-bound)의 *ClockBound*를 참조하세요.

ClockBound는 Linux 인스턴스에서만 지원됩니다.

PTP 하드웨어 클럭에 대한 직접 PTP 연결을 사용하는 경우 chrony와 같은 시간 대몬(daemon)은 클럭 오차 범위를 과소평가합니다. 이는 PTP 하드웨어 클럭이 NTP와 같은 방식으로 올바른 오차 범위 정보를 chrony에 전달하지 않기 때문입니다. 따라서 시계 동기화 대몬(daemon)은 클럭이 UTC에 정확하다고 가정하므로 오차 범위가 `0`입니다. 전체 오차 범위를 측정하기 위해 Nitro System은 PTP 하드웨어 클럭의 오차 범위를 계산하고 이를 ENA 드라이버 `sysfs` 파일 시스템을 통해 EC2 인스턴스에서 사용할 수 있도록 지원합니다. 나노초 단위의 값으로 직접 읽을 수 있습니다.

**PTP 하드웨어 클럭 오류 범위를 검색하는 방법**

1. 먼저 다음 명령 중 하나를 사용하여 PTP 하드웨어 클록 디바이스의 올바른 위치를 가져옵니다. 명령의 경로는 인스턴스를 시작할 때 사용한 AMI에 따라 달라집니다.
   + 대상 Amazon Linux 2:

     ```
     cat /sys/class/net/eth0/device/uevent | grep PCI_SLOT_NAME
     ```
   + Amazon Linux 2023의 경우:

     ```
     cat /sys/class/net/ens5/device/uevent | grep PCI_SLOT_NAME
     ```

   출력은 PTP 하드웨어 클럭 디바이스의 위치인 PCI 슬롯 이름입니다. 이 예제에서 위치는 `0000:00:03.0`입니다.

   ```
   PCI_SLOT_NAME=0000:00:03.0
   ```

1. PTP 하드웨어 클럭 오차 범위를 검색하려면 다음 명령을 실행합니다. 이전 단계의 PCI 슬롯 이름을 포함합니다.

   ```
   cat /sys/bus/pci/devices/0000:00:03.0/phc_error_bound
   ```

   출력은 PTP 하드웨어 클럭의 클럭 오차 범위(나노초)입니다.

PTP 하드웨어 클럭에 대한 직접 PTP 연결을 사용할 때 특정 시점의 올바른 클럭 오차 범위를 계산하려면 chrony가 PTP 하드웨어 클럭을 폴링하는 시간에 chrony 또는 ClockBound에서 바인딩된 클럭 오차를 추가해야 합니다. 클럭 정확도 측정 및 모니터링에 대한 자세한 내용은 [Manage Amazon EC2 instance clock accuracy using Amazon Time Sync Service and Amazon CloudWatch – Part 1](https://aws.amazon.com/blogs/mt/manage-amazon-ec2-instance-clock-accuracy-using-amazon-time-sync-service-and-amazon-cloudwatch-part-1/)을 참조하세요.

# 인스턴스의 시간대 변경
<a name="change-time-zone-of-instance"></a>

Amazon EC2 인스턴스는 기본적으로 UTC(협정 세계시) 표준 시간대로 설정됩니다. 인스턴스의 시간을 현지 시간대나 네트워크의 다른 시간대로 변경할 수 있습니다.

인스턴스 운영 체제에 대한 지침을 사용하세요.

## Linux
<a name="change_time_zone"></a>

**중요**  
이 정보는 Amazon Linux에 적용됩니다. 기타 배포에 대한 자세한 내용은 해당 설명서를 참조하세요.

**Amazon Linux의 표준 시간대를 변경하려면**

1. 시스템의 현재 표준 시간대 설정을 확인합니다.

   ```
   [ec2-user ~]$ timedatectl
   ```

1. 사용 가능한 표준 시간대를 나열합니다.

   ```
   [ec2-user ~]$ timedatectl list-timezones
   ```

1. 선택한 표준 시간대를 설정합니다.

   ```
   [ec2-user ~]$ sudo timedatectl set-timezone America/Vancouver
   ```

1. (선택 사항) **timedatectl** 명령을 다시 실행하여 현재 표준 시간대가 새 표준 시간대로 업데이트되는지 확인합니다.

   ```
   [ec2-user ~]$ timedatectl
   ```

## Windows
<a name="windows-changing-time-zone"></a>

**Windows 인스턴스의 시간대 변경**

1. 인스턴스에서 명령 프롬프트 창을 엽니다.

1. 인스턴스에서 사용할 표준 시간대를 식별합니다. 표준 시간대 목록을 가져오려면 다음 명령을 사용합니다.

   ```
   tzutil /l
   ```

   이 명령은 사용 가능한 모든 시간대의 목록을 다음 형식으로 반환합니다.

   ```
   display name
   time zone ID
   ```

1. 인스턴스에 배정할 표준 시간대 ID를 찾습니다.

1. 예: UTC 표준 시간대 할당:

   ```
   tzutil /s "UTC"
   ```

   예: 태평양 표준시 할당:

   ```
   tzutil /s "Pacific Standard Time"
   ```

Windows 인스턴스의 시간대를 변경할 경우 시스템을 다시 시작해도 시간대가 계속 유지되는지 확인해야 합니다. 그렇게 하지 않으면 인스턴스가 다시 시작될 때 UTC 시간으로 다시 돌아갑니다. **RealTimeIsUniversal** 레지스트리 키를 추가하여 시간대 설정을 계속 유지할 수 있습니다. 이 키는 모든 현재 세대 인스턴스에서 기본적으로 설정됩니다. **RealTimeIsUniversal** 레지스트리 키가 설정되어 있는지 확인하려면 다음 절차의 3단계를 참조하세요. 키가 설정되지 않은 경우 처음부터 다음 단계를 수행하세요.

**RealTimeIsUniversal 레지스트리 키를 설정하려면**

1. 인스턴스에서 명령 프롬프트 창을 엽니다.

1. 다음 명령을 사용하여 레지스트리 키를 추가합니다.

   ```
   reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
   ```

1. (선택 사항) 다음 명령을 사용하여 인스턴스에서 키를 성공적으로 저장했는지 확인합니다.

   ```
   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
   ```