CodeBuild의 기본 빌드 컨테이너는 퍼블릭 인터넷에 연결된다. npm, pip, Docker Hub에서 패키지를 가져오고, ECR에 이미지를 push한다. 이것은 대부분의 상황에서 충분하다. 하지만 두 가지 상황이 이 가정을 깬다.
첫 번째: 프라이빗 리소스 접근. RDS Aurora가 Private 서브넷에 있고, 빌드가 DB 마이그레이션을 실행해야 한다. 퍼블릭 인터넷에서 Private 서브넷의 DB에는 접근할 수 없다. 빌드가 VPC 안에 있어야 한다.
두 번째: ARM(Graviton) 워크로드. ECS나 EKS 클러스터가 Graviton 인스턴스를 쓴다면, 빌드도 ARM 환경에서 해야 arm64 이미지를 만들 수 있다. x86에서 arm64를 QEMU로 에뮬레이션해 빌드할 수 있지만, 느리고 불안정하다.
이 두 제약을 해결하는 것이 오늘의 주제다.
CodeBuild가 VPC 모드로 실행되면, 빌드 시작 시점에 지정된 서브넷에 **ENI(Elastic Network Interface)**를 동적으로 생성한다. 빌드 컨테이너는 이 ENI를 통해 VPC 내부 리소스에 접근한다. 빌드가 끝나면 ENI는 삭제된다.