반응형
의존성 받아오기
//S3
implementation platform("io.awspring.cloud:spring-cloud-aws-dependencies:3.1.1")
implementation("io.awspring.cloud:spring-cloud-aws-starter-s3:3.1.1")
AWS Credentials Provider 구성하기
스프링 클라우드 AWS에서 AWS Credentials Provider를 구성할 수 있는 방법은 3가지가 있다.
- 기본 자격 증명 제공자 - `DefaultCredentialsProvider``
StsWebIdentityTokenFileCredentialsProvider
- EKS 권장- 사용자 지정 Aws 자격 증명 공급자 - Custom
AwsCredentialsProvider
Credentials Provider를 구성하는 데 문제가 있다면, 디버그 로깅을 사용하도록 설정하는 방법도 있다.
logging.level.io .awspring.cloud= debug
필자는 위의 방법 중에 3번째 방법을 사용했다.
properties 파일에 가서 아래 코드를 넣어준다.
cloud.aws.credentials.access-key=
cloud.aws.credentials.secret-key=
cloud.aws.region.static=
cloud.aws.s3.bucket=
S3Config 클래스를 만들어준다.
@Configuration
public class S3Config {
@Value("${cloud.aws.credentials.access-key}")
private String accessKey;
@Value("${cloud.aws.credentials.secret-key}")
private String secretKey;
@Value("${cloud.aws.region.static}")
private String region;
@Bean
@Primary
public AwsCredentialsProvider customAwsCredentialsProvider() {
return () -> new AwsCredentials() {
@Override
public String accessKeyId() {
return accessKey;
}
@Override
public String secretAccessKey() {
return secretKey;
}
};
}
@Bean
@Primary
public S3Client s3Client() {
return S3Client.builder()
.credentialsProvider(customAwsCredentialsProvider())
.region(Region.of(region))
.build();
}
}
처음에는 이렇게 설정을 하고 실행시켜봤더니 ,, 오류가 났다.
S3 Clientbuilder는 저기서 리전 설정 해둔 것이 없으면 AWS_REGION이라는 환경 변수를 찾아가는데, 그 환경변수도 없어서 오류가 난 것이다.
AWS 공식 문서를 찾아봐도 설명이 없어서 한참을 삽질하다 awsspring 공식 문서에서 정답을 찾았다 !
내 경우에는 AWS가 지역을 자동으로 구성하지 못해서 오류가 난 것이기 때문에 아래 코드를 추가하고, 클라이언트를 수정해줬다.
@Configuration
public class S3Config {
@Value("${cloud.aws.credentials.access-key}")
private String accessKey;
@Value("${cloud.aws.credentials.secret-key}")
private String secretKey;
@Value("${cloud.aws.region.static}")
private String region;
@Bean
@Primary public AwsCredentialsProvider customAwsCredentialsProvider() {
return () -> new AwsCredentials() {
@Override
public String accessKeyId() {
return accessKey;
}
@Override
public String secretAccessKey() {
return secretKey;
}
};
}
@Bean
@Primary public S3Client s3Client() {
return S3Client.builder()
.credentialsProvider(customAwsCredentialsProvider())
.region(customAwsRegionProvider().getRegion())
.build();
}
@Bean
public AwsRegionProvider customAwsRegionProvider() {
return () -> Region.of(region);
}
}
이렇게 해주면 기본 설정은 마무리된다.
반응형