From 7ec034e1fbba1028c5561cd9194af4d49a38fbb7 Mon Sep 17 00:00:00 2001 From: vectorch Date: Sat, 11 Nov 2023 00:00:05 +0900 Subject: [PATCH] =?UTF-8?q?cicd:=20=EB=A1=9C=EC=BB=AC=20=ED=99=98=EA=B2=BD?= =?UTF-8?q?=EC=97=90=EC=84=A0=20LocalStack=EC=9D=84=20=ED=86=B5=ED=95=B4?= =?UTF-8?q?=20S3=EB=A5=BC=20=EB=AA=A8=ED=82=B9=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- build.gradle | 1 + localstack/docker-compose.yml | 18 +++++++ .../global/config/LocalS3Config.java | 51 +++++++++++++++++++ .../daybyquest/global/config/S3Config.java | 2 + src/main/resources/application-local-aws.yml | 7 +++ ...ation-aws.yml => application-prod-aws.yml} | 0 src/main/resources/application.yml | 4 +- 8 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 localstack/docker-compose.yml create mode 100644 src/main/java/daybyquest/global/config/LocalS3Config.java create mode 100644 src/main/resources/application-local-aws.yml rename src/main/resources/{application-aws.yml => application-prod-aws.yml} (100%) diff --git a/.gitignore b/.gitignore index 34481a6..fe2ebe5 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ build/ !**/src/main/**/build/ !**/src/test/**/build/ .http - +localstack/volume ### STS ### .apt_generated .classpath diff --git a/build.gradle b/build.gradle index bb3a9fa..ffeb9c7 100644 --- a/build.gradle +++ b/build.gradle @@ -41,6 +41,7 @@ dependencies { implementation 'org.flywaydb:flyway-mysql:9.16.3' implementation 'com.amazonaws:aws-java-sdk-s3:1.12.528' + implementation 'org.testcontainers:localstack:1.19.1' // Querydsl implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' diff --git a/localstack/docker-compose.yml b/localstack/docker-compose.yml new file mode 100644 index 0000000..638323b --- /dev/null +++ b/localstack/docker-compose.yml @@ -0,0 +1,18 @@ +version: "3.8" + +services: + localstack: + container_name: "dbq_localstack" + image: localstack/localstack + ports: + - "127.0.0.1:4566:4566" # LocalStack Gateway + - "127.0.0.1:4510-4559:4510-4559" # external services port range + environment: + - DEBUG=${DEBUG-} + - DOCKER_HOST=unix:///var/run/docker.sock + - AWS_ACCESS_KEY_ID=access_key + - AWS_SECRET_ACCESS_KEY=secret_key + - AWS_DEFAULT_REGION=us-east-1 + volumes: + - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack" + - "/var/run/docker.sock:/var/run/docker.sock" \ No newline at end of file diff --git a/src/main/java/daybyquest/global/config/LocalS3Config.java b/src/main/java/daybyquest/global/config/LocalS3Config.java new file mode 100644 index 0000000..62d775b --- /dev/null +++ b/src/main/java/daybyquest/global/config/LocalS3Config.java @@ -0,0 +1,51 @@ +package daybyquest.global.config; + +import com.amazonaws.auth.AWSCredentials; +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +@Profile("local") +@Component +public class LocalS3Config { + + private final String accessKey; + + private final String secretKey; + + private final String region; + + private final String bucket; + + private final String endpoint; + + public LocalS3Config(@Value("${aws.credentials.access-key}") final String accessKey, + @Value("${aws.credentials.secret-key}") final String secretKey, + @Value("${aws.region}") final String region, + @Value("${aws.bucket}") final String bucket, @Value("${aws.endpoint}") final String endpoint) { + this.accessKey = accessKey; + this.secretKey = secretKey; + this.region = region; + this.bucket = bucket; + this.endpoint = endpoint; + } + + @Bean + public AmazonS3 amazonS3() { + final EndpointConfiguration endpoint = new EndpointConfiguration(this.endpoint, region); + final AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); + final AmazonS3 amazonS3 = AmazonS3ClientBuilder + .standard() + .withEndpointConfiguration(endpoint) + .withCredentials(new AWSStaticCredentialsProvider(credentials)) + .build(); + amazonS3.createBucket(bucket); + return amazonS3; + } +} diff --git a/src/main/java/daybyquest/global/config/S3Config.java b/src/main/java/daybyquest/global/config/S3Config.java index 102d0e2..96c9b5e 100644 --- a/src/main/java/daybyquest/global/config/S3Config.java +++ b/src/main/java/daybyquest/global/config/S3Config.java @@ -9,7 +9,9 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +@Profile("!local") @Configuration public class S3Config { diff --git a/src/main/resources/application-local-aws.yml b/src/main/resources/application-local-aws.yml new file mode 100644 index 0000000..e8b6dd7 --- /dev/null +++ b/src/main/resources/application-local-aws.yml @@ -0,0 +1,7 @@ +aws: + credentials: + access-key: access_key + secret-key: secret_key + region: us-east-1 + bucket: test-bucket + endpoint: http://127.0.0.1:4566 \ No newline at end of file diff --git a/src/main/resources/application-aws.yml b/src/main/resources/application-prod-aws.yml similarity index 100% rename from src/main/resources/application-aws.yml rename to src/main/resources/application-prod-aws.yml diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 63e3a07..304fa69 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -6,10 +6,10 @@ spring: local: - data - web - - aws + - local-aws prod: - prod-data - web - - aws + - prod-aws performance: default: local \ No newline at end of file