티스토리 뷰
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에 설정했던 부분들은 제거해도 된다.
마치며
별거 아닌 설정이지만 몇 시간을 낭비했다.
다음부터는 가장 먼저 공식 문서를 봐야겠다고 다짐했다...
'개발 > AWS' 카테고리의 다른 글
스프링부트에서 AWS SQS SDK 2.0 사용하기 (0) | 2023.08.07 |
---|---|
Windows에서 AWS 인증키 생성하고 저장하기 (0) | 2023.08.07 |
스프링부트에서 AWS S3 SDK 2.x 버전 사용하기 (0) | 2023.06.17 |
AWS S3란? 스프링 부트에서 S3에 업로드하기 (0) | 2023.06.06 |
AWS EC2에서 JAVA 서버 백그라운드 프로세스 실행 (0) | 2023.02.06 |
- Total
- Today
- Yesterday
- JWT
- terraform
- Spring
- OpenFeign
- 티스토리챌린지
- Elastic cloud
- Log
- java
- MySQL
- ChatGPT
- cache
- 스프링부트
- 람다
- serverless
- springboot
- Kotlin
- AWS
- AOP
- CloudFront
- lambda
- AWS EC2
- OpenAI
- elasticsearch
- 후쿠오카
- EKS
- 오블완
- S3
- openAI API
- docker
- GIT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |