device-deployer/README.md

5.5 KiB

[BlokWorks] Device Deployer Service

사용자에게 Command 를 입력받아 MQTT 를 발행하고 배포된 앱의 정보를 저장하고, 조회하는 Spring boot 기반 Java 애플리케이션입니다.

기반 기술


  • Java 17
  • Spring Boot 3.1.3
  • Gradle 8.2.1

주요 의존성


  • MQTT
  • PostgreSQL

빌드


프로젝트 패키징

Gradle을 사용하여 패키징합니다.

$ ./gradlew clean build -x test

도커 빌드

FROM amazoncorretto:17.0.6-al2023
EXPOSE 8081
ADD ./build/libs/*.jar device-deployer.jar
ENTRYPOINT ["java", "-jar", "/device-deployer.jar"]

Image Registry로 사용할 AWS ECR에 로그인을 합니다.

$ aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 003960268191.dkr.ecr.ap-northeast-2.amazonaws.com

패키징된 jar 파일을 Docker image로 빌드합니다.

$ docker build --platform linux/amd64 -t device-deployer:0.0.7-SNAPSHOT .
$ docker tag sdt-cloud/device-deployer:0.0.7-SNAPSHOT 003960268191.dkr.ecr.ap-northeast-2.amazonaws.com/sdt-cloud/device-deployer:{{version}}

이미지 업로드

빌드 및 태깅된 Docker image를 Image Registry에 업로드 합니다.

$ docker push 003960268191.dkr.ecr.ap-northeast-2.amazonaws.com/sdt-cloud/device-deployer:{{version}} 

구동


사전 구동 애플리케이션 및 모듈

  1. MQTT 컨테이너 모듈
    • 사용자의 Command 를 Edge(Device)에게 전달하기 위한 Message Queue 입니다.
  2. PostgreSQL 컨테이너 모듈
    • 실행된 Command 의 정보를 저장하고 조회할 수 있는 RDB 입니다.

설정 정보

설정 정보 등록은 설정 관리 애플리케이션의 POST /configuration API 를 이용합니다.

옵션 설명 필수 여부 기본값
server.port 서버 포트 O -
inbound.mqtt.url MQTT 모듈의 url O -
inbound.mqtt.username MQTT 모듈의 username O -
inbound.mqtt.password MQTT 모듈의 password O -
inbound.mqtt.topics MQTT 모듈이 구독할 Inference 결과 데이터 topic O -
spring.datasource.uri PostgreSQL 모듈의 연결을 위한 URI O -
spring.datasource.username PostgreSQL 모듈의 username O -
spring.datasource.pssword PostgreSQL 모듈의 password O -

배포

배포는 k8s manifest로 작성한 deploy.yaml을 이용합니다. Deployment 오브젝트에 반드시 명시해야 하는 설정 정보(env)는 아래와 같습니다.

옵션 설명 필수 여부 예시
SPRING_PROFILES_ACTIVE 구동 profile O k8s
SERVER_PORT 애플리케이션이 등록될 포트 O 8085
POSTGRES_CREDENTIALS_URL PostgreSQL의 URL O jdbc:postgresql://localhost:5432/blokworks
POSTGRES_CREDENTIALS_USERNAME PostgreSQL의 계정 O sdt
POSTGRES_CREDENTIALS_PASSWORD PostgreSQL의 비밀번호 O 2xxxxx
IAM_AMQP_HOST RabbitMQ의 URL O rabbitmq.sdt-cloud.svc.cluster.local
IAM_AMQP_PORT RabbitMQ의 포트 O 5672
IAM_AMQP_USERNAME RabbitMQ에 접속할 계정 O guest
IAM_AMQP_PASSWORD RabbitMQ에 접속할 비밀번호 O guest