티스토리 뷰

 

 

AWS S3의 기능만 제공하는 SDK를 알기 전에 있었던 일이다.

 

build.gradle 설정을 아래와 같이 했다.

implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'

의존성만 걸고 로컬에서 바로 실행을 한다면, 아마 gradle 빌드조차 되지 않을 것이다. 

 

yaml 프로파일에 추가 설정이 필요하다.

cloud:
  aws:
    stack:
      auto: false
    region:
      static: ap-northeast-2

하지만 이 설정 후에도 빌드 타임이 갑자기 엄청 느려지면서 아래와 같은 에러가 발생한다.

com.amazonaws.util.EC2MetadataUtils - Unable to retrieve the requested metadata (/latest/meta-data/instance-id). Failed to connect to service endpoint: 
com.amazonaws.SdkClientException: Failed to connect to service endpoint

콘솔에 위와 같은 에러 메시지가 남는다.

 

위 에러는 AWS SDK를 사용하기 위해서, spring-cloud-starter-aws을 build.gradle에 implements 했을 때

 

build를 위해서 EC2에 대한 메타데이터가 필요한데, 로컬 환경은 EC2환경이 아니기 때문에 당연히 EC2에 대한 메타데이터를 가져올 수 없기 때문에 발생하는 에러이다.

 

해결 방법은 간단하다.

 

EC2 메타데이터를 필요로하는 Configure들을 스프링 어플리케이션을 시작할 때 제외 시켜주면 된다.

 

Application.java에 아래 코드를 추가한다.

@SpringBootApplication(
        exclude = {
                org.springframework.cloud.aws.autoconfigure.context.ContextInstanceDataAutoConfiguration.class,
                org.springframework.cloud.aws.autoconfigure.context.ContextStackAutoConfiguration.class,
                org.springframework.cloud.aws.autoconfigure.context.ContextRegionProviderAutoConfiguration.class
        }
)

위 내용들을 간단히 정리해보면,

 

  • org.springframework.cloud.aws.autoconfigure.context.ContextInstanceDataAutoConfiguration: AWS EC2 인스턴스 데이터를 로드하는 자동 구성 클래스. 이 클래스를 제외하면 EC2 인스턴스 메타데이터를 사용하는 기능을 비활성화한다.
    • 로컬에서 자꾸 에러가 발생하는 이유가 이 옵션이라 이 클래스를 context에 제외하면 주요 에러를 제거할 수 있다.

 

  • org.springframework.cloud.aws.autoconfigure.context.ContextStackAutoConfiguration: AWS CloudFormation 스택 리소스에 대한 액세스를 위한 자동 구성 클래스. 이 클래스를 제외하면 CloudFormation 스택 리소스를 사용하는 기능을 비활성화한다.
    • 이 기능은 yaml의 cloud.aws.stack.auto:false와 같다. 여기서 설정하면, yaml에선 삭제해도 된다.

 

  • org.springframework.cloud.aws.autoconfigure.context.ContextRegionProviderAutoConfiguration: AWS 리전을 자동으로 감지하는 자동 구성 클래스. 이 클래스를 제외하면 자동 리전 감지 기능을 비활성화할 수 있다.
    • 리전은 S3Config에서 설정해 줄 예정이니 미리 감지하지 않아도 된다. 이 설정을 하면 yaml에서 region.static 설정을 삭제해도 된다.

 

 

이렇게 설정하는게 서버까지 가서도 문제 없을지는 확인해봐야 한다.

 

하지만 S3만 이용할거라면, 이렇게 기본 제공 설정들을 제외해도 별 문제가 없을 것 같다.

 

위 까지 작업하면 더 이상 로컬에서 에러가 발생하지 않고, 빌드 시간도 정상적으로 돌아온다.

 

그리고 위와 같이 설정하면, 초기에 yaml에 설정했던 부분들은 제거해도 된다.

 

마치며

별거 아닌 설정이지만 몇 시간을 낭비했다.

 

다음부터는 가장 먼저 공식 문서를 봐야겠다고 다짐했다...

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
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 31
글 보관함