Skip to content

[FEATURE] AWS 리소스 추가 연동 #170

@hyobin-yang

Description

@hyobin-yang

AWS 리소스 추가 연동 계획

by @syeongkim 🤩

📋 개요

AgenticCP 플랫폼에 추가 AWS 리소스 연동을 위한 우선순위별 개발 계획서입니다.

현재 연동 상태

  • VPC: 가상 네트워크 관리
  • EC2 (VM): 가상 머신 생명주기 관리
  • S3 (Object Storage): 객체 스토리지 관리

연동 목표

현재 3개의 AWS 리소스가 연동되어 있으며, 서비스 배포 및 운영을 위해 추가로 7-9개의 AWS 리소스를 단계적으로 연동합니다.


🎯 우선순위별 연동 계획

우선순위 P0: 서비스 배포 필수 기능 (3개)

서비스 배포를 위해 반드시 필요한 핵심 리소스입니다.

1. RDS (Relational Database Service)

연동 목적: 서비스 배포 시 데이터베이스 인스턴스 관리

핵심 기능:

  • RDS 인스턴스 생성/수정/삭제
  • RDS 인스턴스 조회 및 상태 모니터링
  • RDS 스냅샷 생성/복원
  • RDS 파라미터 그룹 관리
  • RDS 보안 그룹 연동
  • RDS 태그 관리

기술 요구사항:

  • AWS SDK: software.amazon.awssdk.services.rds
  • 주요 클라이언트: RdsClient
  • 주요 API: CreateDBInstance, DescribeDBInstances, ModifyDBInstance, DeleteDBInstance

연동 시나리오:

  • EC2 인스턴스와 함께 웹 애플리케이션 스택 구성
  • VPC 내부에서 RDS 인스턴스 생성 및 EC2와 연동
  • 백업 및 복원 기능을 통한 데이터 보호

2. ELB (Elastic Load Balancer)

연동 목적: VPC, EC2와 함께 사용되어 네트워크 연동 및 로드 밸런싱 기능 제공

핵심 기능:

  • Application Load Balancer (ALB) 생성/수정/삭제
  • Network Load Balancer (NLB) 생성/수정/삭제
  • Classic Load Balancer (CLB) 생성/수정/삭제
  • 타겟 그룹 관리
  • 리스너 규칙 관리
  • 헬스 체크 설정
  • ELB 태그 관리

기술 요구사항:

  • AWS SDK: software.amazon.awssdk.services.elasticloadbalancingv2
  • 주요 클라이언트: ElasticLoadBalancingV2Client
  • 주요 API: CreateLoadBalancer, DescribeLoadBalancers, ModifyLoadBalancerAttributes, DeleteLoadBalancer

연동 시나리오:

  • VPC 내부에서 ALB 생성
  • EC2 인스턴스를 타겟으로 등록
  • 다중 가용 영역에 걸친 고가용성 구성
  • SSL/TLS 인증서 연동

3. IAM (Identity and Access Management)

연동 목적: AgenticCP에서 생성/관리되는 리소스들에 대한 권한 관리

핵심 기능:

  • IAM 역할(Role) 생성/수정/삭제
  • IAM 정책(Policy) 생성/수정/삭제
  • IAM 사용자(User) 조회
  • 역할-정책 연결 관리
  • EC2 인스턴스 프로파일 생성 및 연결
  • RDS, S3 등 리소스별 권한 정책 관리
  • IAM 태그 관리

기술 요구사항:

  • AWS SDK: software.amazon.awssdk.services.iam
  • 주요 클라이언트: IamClient
  • 주요 API: CreateRole, AttachRolePolicy, CreateInstanceProfile, AddRoleToInstanceProfile

연동 시나리오:

  • EC2 인스턴스 생성 시 S3 접근 권한이 있는 역할 부여
  • RDS 인스턴스에 Secrets Manager 접근 권한 부여
  • Lambda 함수 실행 역할 생성 및 관리
  • 크로스 서비스 권한 관리 (예: EC2 → S3, Lambda → DynamoDB)

우선순위 P1: 운영 안정성 및 관리 효율성 (3개)

서비스 배포 후 안정적인 운영을 위한 필수 기능입니다.

