티스토리 뷰

Spring Cloud Aws 의존성이 추가후 애플리케이션을 실행하면 콘솔에 "Failed to connect to service endpoint"라는 예외메시지가 나오는데 원인과 해결방법에 대해 알아보자.

Failed to connect to service endpoint 원인파악

해당예외 메세지가 왜 뜨는지 분석해보자

AwsCloudEnvironmentCheckUtils

AwsCloudEnvironmentCheckUtils클래스에서 isRunningOnCloudEnvironment 메서드가 호출

된다. EC2MetadataUtils의 getData 메서드를 호출하는데 getData 메서드 내부를 까보면 getItems 메서드가 호출된다.

EC2MetadataUtils

getItems 메서드를 호출할 때 두번째 매개변수인 int tries값엔 1이 들어가 else구문이 실행되는데 어떤로직인지는 모르겠다만 HTTP API로직이 들어있다. 여기서 주목할점은 getHostAddressForEC2MetadataService 메서드다.

EC2MetadataUtils#getHostAddressForEC2MetadataService

시스템변수에 "com.amazonaws.sdk.ec2MetadataServiceEndpointOverride" key로 등록된 값을 조회해오는데 null이면 http://169.254.169.254를 리턴한다. 이 주소가 어떤주소인지 알아보았는데 아래와 같았다.



해당 엔드포인트는 Aws EC2 인스턴스에서만 접근이 되는걸로 확인되었다. 본문

InstanceMetadataServiceResourceFetcher#readResource

해당 메서드의 내부중 if문 로직은 다음과 같다.

SDKGlobalConfiguration#isEc2MetadataDisabled

시스템변수 "com.amazonaws.sdk.disableEc2Metadata"에 값이 true거나 환경변수 "AWS_EC2_METADATA_DISABLED" 값이 true면 해당조건이 실행되서 exception이 발생되지만 둘다 설정을 안해줬기에 else구문이 실행된다. else구문의 getToken 메서드 내부를 보면 doReadResource 메서드가 실행되는데

InstanceMetadataServiceResourceFetcher의 부모클래스인 EC2ResourceFetcher클래스의 doReadResource 메서드가 실행된다.

EC2ResourceFetcher#doReadResource

해당 메서드를 실행해도 예외가 발생될 것이다. 위 EC2MetadataUtils#getItems에서 동일한 엔드포인트로 요청을 보내기때문에 커넥션이 되지않기 때문이다.



그래서 해당예외는 EC2MetadataUtils까지 전달된다.


즉, EC2 인스턴스가 아닌 다른곳에서 해당 애플리케이션을 실행할 때는 시스템변수 "com.amazonaws.sdk.disableEc2Metadata"에 값을 true로하거나 환경변수 "AWS_EC2_METADATA_DISABLED" 값을 true로 해주면 된다.

시스템변수 세팅

 

시스템변수를 세팅 후 "EC2 Instance Metadata Service is disabled" 예외메세지가 출력되었다. 즉, EC2 인스턴스 메타데이터 조회 API 호출로직이 실행되지 않았다. 하지만 이건 에러는 아니지만 뭔가 보기 찝찝하다. 그래서 이 에러로그를 출력하지 않도록 설정할 수 있다.

설정옵션 추가

logging.level.com.amazonaws.util.EC2MetadataUtils=error
logging:
  level:
    com:
      amazonaws:
        util:
          EC2MetadataUtils: error

해당옵션을 추가하면 된다. 해당클래스에서 error가 감지되면 예외메세지 출력을 하지않게 된다.

LoggingApplicationListener

Spring Boot에서 제공하는 로깅관련 클래스이다. 해당 클래스에는 org.apache.commons.logging.Log 인터페이스 타입의 필드가 있는데 해당 필드에 error 옵션이 적용된다. 옵션설명은 아래와 같다.

 

 

테스트

익셉션이 발생되지 않고 정상적으로 실행되었다.

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함