-
Notifications
You must be signed in to change notification settings - Fork 0
Description
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
);
}