AWS CDK의 Assets(자산)은 로컬 머신에 있는 파일, 디렉터리 또는 Docker 이미지를 배포 과정에서 자동으로 AWS 클라우드(S3 또는 ECR)로 업로드하고 관리하는 기능이다.
자산이 업로드되는 과정은 다음과 같은 순서를 따른다.
cdk synth): 로컬 파일의 경로를 확인하고 내용물을 기반으로 해시(Hash)값을 생성한다.cdk deploy): 파일 자산은 부트스트래핑 시 생성된 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();
Dockerfile이 있는 디렉터리를 지정하면 CDK가 docker build를 수행하고 이미지를 ECR에 푸시한다.
// 현재 디렉터리의 "lib/docker" 폴더에 있는 Dockerfile을 빌드한다.
ApplicationLoadBalancedFargateService.Builder.create(this, "MyService")
.taskImageOptions(ApplicationLoadBalancedTaskImageOptions.builder()
.image(ContainerImage.fromAsset("lib/docker")) // 로컬 디렉터리 지정
.build())
.build();
Assets 기능이 작동하려면 이전에 배포 환경에 Bootstrap이 완료되어 있어야 한다.
이 모든 기반 시설이 부트스트래핑을 통해 생성된 CDKToolkit 스택에 포함되어있다.
Assets는 로컬의 소스 코드를 클라우드의 인프라와 연결해주는 자동화된 운반책이다. 개발자는 경로만 지정해주면 나머지는 CDK가 알아서 해준다.