Definir o JVM TTL para pesquisas de nome DNS - AWS SDK para Java 1.x

O AWS SDK para Java 1.x entrou no modo de manutenção em 31 de julho de 2024 e o fim do suporte está previsto para 31 de dezembro de 2025. Recomendamos que você migre para o AWS SDK for Java 2.x para continuar recebendo novos recursos, melhorias de disponibilidade e atualizações de segurança.

Definir o JVM TTL para pesquisas de nome DNS

A JVM armazena em cache pesquisas de nome DNS. Ao resolver um nome de host para um endereço IP, a JVM armazena em cache o endereço IP para um período especificado, conhecido como Time-To-Live (TTL – Tempo de duração).

Como os recursos da AWS usam entradas de nome DNS que acabam mudando, recomendamos configurar a JVM com um valor de TTL de 5 segundos. Isso garante que, quando o endereço IP de um recurso mudar, o aplicativo poderá receber e usar o novo endereço IP do recurso consultando novamente o DNS.

Em algumas configurações do Java, o TTL padrão da JVM é definido de maneira que jamais atualizará entradas DNS até a JVM ser reiniciada. Por isso, se o endereço IP de um recurso da AWS mudar enquanto o aplicativo ainda estiver em execução, não será possível usar esse recurso até você reiniciar manualmente a JVM e as informações de IP armazenadas em cache serem atualizadas. Nesse caso, é crucial definir o TTL da JVM, de forma que ele atualize periodicamente as informações de IP armazenadas em cache.

Como definir o TTL da JVM

Para modificar o TTL da JVM, defina o valor da propriedade de segurança networkaddress.cache.ttl, defina a propriedade networkaddress.cache.ttl no arquivo $JAVA_HOME/jre/lib/security/java.security para Java 8 ou arquivo $JAVA_HOME/conf/security/java.security para Java 11 ou posterior.

Veja a seguir um trecho de um arquivo java.security que mostra o cache de TTL definido para 5 segundos.

# # 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 ...

Todas as aplicações executadas na JVM representada pela variável de ambiente $JAVA_HOME usam essa configuração.