DNS 名参照用の JVM TTL を設定する - AWS SDK for Java 1.x

AWS SDK for Java 1.x は 2024 年 7 月 31 日にメンテナンスモードに入り、2025 年 12 月 31 日にサポート終了となります。新しい機能、可用性の向上、セキュリティ更新のために、AWS SDK for Java 2.x に移行することをお勧めします。

DNS 名参照用の JVM TTL を設定する

Java 仮想マシン (JVM) は DNS 名参照をキャッシュします。JVM がホスト名を IP アドレスに変換するとき、time-to-live (TTL) と呼ばれる指定期間 IP アドレスをキャッシュします。

AWS リソースは、ときどき変更される DNS 名を使用するため、5 秒の TTL 値で JVM を設定することをお勧めします。これにより、リソースの IP アドレスが変更されたときに、アプリケーションは DNS に対して再度クエリを実行することで、リソースの新しい IP アドレスを取得し、使用できるようになります。

一部の Java 設定では JVM のデフォルトの TTL が設定されるため、JVM が再起動されるまで、DNS エントリが更新されることはありません。したがって、アプリケーションがまだ実行中に AWS リソースの IP アドレスが変更された場合、JVM を手動で再起動し、キャッシュされた IP 情報が更新されるまで、そのリソースを使用することはできません。この場合、キャッシュされた IP 情報が定期的に更新されるように JVM の TTL を設定することが極めて重要です。

JVM TTL を設定する方法

JVM の TTL を変更するには、networkaddress.cache.ttl セキュリティプロパティ値を設定し、Java 8 の場合は $JAVA_HOME/jre/lib/security/java.security ファイルに、Java 11 以降の場合は $JAVA_HOME/conf/security/java.security ファイルに networkaddress.cache.ttl プロパティを設定します。

以下は、TTL キャッシュが 5 秒に設定された java.security ファイルからのスニペットです。

# # This is the "master security properties file". # # An alternate java.security properties file may be specified ... # The Java-level namelookup cache policy for successful lookups: # # any negative value: caching forever # any positive value: the number of seconds to cache an address for # zero: do not cache ... networkaddress.cache.ttl=5 ...

$JAVA_HOME 環境変数で表される JVM で実行されるすべてのアプリケーションは、この設定を使用します。