728x90
문제 상황
S3를 이용하기 위해서 연동을 하던 중, 처음 보는 에러를 마주쳤습니다. S3 연동은 많이 해봐서 바로 될 줄 알았는데, 아예 처음 보는 에러였습니다.
java.lang.IllegalArgumentException: Endpoint does not contain a valid host name: null
at com.amazonaws.services.s3.internal.S3RequestEndpointResolver.resolveRequestEndpoint(S3RequestEndpointResolver.java:115)
at com.amazonaws.services.s3.internal.S3RequestEndpointResolver.resolveRequestEndpoint(S3RequestEndpointResolver.java:92)
at com.amazonaws.services.s3.AmazonS3Client.resolveRequestEndpoint(AmazonS3Client.java:4812)
at com.amazonaws.services.s3.AmazonS3Client.createRequest(AmazonS3Client.java:4761)
at com.amazonaws.services.s3.AmazonS3Client.createRequest(AmazonS3Client.java:4679)
at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1729)
원인 분석
무슨 에러일까 궁금했습니다. 일단 대충 EndPoint에 유효한 이름이 포함되지 않았다는데.. 구글링을 해봤습니다.
public AmazonS3Client amazonS3Client() {
BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey,secretKey);
return (AmazonS3Client) AmazonS3ClientBuilder.standard()
.withRegion(region)
.withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
.build();
}
if awsRegion is a String, it should use dashes as separators, e.g. "us-west-2", otherwise it should use Regions enum, e.g. Regions.US_WEST_2.
여기에 region의 형식이 ap-northeast-2처럼 들어가야 한다고 합니다.
Enum으로 넣을 경우 AP_NORTHEAST_2로 들어가기 때문에 getName으로 넣어주시면 됩니다.
Regions.AP_NORTHEAST_2.getName()
원인
사실 region이 잘못되면 잘못된 region에 대한 에러가 바로 뜨는 것을 확인했는데 왜 저는 host 에러가 떴는지 궁금했습니다.
정말 바보 같게도 설정 파일의 값을 @Value로 매핑하는 과정에서 "}"를 마지막에 빠트려서 그대로 String값으로 들어가고 있었습니다 ㅎㅎ..
아무래도 $와 { 등, 파싱이 되지 않아서 읽을 수 없기 때문에 Null로 저장되었고 에러가 났던 것 같습니다.
쓸데 없이 시간을 너무 많이 써서.. 혹시나 저와 같은 실수를 하시는 분이 있을 수도 있어서 에러 기록을 남겨봅니다.
728x90
'개발 공부 > AWS' 카테고리의 다른 글
[AWS RDS x MySQL] 운영하며 만난 버그 - RDS Timezone, MySQL current_date (0) | 2022.11.29 |
---|