배스천 호스트(Bastion Host)를 통해 Private Subnet ElastiCache를 접속할 수 있도록 설정한 상황입니다.

  • 비용절감을 위해 ElastiCache Serverless 구성
  • 테스트를 진행하기 위해서는 Bastion 서버에 Redis-Cli 설치가 선행되어야 합니다.

AWS 설치 링크 를 통해 Redis-Cli 를 설치할 수 있습니다.

EC2에서 테스트 시 주의사항으로 설치 대상 서버의 인스턴스 유형을 t.smail 이상으로 설정해야 합니다.

그렇지 않은 경우 OOM(Out Of Memory)가 발생하여 설치 중 서버가 다운될 수 있습니다.

 

ElastiCache Serverless 구성하면 접속 테스트 시 주의사항이 있습니다.

그 이유는 암호화 옵션이 default 로 활성화 적용되어 있습니다. (설정 변경 불가)

 

그로 인해 redis-cli 통한 접속 시 --tls 옵션이 필수입니다.

# ssh 설정을 통해 redis port를 6379 -> 56379 로 설정
redis-cli -h localhost -p 56379 --tls
localhost:56379> ping
PONG
localhost:56379>

1. 오류원인

Redis 암호화 옵션이 활성화 되어, TLS 옵션을 활성화 해야 합니다.

 

그러나 applicaion.yml 파일에서 TLS 옵션을 활성화 시켜도 빌드 시 Redis 접속 오류가 발생합니다. 

spring:
 redis:
   host: localhost
   port: 56379 # SSH 설정하여 포트 6379 -> 56379로 변경
   ssl: true # TLS 사용 활성화

 

로그는 아래와 같습니다.

org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:56379

2. 해결책

Lettuce 라이브러리는 disablePeerVerification() 옵션을 적용한 후 Config 파일을 구성해야 합니다.

가이드 문서 링크 - https://lettuce.io/core/release/reference/#ssl

 

예제 코드는 아래를 참고해주세요

@Configuration
@RequiredArgsConstructor
public class RedisConfig {

    private final RedisProperties redisProperties;

    private static LettuceConnectionFactory getLettuceConnectionFactory(RedisProperties redisProperties) {
        RedisStandaloneConfiguration redisConfig = new RedisStandaloneConfiguration(redisProperties.getHost(), redisProperties.getPort());

        LettuceClientConfiguration lettuceConfig = LettuceClientConfiguration.builder()
                .useSsl()
                .disablePeerVerification()
                .build();

        return new LettuceConnectionFactory(redisConfig, lettuceConfig);
    }

    @Bean
    @Primary
    public RedisConnectionFactory cacheConnectionFactory() {
        return getLettuceConnectionFactory(redisProperties);
    }
    ...
}

 

읽어주셔서 감사합니다.

 

레퍼런스
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기