AWS CodeBuild 로 파이썬 코드 빌드하기 (feat. 요금, 빌드시간)
AWS CodeBuild란?
AWS에서 제공하는 빌드 서비스 이다. 컴파일 및 테스트 등을 실행할 수 있다.
아래 사진이 AWS의 CI/CD 환경이다. 이중에서 CodeBuild는 소스 Repository인 CodeCommit에서 소스를 받아와서 buildspec.yml 파일내용에 따라 빌드, 테스트를 하고 최종 Artifacts를 S3에 저장하는 역할을 한다. 즉 최신 코드를 받아와서 buildspec에 따라 빌드한후 결과를 S3에 저장한다.
여기서 Repository는 CodeCommit 대신 Github 등을 사용할수 있다. S3에 저장된 Artifacts는 CodeDeploy 를 통해서 EC2에 배포하면 되면 전체 CI/CD 가 완성된다.
CodeBuild로 파이썬 빌드하기
파이썬은 별도의 컴파일이 필요없기 때문에 S3에 저장해주기만 하면 된다. 하지만 이번 예제에서는 빌드시에 적절한 설정파일을 만들어서 zip으로 압축한 후에 S3에 업로드 한다. WEB 서버라고 가정했을때 통신할 WAS 주소는 변경될수 있기 때문에, 소스코드에 넣는것은 적절하지 않고, 빌드시에 관련정보를 받아서 설정파일을 생성하는 것이다.
이를 위해서 아래를 진행한다.
- CodeCommit Repository 생성
- buildspec.yml 생성 및 push
- s3 버킷 생성
- Build project 생성
- Build 실행
1. CodeCommit Repository 생성
이전글을 참고해서 CodeCommit 에 어플리케이션 repository를 생성하고 push 한다.
2. buildspec.yml 생성 및 push
buildspec.yml 은 아래처럼 작성했다. 핵심이 되는 내용은 phases / build / commands 부분이다. was의 주소가 저장된 config.json 파일을 생성하는 동작을 한다. buildspec.yml 파일을 소스코드 최상위 디렉토리에 저장하고 CodeCommit에 push 한다.
version: 0.2
phases:
install:
runtime-versions:
python: 3.7
build:
commands:
- "echo '{ \"was\": \"http://192.168.68.112:5000/\"}' > config.json"
artifacts:
files:
- '**/*'
name: flask-web-$(date +%Y-%m-%d)
그외 buildspec 에 대한 더 자세한 내용은 공식문서를 참고한다.
2. s3 버킷 생성
빌드한 결과가 저장될 S3 버킷을 생성한다. 버킷명은 상관없다. 원하는 이름으로 생성한다.
3. Build project 생성
CodeBuild 메뉴 진입 -> Build projects -> Create build project -> 정보 입력후 저장
- Source: AWS CodeCommit 및 Repository 선택
- Environment
- OS: Amazon Linux 2
- Runtime: Standard
- Image: aws/.../3.0
- Artifacts
- Type: S3
- Bucket name: 생성한 버킷 선택
- Path: 경로 입력
- Artifacts packing: Zip
4. Build 실행
CodeBuild 메뉴진입 -> Build projects -> 생성한 project 선택 -> Start build
빌드 실패시 Phase details 또는 Buid logs 메뉴의 내용을 확인한다.
CodeBuild 빌드시간은 얼마나 걸릴까?
아래가 Build history 이다. 자세히 보면 첫번째 Build가 1분30초 정도 걸렸고, 그 외에는 30초 정도 걸렸다. 아마도 첫번째 빌드를 하면서 어떤 정보가 캐싱되거나, 리소스가 ready 되기 때문에 이후 빌드는 시간이 단축된것 같다.
Phase Detail 을 보면 각 빌드 단계별로 걸린 시간을 볼수 있는데, 아래가 1분30초 걸린 빌드의 각 단계별 빌드 시간이다. 자세히 보면 Provisioning이 86초, 그 외에는 10초 정도 걸렸다. 이것 외에 30초 정도 걸린 history 들의 내용도 살펴보면 Provisioning이 20초 그 외가 10초 정도 걸렸다. 내가 빌드한 코드는 파일 2개짜리 간단한 코드이고, 빌드 command (echo 만 있음) 도 굉장히 간단하기 때문에 아래 시간이 최소시간이라고 봐도 무방할 것 같다.
따라서 아무리 작은 사이즈의 어플리케이션이더라도, 최초 빌드는 1분30초, 이후 빌드는 30초 내외가 걸리며, 코드 사이즈나 Build Command 등에 따라서 시간이 더 걸릴 것으로 생각된다.
CodeBuild 요금은?
컴퓨팅 유형 및 빌드 시간에 따라서 요금이 계산되며, 한달에 100분까지 무료이다. 최소 30초가 걸린다고 했을때, 100분/30초 = 200번 정도는 무료로 빌드를 할 수 있다 (생각보다 많지 않다)