문제 상황
Eureka Client를 IP주소 및 포트 번호를 통하여 관리하여 서비스 간의 라우팅을 진행하도록 설계.
하지만 AWS Fargate를 통해 Eureka Server에 Eureka Client를 등록 후 해당 Client 서비스를 Eureka를 통해 호출했을 때 500 에러가 발생.
이는 Fargate에서 Eureka Client가 다음과 같이 등록 되는데 각 컨테이너의 private Ip가 등록되는 것이 아닌 AWS Fargate의 메타데이터에 접근할 때 사용되는 IP가 등록 되었다
AUTH-SERVER 169.254.172.2:auth-server:19092
COUPON-SERVER 169.254.172.2:coupon-server:19095
GATEWAY-SERVER 169.254.172.2:gateway-server:19091
문제 해결
Eureka Client가 등록될 때 Ip 주소와 port를 현재 떠있는 Container의 private Ip로 등록하면 해당 문제를 해결 할 수 있다
@Configuration
@Profile("prod")
public class EcsConfig {
@Bean
public EurekaInstanceConfigBean eurekaInstanceConfig(InetUtils inetUtils){
EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(inetUtils);
String ip = null;
try {
ip = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
config.setIpAddress(ip);
config.setPreferIpAddress(true);
config.setNonSecurePort(19092);
return config;
}
}