4. CloudWatch

연동 목적: 클라우드 리소스들에 대한 모니터링 기능 제공

핵심 기능:

  • CloudWatch 메트릭 수집 및 조회
  • CloudWatch 알람(Alarm) 생성/수정/삭제
  • CloudWatch 로그 그룹 관리
  • CloudWatch 대시보드 생성 및 관리
  • 커스텀 메트릭 발행
  • 리소스별 메트릭 모니터링 (EC2, RDS, ELB 등)

기술 요구사항:

  • AWS SDK: software.amazon.awssdk.services.cloudwatch, software.amazon.awssdk.services.cloudwatchlogs
  • 주요 클라이언트: CloudWatchClient, CloudWatchLogsClient
  • 주요 API: GetMetricStatistics, PutMetricAlarm, CreateLogGroup, PutLogEvents

연동 시나리오:

  • EC2 인스턴스 CPU/메모리 사용률 모니터링
  • RDS 인스턴스 연결 수, CPU 사용률 모니터링
  • ELB 타겟 헬스 체크 실패 알람 설정
  • 애플리케이션 로그 수집 및 분석

5. Route 53

연동 목적: 도메인 주소를 부여함으로써 접속 안정성 보장

핵심 기능:

  • 호스팅 영역(Hosted Zone) 생성/수정/삭제
  • DNS 레코드 생성/수정/삭제 (A, AAAA, CNAME, MX 등)
  • 헬스 체크 생성 및 관리
  • 라우팅 정책 설정 (Simple, Weighted, Latency, Failover 등)
  • 도메인 등록 상태 조회
  • Route 53 태그 관리

기술 요구사항:

  • AWS SDK: software.amazon.awssdk.services.route53
  • 주요 클라이언트: Route53Client
  • 주요 API: CreateHostedZone, ChangeResourceRecordSets, CreateHealthCheck, ListHostedZones

연동 시나리오:

  • ELB 엔드포인트에 도메인 연결
  • 다중 리전 배포 시 지연 시간 기반 라우팅
  • 헬스 체크 기반 장애 조치(Failover) 구성
  • 서브도메인을 통한 환경별 분리 (dev, staging, prod)

6. EKS (Elastic Kubernetes Service)

연동 목적: 멀티클라우드 플랫폼의 장점을 가장 극대화할 수 있는 컨테이너 오케스트레이션 서비스

핵심 기능:

  • EKS 클러스터 생성/수정/삭제
  • EKS 노드 그룹(Node Group) 관리
  • EKS 클러스터 상태 모니터링
  • EKS 클러스터 버전 업그레이드
  • EKS 클러스터 로깅 설정
  • EKS 태그 관리
  • Kubernetes API 연동 (선택적)

기술 요구사항:

  • AWS SDK: software.amazon.awssdk.services.eks
  • 주요 클라이언트: EksClient
  • 주요 API: CreateCluster, DescribeCluster, UpdateClusterVersion, DeleteCluster
  • Kubernetes Java Client (선택적): io.kubernetes:client-java

연동 시나리오:

  • VPC 내부에 EKS 클러스터 생성
  • EC2 기반 워커 노드 그룹 구성
  • 컨테이너 기반 애플리케이션 배포
  • 멀티 클라우드 Kubernetes 통합 (향후 GCP GKE, Azure AKS 연동)

우선순위 P2: 고성능 및 서버리스 아키텍처 옵션 (3개)

서비스 배포 시 필수는 아니지만, 다양한 아키텍처 옵션을 제공하는 리소스입니다.

7. DynamoDB

연동 목적: NoSQL 데이터베이스 서비스로 고성능, 확장 가능한 데이터 저장소 제공

핵심 기능:

  • DynamoDB 테이블 생성/수정/삭제
  • DynamoDB 글로벌 보조 인덱스(GSI) 관리
  • DynamoDB 스트림 관리
  • DynamoDB 백업 및 복원
  • DynamoDB 태그 관리
  • 테이블 메트릭 모니터링

기술 요구사항:

  • AWS SDK: software.amazon.awssdk.services.dynamodb
  • 주요 클라이언트: DynamodbClient
  • 주요 API: CreateTable, DescribeTable, UpdateTable, DeleteTable

