AwsS3Manager::downloadParallel | begin - "Missing credentials in config, if using AWS_CONFIG_FILE, s
Fix Plan: AWS SDK v3 전체 마이그레이션 + Root-level 버전 관리
Changes#
cupixworks: applications/agents/pnpm-workspace.yaml#
- What: catalog에
@aws-sdk/client-s3,@aws-sdk/lib-storage,@aws-sdk/client-sqs,@aws-sdk/client-ecs,@aws-sdk/client-auto-scaling버전 등록 - Why: 모든 agent 패키지가 동일한 AWS SDK v3 버전을 사용하도록 중앙 관리
- Lines: catalog 섹션 (line 4-14)
cupixworks: applications/agents/packages/base/package.json#
- What:
aws-sdk제거,@aws-sdk/client-s3,@aws-sdk/lib-storage,@aws-sdk/client-sqs,@aws-sdk/client-ecscatalog 참조로 교체 - Why: base 패키지가 S3, SQS, ECS 3개 AWS 서비스를 직접 사용
- Lines: dependencies 섹션 (line 4-15)
cupixworks: applications/agents/packages/base/src/manager/aws-s3.manager.ts#
- What:
import * as AWS from 'aws-sdk'→@aws-sdk/client-s3+@aws-sdk/lib-storage.new AWS.S3({...})→new S3Client({...}).s3.upload({...}, callback)/s3.upload({...}).promise()→new Upload({ client, params }).done(). 타입AWS.S3→S3Client - Why: v3 마이그레이션 core — S3 upload 기능
- Lines: 1-183
cupixworks: applications/agents/packages/base/src/manager/aws-ecs.manager.ts#
- What:
import AWS from 'aws-sdk'→@aws-sdk/client-ecs.new AWS.ECS({...})→new ECSClient({...}). callback 패턴 →client.send(new XxxCommand(params))패턴.AWS.ECS.StopTaskRequest등 타입 → v3 Command input types.AWS.AWSError→ 일반Error - Why: ECS 관리 (stopTask, runTask, listTasks)
- Lines: 1-237
cupixworks: applications/agents/packages/base/src/manager/aws-queue.manager.ts#
- What:
import AWS from 'aws-sdk'→@aws-sdk/client-sqs.new AWS.SQS({...})→new SQSClient({...}). callback 패턴 →client.send(new XxxCommand(params)).AWS.SQS.Message→Messagefrom@aws-sdk/client-sqs.AWS.SQS.QueueAttributeMap→Record<string, string>.AWS.AWSError→ 일반Error - Why: SQS 큐 관리 (receive, delete, getAttributes, changeVisibility)
- Lines: 1-163
cupixworks: applications/agents/packages/base/src/base-service.ts#
- What:
Array<AWS.SQS.Message>→Message[]with import from@aws-sdk/client-sqs. 모든AWS.SQS.Message참조를Message로 교체 (7곳) - Why: base-service가 SQS Message 타입을 직접 사용
- Lines: 18-19, 37-38, 123, 153, 225
cupixworks: applications/agents/packages/cupix-tesla-compute-agent/package.json#
- What:
aws-sdk: "^2.1407.0"제거,@aws-sdk/client-sqs,@aws-sdk/client-ecs,@aws-sdk/client-auto-scalingcatalog 참조로 교체 - Why: compute-agent가 SQS, ECS, AutoScaling 3개 서비스를 직접 사용
- Lines: dependencies 섹션 (line 17-22)
cupixworks: applications/agents/packages/cupix-tesla-compute-agent/src/model/qmAws.ts#
- What:
import AWS from 'aws-sdk'→@aws-sdk/client-sqs,@aws-sdk/client-ecs,@aws-sdk/client-auto-scaling.new AWS.SQS()→new SQSClient(),new AWS.ECS()→new ECSClient(),new AWS.AutoScaling()→new AutoScalingClient(). 12개 메서드를 callback → Command 패턴으로 변환. 모든 AWS 타입 참조 교체 - Why: compute-agent의 핵심 AWS 오케스트레이션 클래스
- Lines: 1-351
cupixworks: applications/agents/packages/cupix-tesla-compute-agent/src/model/qmJob.ts#
- What:
import AWS from 'aws-sdk'제거.AWS.SQS.Message→Messagefrom@aws-sdk/client-sqs.AWS.ECS.ContainerOverride→ContainerOverridefrom@aws-sdk/client-ecs.AWS.ECS.Task→Taskfrom@aws-sdk/client-ecs - Why: type-only 변경 — SQS Message와 ECS 타입 참조
- Lines: 6, 18, 45, 163
cupixworks: applications/agents/packages/cupix-tesla-compute-agent/src/manager/job.manager.ts#
- What:
import AWS from 'aws-sdk'제거.AWS.SQS.Message[]→Message[]from@aws-sdk/client-sqs.AWS.ECS.Task→Taskfrom@aws-sdk/client-ecs - Why: type-only 변경
- Lines: 6, 64, 96
cupixworks: applications/agents/packages/cupix-tesla-forge-agent/src/forge-service.ts#
- What:
Array<AWS.SQS.Message>→Message[]with import from@aws-sdk/client-sqs. 모든AWS.SQS.Message참조를Message로 교체 (8곳) - Why: downstream type 전파 — forge-agent는 aws-sdk 직접 dependency 없이 global type 사용 중
- Lines: 25-26, 52-53, 64, 106, 162, 329
cupixworks: applications/agents/packages/cupix-tesla-potree-agent/src/potree-service.ts#
- What:
Array<AWS.SQS.Message>→Message[]with import from@aws-sdk/client-sqs. 모든AWS.SQS.Message참조를Message로 교체 (7곳) - Why: downstream type 전파 — potree-agent는 aws-sdk 직접 dependency 없이 global type 사용 중
- Lines: 23-24, 44-45, 90, 180, 444
cupixworks: applications/agents/packages/cupix-tesla-forge-agent/package.json#
- What:
@aws-sdk/client-sqs: "catalog:"추가 (SQS Message 타입 사용을 위해) - Why: forge-agent가 SQS Message 타입을 직접 import하려면 dependency 필요
- Lines: dependencies 섹션
cupixworks: applications/agents/packages/cupix-tesla-potree-agent/package.json#
- What:
@aws-sdk/client-sqs: "catalog:"추가 (SQS Message 타입 사용을 위해) - Why: potree-agent가 SQS Message 타입을 직접 import하려면 dependency 필요
- Lines: dependencies 섹션
cupixworks: applications/agents/packages/cupix-pano-postprocessor/package.json#
- What:
@aws-sdk/client-s3,@aws-sdk/lib-storage를 catalog 참조로 변경 (현재 직접 버전 지정) - Why: root-level 버전 관리로 통일
- Lines: dependencies 섹션 (line 18-19)
cupixworks: applications/agents/packages/base/src/manager/aws-s3.manager.spec.ts#
- What:
import * as AWS from 'aws-sdk'→@aws-sdk/client-s3+@aws-sdk/lib-storage. vi.mock 패턴 변경:vi.mock('aws-sdk')→vi.mock('@aws-sdk/client-s3')+vi.mock('@aws-sdk/lib-storage').AWS.S3생성자 mock →S3Clientmock.mockS3.upload()→Uploadmock - Why: 테스트가 v3 mock 패턴을 사용해야 함
- Lines: 1-428
cupixworks: applications/agents/packages/base/src/manager/aws-ecs.manager.spec.ts#
- What:
import AWS from 'aws-sdk'→@aws-sdk/client-ecs. vi.mock 패턴 변경. callback mock →send()mock - Why: 테스트가 v3 mock 패턴을 사용해야 함
- Lines: 1-435
cupixworks: applications/agents/package.json#
- What:
pnpm.onlyBuiltDependencies에서aws-sdk제거 - Why: v2 제거 후 더 이상 빌드 불필요
- Lines: pnpm.onlyBuiltDependencies 섹션 (line 85)
Acceptance Criteria#
-
import.*aws-sdk가 전체 agents 소스에서 0건 (spec 포함) -
@aws-sdk/client-s3,@aws-sdk/client-sqs,@aws-sdk/client-ecs,@aws-sdk/client-auto-scalingimport가 해당 파일에 존재 -
pnpm-workspace.yamlcatalog에@aws-sdk/*5개 패키지 등록 - base, pano-postprocessor, tesla-compute-agent의
package.json에서aws-sdk제거 - forge-agent, potree-agent의
package.json에@aws-sdk/client-sqs: "catalog:"추가 -
pnpm exec eslintlint 통과 (changed files) -
pnpm exec nx run base -t test테스트 통과
Tests#
- 기존 테스트:
aws-s3.manager.spec.ts,aws-ecs.manager.spec.ts,base-service.spec.ts - 테스트 마이그레이션: aws-sdk v2 mock을 v3 mock으로 전환 필요