Peony의 기록 창고 🌼
반응형

의존성 받아오기

//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가지가 있다.

  1. 기본 자격 증명 제공자 - `DefaultCredentialsProvider``
  2. StsWebIdentityTokenFileCredentialsProvider - EKS 권장
  3. 사용자 지정 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);  
    }  
}

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

 

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

반응형
profile

Peony의 기록 창고 🌼

@myeongju