연동 시나리오:

  • 서버리스 애플리케이션의 데이터 저장소
  • Lambda 함수와 연동하여 이벤트 기반 처리
  • 고성능 읽기/쓰기가 필요한 애플리케이션

8. Lambda

연동 목적: 서버리스 컴퓨팅 서비스로 이벤트 기반 애플리케이션 구축

핵심 기능:

  • Lambda 함수 생성/수정/삭제
  • Lambda 함수 코드 배포
  • Lambda 함수 버전 및 별칭 관리
  • Lambda 함수 환경 변수 관리
  • Lambda 함수 트리거 설정 (S3, DynamoDB, API Gateway 등)
  • Lambda 함수 실행 역할 관리
  • Lambda 함수 태그 관리

기술 요구사항:

  • AWS SDK: software.amazon.awssdk.services.lambda
  • 주요 클라이언트: LambdaClient
  • 주요 API: CreateFunction, UpdateFunctionCode, Invoke, DeleteFunction

연동 시나리오:

  • S3 이벤트 기반 이미지 처리
  • DynamoDB 스트림 기반 데이터 처리
  • API Gateway와 연동한 서버리스 API 구축
  • 스케줄 기반 작업 실행

9. ElastiCache

연동 목적: 인메모리 캐싱 서비스로 애플리케이션 성능 향상

핵심 기능:

  • ElastiCache 클러스터 생성/수정/삭제
  • Redis/Memcached 클러스터 관리
  • 클러스터 노드 관리
  • 클러스터 파라미터 그룹 관리
  • 클러스터 스냅샷 관리
  • ElastiCache 태그 관리

기술 요구사항:

  • AWS SDK: software.amazon.awssdk.services.elasticache
  • 주요 클라이언트: ElastiCacheClient
  • 주요 API: CreateCacheCluster, DescribeCacheClusters, ModifyCacheCluster, DeleteCacheCluster

연동 시나리오:

  • RDS 데이터베이스 쿼리 결과 캐싱
  • 세션 스토어로 활용
  • 실시간 데이터 처리 성능 향상
  • EC2 애플리케이션과 연동

🏗️ 구현 아키텍처

공통 구현 패턴

각 AWS 리소스는 다음 패턴을 따릅니다:

domain/cloud/
├── adapter/outbound/aws/{resource}/
│   ├── Aws{Resource}ManagementAdapter.java    # 생명주기 관리
│   ├── Aws{Resource}DiscoveryAdapter.java     # 리소스 조회
│   ├── Aws{Resource}Mapper.java                # 도메인-API 매핑
│   └── Aws{Resource}ErrorTranslator.java      # 에러 변환 (선택적)
├── port/outbound/{resource}/
│   ├── {Resource}ManagementPort.java          # 생명주기 포트
│   └── {Resource}DiscoveryPort.java            # 조회 포트
├── service/{resource}/
│   ├── {Resource}PortRouter.java               # 포트 라우팅
│   └── {Resource}UseCaseService.java           # 유스케이스 서비스
└── controller/
    └── {Resource}Controller.java                # REST API 컨트롤러

공통 설정

// config/Aws{Resource}Config.java
@Configuration
public class Aws{Resource}Config {
    
    @Bean
    public {Resource}Client {resource}Client() {
        // ThreadLocal 기반 자격증명 사용
    }
    
    public {Resource}Client create{Resource}Client(
        CloudSessionCredential session, 
        String region
    ) {
        // 세션 기반 클라이언트 생성
    }
}

Capability 등록

// config/AwsCapabilityConfig.java
@PostConstruct
public void initialize{Resource}Capabilities() {
    CspCapability capability = CspCapability.builder()
        .supportsStart(true/false)
        .supportsStop(true/false)
        .supportsTerminate(true/false)
        .supportsTagging(true/false)
        .supportsListByTag(true/false)
        .build();
    
    capabilityRegistry.register(
        ProviderType.AWS,
        "{Service}",      // 예: "RDS", "ELB", "IAM"
        "{Resource}",     // 예: "DBInstance", "LoadBalancer", "Role"
        capability
    );
}

📚 참고 자료

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions