Linux インスタンスの時刻の設定
サーバータスクとプロセスの多くには、一貫して正確な時間参照が不可欠です。システムログのほとんどにタイムスタンプが含まれています。これを利用すれば、問題が発生した時刻とイベントの発生順序を判断できます。AWS CLI、または AWS SDK を使用してインスタンスからリクエストを行う場合、これらのツールによって自動的にリクエストに署名されます。インスタンスの日時が正しく設定されていない場合、署名の日付がリクエストの日付と一致しないことがあり、その場合は AWS によってリクエストが却下されます。
Amazon では、Amazon Time Sync Service を提供します。このサービスはすべての EC2 インスタンスからアクセスでき、その他の AWS のサービスにも利用されます。このサービスは、各 AWS リージョンで衛星接続された原子基準クロックを使用し、ネットワークタイムプロトコル (NTP) を通じて世界標準時 (UTC) の現在の正確な現在時刻を表示します。Amazon Time Sync Service は、UTC に追加されたうるう秒を自動的に均一化します。
Amazon Time Sync Service は、VPC で実行されているすべてのインスタンスの 169.254.169.123
IPv4 アドレス または fd00:ec2::123
IPv6 アドレスで NTP を介して利用できます。IPv6 アドレスは、Nitro System 上に構築されたインスタンス上でのみアクセスできます。インスタンスはインターネットにアクセスする必要はなく、アクセスを許可するためにセキュリティグループルールまたはネットワーク ACL ルールを設定する必要はありません。最新バージョンの Amazon Linux 2 および Amazon Linux AMI はデフォルトで Amazon Time Sync Service と同期します。
chrony
クライアントを使用して、インスタンスに Amazon Time Sync Service を設定するには、次の手順を実行します。または、外部 NTP ソースを使用できます。NTP やパブリックな時刻ソースの詳細については、http://www.ntp.org/
Windows インスタンスの場合は、「Windows インスタンスの時刻の設定」を参照してください。
トピック
IPv4 アドレスで EC2 インスタンスの時刻を設定する
このセクションでは、Linux ディストリビューションのタイプに応じて IPv4 アドレスを持つ EC2 インスタンスの時間を設定する方法について説明します。
トピック
Amazon Linux AMI での Amazon Time Sync Service を設定
Amazon Linux 2 では、chrony
は既にインストールされ、Amazon Time Sync Service の IP アドレスを使用するように設定されています。
Amazon Linux AMI を使用して、Amazon Time Sync Service のサーバーエントリを追加するには、chrony
設定ファイルを編集する必要があります。
Amazon Time Sync Service を使用して インスタンスを設定するには
-
インスタンスに接続し、NTP サービスをアンインストールします。
[ec2-user ~]$
sudo yum erase 'ntp*'
-
chrony
パッケージをインストールします。[ec2-user ~]$
sudo yum install chrony
-
任意のテキストエディタ (例:
/etc/chrony.conf
または vim など) を使って nano ファイルを開きます。ファイルに次の行が含まれていることを確認します:server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4
この行が存在する場合は、Amazon Time Sync Service が既に設定されており、次のステップに進むことができます。そうでない場合は、すでにファイルに存在する他の
server
またはpool
ステートメントの後に行を追加し、変更を保存します。 -
chrony
デーモン (chronyd
) を再起動します。[ec2-user ~]$
sudo service chronyd restart
Starting chronyd: [ OK ]
注記 RHEL と CentOS (バージョン 6 まで) では、サービス名は
chrony
ではなくchronyd
です。 -
chkconfig
コマンドを使用して、システムがブートするたびにchronyd
が起動するように設定します。[ec2-user ~]$
sudo chkconfig chronyd on
-
chrony
が169.254.169.123
IP アドレスを使用して時刻を同期させていることを確認します。[ec2-user ~]$
chronyc sources -v
210 Number of sources = 7 .-- Source mode '^' = server, '=' = peer, '#' = local clock. / .- Source state '*' = current synced, '+' = combined , '-' = not combined, | / '?' = unreachable, 'x' = time may be in error, '~' = time too variable. || .- xxxx [ yyyy ] +/- zzzz || Reachability register (octal) -. | xxxx = adjusted offset, || Log2(Polling interval) --. | | yyyy = measured offset, || \ | | zzzz = estimated error. || | | \ MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* 169.254.169.123 3 6 17 43 -30us[ -226us] +/- 287us ^- ec2-12-34-231-12.eu-west> 2 6 17 43 -388us[ -388us] +/- 11ms ^- tshirt.heanet.ie 1 6 17 44 +178us[ +25us] +/- 1959us ^? tbag.heanet.ie 0 6 0 - +0ns[ +0ns] +/- 0ns ^? bray.walcz.net 0 6 0 - +0ns[ +0ns] +/- 0ns ^? 2a05:d018:c43:e312:ce77:> 0 6 0 - +0ns[ +0ns] +/- 0ns ^? 2a05:d018:dab:2701:b70:b> 0 6 0 - +0ns[ +0ns] +/- 0ns
返される出力では、
^*
が優先時刻ソースを示します。 -
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 での Amazon Time Sync Service の設定
Amazon Time Sync Service のサーバーエントリを追加するには、chrony
設定ファイルを編集する必要があります。
Amazon Time Sync Service を使用して インスタンスを設定するには
インスタンスに接続し、
apt
を使用してchrony
パッケージをインストールします。ubuntu:~$
sudo apt install chrony
注記 必要に応じて、
sudo apt update
を実行してインスタンスを最初に更新します。任意のテキストエディタ (例:
/etc/chrony/chrony.conf
または vim など) を使って nano ファイルを開きます。ファイルに既に存在する他のserver
ステートメントやpool
ステートメントの前に次の行を追加し、変更を保存します。server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4
-
chrony
サービスを再起動します。ubuntu:~$
sudo /etc/init.d/chrony restart
Restarting chrony (via systemctl): chrony.service.
-
chrony
が169.254.169.123
IP アドレスを使用して時刻を同期させていることを確認します。ubuntu:~$
chronyc sources -v
210 Number of sources = 7 .-- Source mode '^' = server, '=' = peer, '#' = local clock. / .- Source state '*' = current synced, '+' = combined , '-' = not combined, | / '?' = unreachable, 'x' = time may be in error, '~' = time too variable. || .- xxxx [ yyyy ] +/- zzzz || Reachability register (octal) -. | xxxx = adjusted offset, || Log2(Polling interval) --. | | yyyy = measured offset, || \ | | zzzz = estimated error. || | | \ MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* 169.254.169.123 3 6 17 12 +15us[ +57us] +/- 320us ^- tbag.heanet.ie 1 6 17 13 -3488us[-3446us] +/- 1779us ^- ec2-12-34-231-12.eu-west- 2 6 17 13 +893us[ +935us] +/- 7710us ^? 2a05:d018:c43:e312:ce77:6 0 6 0 10y +0ns[ +0ns] +/- 0ns ^? 2a05:d018:d34:9000:d8c6:5 0 6 0 10y +0ns[ +0ns] +/- 0ns ^? tshirt.heanet.ie 0 6 0 10y +0ns[ +0ns] +/- 0ns ^? bray.walcz.net 0 6 0 10y +0ns[ +0ns] +/- 0ns
返される出力では、
^*
が優先時刻ソースを示します。 -
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 での Amazon Time Sync Service の設定
「https://software.opensuse.org/package/chrony
任意のテキストエディタ (例: /etc/chrony.conf
または vim など) を使って nano ファイルを開きます。ファイルに次の行が含まれていることを確認します。
server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4
この行が存在しない場合は追加します。他のサーバーまたはプールの行はすべてコメントアウトします。yast を開き、chrony サービスを有効にします。
IPv6 アドレスを使用した EC2 インスタンスの時間を設定する
このセクションでは、IPv6 アドレスを使用する EC2 インスタンスのために Amazon Time Sync Service を設定する場合、IPv4 アドレスで EC2 インスタンスの時刻を設定する に説明されるプロセスの違いについて説明します。Amazon Time Sync Service の設定プロセス全体について説明しているわけではありません。IPv6 アドレスは、Nitro System 上に構築されたインスタンス上でのみアクセスできます。
chrony.conf ファイルで IPv4 アドレスと IPv6 アドレスの両方のエントリを一緒に使用することはお勧めしません。IPv4 および IPv6 NTP パケットは、インスタンスの同じローカルサーバーから取得されます。両方を同時に使用している場合は、IPv4 エンドポイントからのパケットと IPv6 エンドポイントからのパケットが混在する可能性があります。
使用している 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 アドレスが表示されているのを確認したら、設定は完了しています。
Amazon Linux での タイムゾーンの変更
Amazon Linux インスタンスは、デフォルトで UTC (協定世界時) タイムゾーンに設定されています。インスタンスの時刻をローカルの時刻またはネットワーク内の別のタイムゾーンに変更できます。
この情報は、Amazon Linux に適用されます。その他のディストリビューションの情報については、各ドキュメントを参照してください。
Amazon Linux 2 インスタンスのタイムゾーンを変更するには
-
システムの現在のタイムゾーン設定を表示します。
[ec2-user ~]$
timedatectl
-
使用可能なタイムゾーンを一覧表示します。
[ec2-user ~]$
timedatectl list-timezones
-
選択したタイムゾーンを設定します。
[ec2-user ~]$
sudo timedatectl set-timezone
America/Vancouver
-
(オプション) timedatectl コマンドをもう一度実行して、現在のタイムゾーンが新しいタイムゾーンに更新されていることを確認します。
[ec2-user ~]$
timedatectl
Amazon Linux インスタンスのタイムゾーンを変更するには
-
インスタンスで使用する時間帯を特定します。
/usr/share/zoneinfo
ディレクトリには、タイムゾーンデータファイルの階層が含まれています。その場所でディレクトリ構造を閲覧し、お客様の時間帯のファイルを見つけます。[ec2-user ~]$
ls /usr/share/zoneinfo
Africa Chile GB Indian Mideast posixrules US America CST6CDT GB-Eire Iran MST PRC UTC Antarctica Cuba GMT iso3166.tab MST7MDT PST8PDT WET Arctic EET GMT0 Israel Navajo right W-SU ...
この場所にある一部のエントリはディレクトリです (
America
など)。そのディレクトリには、特定の都市の時間帯ファイルが含まれています。インスタンスに使用する都市 (またはお客様の時間帯と同じ都市) を見つけます。 -
新しいタイムゾーンを適用した
/etc/sysconfig/clock
ファイルを更新します。この例では、ロサンゼルスのタイムゾーンデータファイル/usr/share/zoneinfo/America/Los_Angeles
を使用します。-
お好みのテキストエディタ (
/etc/sysconfig/clock
や vim など) で、nano ファイルを開きます。エディタのコマンドで sudo を使用する必要があります。/etc/sysconfig/clock
はroot
が所有するためです。[ec2-user ~]$
sudo
nano
/etc/sysconfig/clock -
ZONE
エントリを特定し、タイムゾーンファイルに変更します (パスの/usr/share/zoneinfo
セクションは省略します)。例えば、ロサンゼルスの時間帯に変更するには、ZONE
エントリを次のように変更します。ZONE="
America/Los_Angeles
"注記 UTC=true
エントリを別の値に変更しないでください。このエントリは、ハードウェアクロックに使用されるため、インスタンスで別のタイムゾーンを設定する場合は調整する必要はありません。 -
ファイルを保存し、テキストエディタを終了します。
-
-
インスタンスが現地時間情報を参照するとき、タイムゾーンファイルを見つけられるように、
/etc/localtime
とタイムゾーンファイルの間にシンボリックリンクを作成します。[ec2-user ~]$
sudo ln -sf /usr/share/zoneinfo/
America/Los_Angeles
/etc/localtime -
システムを再起動し、すべてのサーバーとアプリケーションで新しい時間帯情報を取得します。
[ec2-user ~]$
sudo reboot
-
(オプション) date コマンドを使用して、現在のタイムゾーンが新しいタイムゾーンに更新されていることを確認します。現在のタイムゾーンが出力に表示されます。以下の例では、現在のタイムゾーンは PDT であり、ロサンゼルスのタイムゾーンを参照しています。
[ec2-user ~]$
date
Sun Aug 16 05:45:16 PDT 2020
タイムスタンプの比較
Amazon Time Sync Service を使用している場合は、Amazon EC2 インスタンスのタイムスタンプと ClockBound を比較して、イベントの実際の時刻を判断できます。ClockBound は EC2 インスタンスのクロック精度を測定し、インスタンスの現在のクロックに関して、特定のタイムスタンプが過去または将来にあるかどうかを確認できます。この情報は、各インスタンスの地理的位置に関係なく、EC2 インスタンス間のイベントとトランザクションの順序と一貫性を判断するのに役立ちます。
ClockBound は、オープンソースのデーモンとライブラリです。インストール手順を含む ClockBound の詳細については、GitHub の「ClockBound