-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathS3Config.java
More file actions
95 lines (75 loc) · 2.85 KB
/
S3Config.java
File metadata and controls
95 lines (75 loc) · 2.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package com.linglevel.api.s3.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.S3Configuration;
import java.net.URI;
@Configuration
public class S3Config {
// AWS S3 Configuration (for AI buckets)
@Value("${aws.s3.region}")
private String region;
@Value("${aws.access-key}")
private String accessKey;
@Value("${aws.secret-key}")
private String secretKey;
@Value("${aws.s3.ai.input.bucket}")
private String aiInputBucketName;
@Value("${aws.s3.ai.output.bucket}")
private String aiOutputBucketName;
// Cloudflare R2 Configuration (for Static files)
@Value("${cf.r2.endpoint}")
private String r2Endpoint;
@Value("${cf.r2.access-key}")
private String r2AccessKey;
@Value("${cf.r2.secret-key}")
private String r2SecretKey;
@Value("${cf.r2.static.bucket}")
private String r2StaticBucketName;
/**
* AWS S3 클라이언트 (AI Input/Output 버킷용)
*/
@Bean("s3AiClient")
public S3Client s3AiClient() {
AwsBasicCredentials credentials = AwsBasicCredentials.create(accessKey, secretKey);
return S3Client.builder()
.region(Region.of(region))
.credentialsProvider(StaticCredentialsProvider.create(credentials))
.build();
}
/**
* Cloudflare R2 클라이언트 (Static 파일용)
* R2는 S3 호환 API를 제공하므로 endpoint만 변경하면 됩니다.
*/
@Bean("s3StaticClient")
public S3Client s3StaticClient() {
AwsBasicCredentials credentials = AwsBasicCredentials.create(r2AccessKey, r2SecretKey);
// R2 전용 설정 객체 생성
S3Configuration serviceConfiguration = S3Configuration.builder()
.pathStyleAccessEnabled(true)
.chunkedEncodingEnabled(false)
.build();
return S3Client.builder()
.endpointOverride(URI.create(r2Endpoint))
.region(Region.of("auto"))
.credentialsProvider(StaticCredentialsProvider.create(credentials))
.serviceConfiguration(serviceConfiguration)
.build();
}
@Bean("aiInputBucketName")
public String aiInputBucketName() {
return aiInputBucketName;
}
@Bean("aiOutputBucketName")
public String aiOutputBucketName() {
return aiOutputBucketName;
}
@Bean("staticBucketName")
public String staticBucketName() {
return r2StaticBucketName;
}
}