

# EC2 インスタンス上の正確なクロックと時刻の同期
<a name="set-time"></a>

多くのサーバータスクとプロセスにとって、Amazon EC2 インスタンスでの一貫して正確な時刻のリファレンスが不可欠です。システムログのタイムスタンプは問題が発生した時期やイベントの時系列を特定する上で重要な役割を果たします。AWS CLI または AWS SDK を使用してインスタンスからリクエストを行う際に、これらのツールによって自動的にリクエストに署名されます。インスタンスの日時設定が不正確な場合、署名の日付とリクエストの日付が一致しないことがあり、その場合は AWS がリクエストを却下します。

これに対処することが重要なため、Amazon は Amazon Time Sync Service を提供しています。このサービスはすべての EC2 インスタンスからアクセスでき、さまざまな AWS のサービス で利用されます。このサービスは各 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 に追加されたうるう秒の Leap Smearing を自動的に行います。パブリック 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 を設計しました。詳細については「[うるう秒に備える — 迫り来るうるう秒と AWS](https://aws.amazon.com/blogs/aws/look-before-you-leap-the-coming-leap-second-and-aws/)」を参照してください。

うるう秒はなくなりつつあります。当社は[2035 年までにうるう秒を廃止するという第 27 回国際度量衡総会](https://www.bipm.org/en/cgpm-2022/resolution-4)で採択された決議を全面的に支持しています。

この移行をサポートするために、ローカル NTP 接続または当社のパブリック NTP プール (`time.aws.com`) 経由で Amazon Time Sync Service にアクセスする場合、うるう秒の発生中に Leap Smearing を引き続き計画しています。ただし、PTP ハードウェアクロックには Leap Smearing のオプションはありません。うるう秒が発生した場合、PTP ハードウェアクロックは UTC 標準に従ってうるう秒を追加します。Leap Smearing を行う時刻の供給元とうるう秒を挿入する時刻の供給元はほとんどの場合同様です。ただし、うるう秒の発生中は両者が異なるため、うるう秒の発生中はタイムクライアントの設定で Leap Smearing を行う時刻の供給元と行わない時刻の供給元の両方を使用することはお勧めしません。

 

**Topics**
+ [ハードウェアパケットタイムスタンプ](#hardware-packet-timestamping)
+ [うるう秒](#leap-seconds)
+ [EC2 インスタンスのタイムリファレンスを、ローカル Amazon Time Sync Service を使用するように設定します。](configure-ec2-ntp.md)
+ [EC2 インスタンスまたはインターネットに接続されたデバイスのタイムリファレンスを、パブリック Amazon Time Sync Service を使用するように設定する](configure-time-sync.md)
+ [Linux インスタンスのタイムスタンプを比較する](compare-timestamps-with-clockbound.md)
+ [インスタンスのタイムゾーンを変更する](change-time-zone-of-instance.md)

 

**関連リソース**
+ AWS コンピューティングブログ: [今がそのとき: Amazon EC2 インスタンスでマイクロ秒精度のクロック](https://aws.amazon.com/blogs/compute/its-about-time-microsecond-accurate-clocks-on-amazon-ec2-instances/)
+ AWS クラウドの運用と移行のブログ: [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/)
+ (Linux) [https://chrony-project.org/](https://chrony-project.org/)

# EC2 インスタンスのタイムリファレンスを、ローカル Amazon Time Sync Service を使用するように設定します。
<a name="configure-ec2-ntp"></a>

ローカル Amazon Time Sync Service はNetwork Time Protocol (NTP) を使用するか、[サポートされているインスタンス](#ptp-hardware-clock-requirements)のローカル Precision Time Protocol (PTP) ハードウェアクロックを提供します。PTP ハードウェアクロックはNTP 接続 (Linux および Windows インスタンス) またはダイレクト PTP 接続 (Linux インスタンスのみ) のいずれかをサポートします。NTP 接続と直接 PTP 接続は非常に正確な同じ時刻を元にしていますが、直接 PTP 接続の方が NTP 接続より正確です。Amazon Time Sync Service への NTP 接続は Leap Smearing (うるう秒の調整) をサポートしていますが、PTP ハードウェアクロックへの PTP 接続は Leap Smearing を行いません。詳細については、[うるう秒](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)アドレスを使用するサービスには 1,024 パケット/秒 (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 を使用するようにインスタンスを設定します。

問題のトラブルシューティングについては、「[Amazon EC2 Linux サーバーの NTP 同期の問題をトラブルシューティングする方法を教えてください。](https://repost.aws/knowledge-center/linux-troubleshoot-ntp-synchronization)」または「[EC2 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
```

**古いバージョンの 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` が IPv4 エンドポイント `169.254.169.123` を使用して時刻を同期させていることを確認します。

   ```
   [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` が IPv4 エンドポイント `169.254.169.123` を使用して時刻を同期させていることを確認します。

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

2018 年 8 月のリリースから、Windows AMI はデフォルトで 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 サーバーを同期した最終時刻やポーリング間隔などの情報を返します。

**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 マシンイメージ (AMI) は一般的に、EC2 インフラストラクチャで機能させるために変更が必要な場合を除き、初期状態のデフォルトに準拠しています。以下の設定は仮想化環境で適切に動作するとともに、クロック同期ずれを 1 秒以内の精度に保持するように定められています。
+ **更新間隔** — タイムサービスがシステム時刻を正しくなるように調整する頻度を管理します。AWS は更新間隔を 2 分に 1 回になるように設定します。
+ **NTP サーバー** — 2018 年 8 月のリリースから、AMI はデフォルトで Amazon Time Sync Service を使用することになりました。このタイムサービスは169.254.169.123 IPv4 エンドポイントにあるすべての AWS リージョン からアクセス可能です。さらに 0x9 フラグはタイムサービスがクライアントとして機能しており、設定されたタイムサーバーを確認する頻度を `SpecialPollInterval` を使用して決定することを示しています。
+ **タイプ** – 「NTP」とはサービスがドメインの一部としてではなく、スタンドアロン NTP クライアントとして機能することを意味します。
+ **Enabled および InputProvider** – タイムサービスが有効で、オペレーティングシステムに時刻が提供されます。
+ **特別なポーリング間隔** – 設定された NTP サーバーを 900 秒 (15 分) ごとに確認します。
**注記**  
Windows Server 2025 AMIの場合、`SpecialPollInterval` 値は 900 秒ではなく 1024 秒になります。


| レジストリパス | キー名 | データ | 
| --- | --- | --- | 
|  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 の IPv6 エンドポイント (`fd00:ec2::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 ]

Amazon Time Sync Service を使用するように NTP サーバーを変更するステップに到達すると、IPv4 エンドポイント (`169.254.169.123`) ではなく、Amazon Time Sync Service の IPv6 エンドポイント (`fd00:ec2::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 System](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 インスタンスでは、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 接続による PTP ハードウェアクロックを通じてローカル Amazon Time Sync Service を使用するように Linux インスタンスを設定する方法について説明します。このためには、PTP ハードウェアクロックのサーバーエントリを `chrony` 設定ファイルに追加する必要があります。

**PTP ハードウェアクロックへの直接 PTP 接続を設定するには (Linux インスタンスのみ)**

1. **インストール条件**

   Linux インスタンスに接続し、以下を実行します。

   1. Elastic Network Adapter (ENA) バージョン 2.10.0 以降の Linux カーネルドライバーをインストールします。

   1. PTP ハードウェアクロックを有効にします。

   インストール手順についてはGitHub で「[Elastic Network Adapter (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 には、ENA ホストに関連付けられた正しい `/dev/ptp` エントリを指す `/dev/ptp_ena` シンボリックリンクを作成する `udev` ルールが含まれています。

   まず、次のコマンドを実行して、シンボリックリンクが存在するかどうかをチェックします。

   ```
   [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 を再起動した後、アスタリスクが表示されるまで数秒かかる場合があります。

# EC2 インスタンスまたはインターネットに接続されたデバイスのタイムリファレンスを、パブリック Amazon Time Sync Service を使用するように設定する
<a name="configure-time-sync"></a>

インスタンス、またはローカルコンピュータやオンプレミスサーバーなどのインターネットに接続されたデバイスを、インターネット上の `time.aws.com` でアクセスできるパブリック Amazon Time Sync Service を使用するように設定できます。ローカル Amazon Time Sync Service のバックアップとして、そして AWS 外部のリソースを Amazon Time Sync Service に接続するために、パブリック 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. インスタンスまたはデバイスが、Leap Smearing を行うサーバーと行わないサーバーを混在させようとしないように、ローカル 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. 以下のコマンドのいずれかを使用してデーモンを再起動します。
   + 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** と入力してください。

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

**パブリック Amazon Time Sync Service を使用するように Windows インスタンスまたはデバイスを設定するには**

1. **[Control Panel]** (コントロールパネル を開いてください。

1. **[Date and Time]** (日付と時刻) アイコンを選択してください。

1. **[Internet Time]** (インターネット時刻) タブを選択してください。お使いの PC がドメインの一部である場合、このタブは使用できません。その場合はドメインコントローラと時刻が同期されます。Amazon Time Sync Service を使用するようにコントローラを設定できます。

1. **[Change settings]** (設定を変更) を選択してください。

1. **[インターネットタイムサーバーと同期]** のチェックボックスをオンにします。

1. **[Server]** (サーバー) の横に、**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 インスタンス間のイベントとトランザクションの順序と一貫性を判断するのに役立ちます。

ClockBound はオープンソースのデーモンとライブラリです。ClockBound の詳細については*GitHub* の[ClockBound](https://github.com/aws/clock-bound)を参照してください。

ClockBound は Linux インスタンスでのみサポートされています。

PTP ハードウェアクロックへの直接 PTP 接続を使用している場合、chrony などのタイムデーモンはクロック誤差範囲を過小評価します。これはPTP ハードウェアクロックが NTP と異なり誤差範囲の正しい情報を chrony に渡さないためです。その結果、クロック同期デーモンはクロックが 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 接続を使用するときに、特定の時点における正しいクロック誤差範囲を計算するにはPTP ハードウェアクロックをポーリングする時点の「範囲からのクロックエラーバウンド」chrony または「ClockBound」を追加する必要があります。chronyクロック精度の測定とモニタリングの詳細については「[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/)」を参照してください。

# インスタンスのタイムゾーンを変更する
<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
   ```

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