Peony의 기록 창고 🌼
반응형

1. 의존성 받아오기

<code />
//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")

 

2. AWS Credentials Provider 구성하기

스프링 클라우드 AWS에서 AWS Credentials Provider를 구성할 수 있는 방법은 3가지가 있다.

  1. 기본 자격 증명 제공자 - `DefaultCredentialsProvider``
  2. StsWebIdentityTokenFileCredentialsProvider - EKS 권장
  3. 사용자 지정 Aws 자격 증명 공급자 - Custom AwsCredentialsProvider

 

Credentials Provider를 구성하는 데 문제가 있다면, 디버그 로깅을 사용하도록 설정하는 방법도 있다.

<code />
logging.level.io .awspring.cloud= debug

 

필자는 위의 방법 중에 3번째 방법을 사용했다.

 

properties 파일에 가서 아래 코드를 넣어준다.

<code />
cloud.aws.credentials.access-key= cloud.aws.credentials.secret-key= cloud.aws.region.static= cloud.aws.s3.bucket=

 

S3Config 클래스를 만들어준다.

<code />
@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가 지역을 자동으로 구성하지 못해서 오류가 난 것이기 때문에 아래 코드를 추가하고, 클라이언트를 수정해줬다.

<code />
@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); } }

이렇게 해주면 기본 설정은 마무리된다.

 

Reference
https://docs.awspring.io/spring-cloud-aws/docs/3.1.0/reference/html/index.html#using-amazon-web-services

반응형
profile

Peony의 기록 창고 🌼

@myeongju