AWS CDK: Assets

김기현·2026년 2월 1일

AWS

목록 보기
38/44

AWS CDK의 Assets(자산)은 로컬 머신에 있는 파일, 디렉터리 또는 Docker 이미지를 배포 과정에서 자동으로 AWS 클라우드(S3 또는 ECR)로 업로드하고 관리하는 기능이다.


1. Assets의 핵심 개념

클라우드와 로컬의 연결점

  • 코드로 인프라를 정의할 때 그 인프라 위에서 돌아갈 실제 프로그램(Lmabda 소스 코드, Docker 이미지 등)은 개발자의 로컬 디렉터리에 존재한다.
  • CDK Asstes는 이 로컬 자산을 배포 가능한 형태(Artifact)로 패키징하여 AWS가 접근할 수 있는 저장소로 옮겨주는 역할을 수행한다.

자산의 종류

  1. File Assets: Lambda 함수의 소스 코드(Zip 파일), 정적 웹사이트 파일, CloudFormation 템플릿 파일 등이 S3 버킷으로 업로드된다.
  2. Docker Image Assets: Dockerfile이 포함된 디렉터리를 빌드하여 생성된 이미지가 ECR 리포지토리로 푸시된다.

2. Assets의 동작 원리: 라이프사이클

자산이 업로드되는 과정은 다음과 같은 순서를 따른다.

  1. Systhesis(cdk synth): 로컬 파일의 경로를 확인하고 내용물을 기반으로 해시(Hash)값을 생성한다.
  2. Packaging: Lambda 코드는 Zip 파일로 압축되고 Docker 이미지는 로컬에서 빌드된다.
  3. Uploading(cdk deploy): 파일 자산은 부트스트래핑 시 생성된 S3 버킷으로 업로드된다.
  4. Referencing: 최종 생성된 CloudFormation 템플릿에는 업로드된 S3 주소나 ECR 이미지 URI가 자동으로 기록되어 Lambda나 ECS 리소스가 이를 참조하게 된다.

3. Java 코드 예제

3.1. Lambda 코드 자산 (S3 업로드)

로컬의 lambda디렉터리에 있는 코드를 자동으로 S3에 올리고 Lambda 함수를 생성하는 방법이다.

// lambda 디렉터리 전체를 자산으로 지정한다.
// CDK가 배포 시 이 폴더를 Zip으로 묶어 S3에 자동으로 올린다.
Function.Builder.create(this, "MyLambda")
        .runtime(Runtime.JAVA_17)
        .handler("com.example.Handler")
        .code(Code.fromAsset("lambda/target/my-app.jar")) // 로컬 경로 지정
        .build();

3.2. Docker 이미지 자산 (ECR 업로드)

Dockerfile이 있는 디렉터리를 지정하면 CDK가 docker build를 수행하고 이미지를 ECR에 푸시한다.

// 현재 디렉터리의 "lib/docker" 폴더에 있는 Dockerfile을 빌드한다.
ApplicationLoadBalancedFargateService.Builder.create(this, "MyService")
        .taskImageOptions(ApplicationLoadBalancedTaskImageOptions.builder()
                .image(ContainerImage.fromAsset("lib/docker")) // 로컬 디렉터리 지정
                .build())
        .build();

4. Bootstrap과의 관계

Assets 기능이 작동하려면 이전에 배포 환경에 Bootstrap이 완료되어 있어야 한다.

  • S3 버킷: 자산 파일들을 보관하기 위한 저장소가 필요하다.
  • ECR 리포지토리: Docker 이미지를 보관하기 위한 저장소가 필요하다.
  • IAM Roles: CDK CLI가 사용자의 로컬 파일을 AWS 저장소에 업로드할 수 있는 권한이 필요하다.

이 모든 기반 시설이 부트스트래핑을 통해 생성된 CDKToolkit 스택에 포함되어있다.


5. Assets 기능의 장점

  1. 배포 자동화: 사용자가 직접 S3 버킷을 만들고 파일을 올린 뒤 주소를 복사해 넣는 수동 작업이 사라진다.
  2. 버전 관리와 캐싱: 파일 내용이 변하지 않으면 해시값이 동일하게 유지되어 업로드를 생략(캐싱)하므로 배포 속도가 빨라진다.
  3. 보안: CDK가 관리하는 전용 버킷과 리포지토리를 사용하므로 자산 노출 위험을 최소화한다.

6. 요약

Assets는 로컬의 소스 코드를 클라우드의 인프라와 연결해주는 자동화된 운반책이다. 개발자는 경로만 지정해주면 나머지는 CDK가 알아서 해준다.

profile
백엔드 개발자를 목표로 공부하는 대학생

0개의 댓글