[AWS] DevTools Evangelism CodeBuild 에디션 [CodeBuild]
Source: Dev.to
소개
이전 글에서 여러 AWS DevTools를 소개했었는데, 이번에는 AWS CodeBuild를 소개합니다.
AWS CodeBuild는 작업을 배포하기 전에 테스트 및 소스 코드 컴파일과 같은 일상적인 작업을 자동화하는 데 자주 사용됩니다.
AWS CodeCommit 및 AWS CodeDeploy와 함께 동일한 Code 시리즈의 일부로 자주 언급됩니다.
참고: 이 글은 Qiita Advent Calendar의 일부가 아닙니다.
전제 조건
많은 사람들이 AWS CodePipeline이나 GitHub Actions와 같은 도구를 사용해 자동 실행을 설정합니다.
이 글은 DevTools에 대한 인식을 넓히는 것이 목적이므로, CodeBuild를 직접 사용하는 기본 사항에 초점을 맞춥니다.
AWS CodeBuild란?
AWS CodeBuild는 S3, AWS CodeCommit 또는 GitHub에 저장된 소스 코드를 컴파일하고 단위 테스트를 실행합니다.
CI/CD를 구현할 때 아티팩트 저장소를 업데이트하고 배포 전 코드를 테스트·컴파일하는 데 일반적으로 사용됩니다.

이번 글에서 시도할 내용
CodeBuild로 AWS CloudFormation Guard 테스트를 실행합니다.
AWS CloudFormation Guard란?
CloudFormation 템플릿의 정의가 의도한 규칙을 만족하는지 검증하는 도구입니다.
YAML 형식으로 정의 규칙을 작성하고, Guard가 템플릿 내용과 규칙이 일치하는지 확인합니다.
규칙 예시
- Lambda 함수의 timeout이 ≤ 90 초인지 확인합니다.
- 런타임을 특정 버전으로 제한합니다.
CodeBuild 설정
CodeBuild 프로젝트 생성
-
AWS CodeBuild 콘솔에서 Create Project 버튼을 클릭합니다.

-
프로젝트 이름을 입력하고 기본 설정을 그대로 둡니다.

-
source provider를 선택합니다 (앞서 만든 AWS CodeCommit 저장소).

-
환경에서는 managed image를 선택하고, Lambda를 컴퓨트 유형으로 지정합니다 (최소 구성).


-
Use buildspec file 옵션을 활성화하여 빌드가 저장소에 있는
buildspec.yml을 따르게 합니다.
테스트 객체 만들기
예제에서는 저장소에 다음 세 파일이 필요합니다.
- Lambda 함수를 정의하는 CloudFormation 템플릿.
- 원하는 제약 조건을 표현한 Cfn‑Guard 규칙 파일.
- Guard를 실행하는 방법을 알려주는 buildspec.yml.
CloudFormation 템플릿
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Lambda function CloudFormation template'
Resources:
MyLambdaFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: MyLambdaFunction
Runtime: python3.9
Handler: index.lambda_handler
Role: !GetAtt LambdaExecutionRole.Arn
Timeout: 30
Code:
ZipFile: |
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': 'Hello from Lambda!'
}
LambdaExecutionRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: lambda.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Outputs:
LambdaFunctionArn:
Description: 'Lambda Function ARN'
Value: !GetAtt MyLambdaFunction.Arn
Cfn‑Guard 규칙 파일
# Lambda function security and best practices rules
# Ensure Lambda function has a timeout set and **Note:** Adjust the `runtime-versions` and any additional commands to match your project's requirements.
프로젝트와 소스 파일, buildspec.yml을 모두 준비했으면 CodeBuild 콘솔에서 빌드를 시작합니다. 빌드는 Guard 바이너리를 컴파일하고, CloudFormation 템플릿에 대해 검증을 수행한 뒤 빌드 로그에 성공 여부를 보고합니다.