공부하는 블로그
AWS 관련 기능 로컬에서 테스트 할 때 지역을 못 찾는 경우 본문
AWS S3을 이용해서 프로필 이미지 업로드 관련 기능을 구현하려고 하던 중, 자꾸 Region을 못 찾겠다는 메세지를 뱉어냈다.
SdkClientException: Unable to find a region via the region provider chain. Must provide an explicit region in the builder or setup environment to supply a region.
분명 Bean을 등록할 때 Region을 함께 설정해줬는데 말이다..
@Bean
public S3Client s3Client() {
AwsBasicCredentials awsBasicCredentials = AwsBasicCredentials.create(accessKey, secretKey);
return S3Client.builder()
.region(Region.US_EAST_1)
.credentialsProvider(StaticCredentialsProvider.create(awsBasicCredentials))
.build();
}
디버그를 찍어보니 SystemSettingsRegionProvider가 비어있었다.
EC2 인스턴스에 등록돼있는 메타데이터에서 region값을 빼오려고 하는 모양인데 지금은 EC2 환경이 아닌 로컬 환경에서 개발중이라 찾지 못하는 모양이다. 그러고나서 Powershell에서 $env:AWS_REGION="us-east-1" 이런 식으로 환경변수를 추가해서 Get-ChildItem Env:해서 추가된 것을 확인하고 다시 어플리케이션을 재시작하고 해봤지만, 이번에도 환경변수를 가져오지 못했다.
찾아보니 이런 식으로 추가한 환경 변수는 현재 PowerShell 세션에서만 유효하기 때문에 PowerShell에서 Env를 세팅하고 애플리케이션을 실행한 게 아니라 PowerShell에서만 추가하고 IntelliJ를 통해서 실행했기 때문에 환경 변수가 제대로 등록이 안 됐던 것 같다.
마지막으로 시스템 설정에서 시스템 변수로 추가해서 IntelliJ를 완전 재시작하고 애플리케이션을 구동시켜보니 이제서야 잘 작동이 된다.
이제 다음은 '미리 서명된 URL' 에 내 AWS ACCESS ID,버킷 이름, 해당 객체 Key가 다 들어있는 문제를 해결해봐야겠다..
'트러블슈팅' 카테고리의 다른 글
필터가 중복되는 문제 해결 (0) | 2025.02.21 |
---|---|
DB 인덱스는 만능일까? (0) | 2024.10.18 |