AWS CodeBuild로 애플리케이션 테스트 자동화 시스템 구축
Last updated
Last updated
완전 관리형 형상관리 또는 버전관리 서비스로 고가용성, 확장성 및 안정성을 내재한 Git 리포지토리를 제공합니다. 모든 소스코드는 암호화되어 전송 및 저장이 되고 리포지토리 크기는 무한대로 확장이 가능하며 어떤한 파일도 저장이 가능합니다. 다른 AWS 서비스들과 (AWS CodeBuild, CodeDeploy, CodePipeline, etc) 연계를 통해서 보다 나은 CI/CD 파이프라인을 구축할수 있습니다.
Git 101 - 기본적인 Git 환경 구성 및 Commands 소개
AWs CodeCommit 연동 방식 실습 (HTTP, SSH)
Git 201 - Branching, Merging, Pull Request
CloudWatch Events, Lambda, CodeBuild로 테스트 자동화 구성
1. 아래의 IAM 유저로 AWS 관리콘솔에 로그인
lead
Asdf!234
2. 로그인 후 AWS 관리콘솔 좌측 상단에 있는 [Services] 를 선택하고 검색창에서 IAM를 검색하거나 [Security, Identity, & Compliance] 카테고리에 있는 [IAM] 를 선택
3. IAM 대시보드에서 [Users] 클릭 → lead를 선택 → [Security credentials] → HTTPS Git credentials for AWS CodeCommit 밑에 있는 [Generate credentials] 를 클릭 후 User name과 Password를 메모합니다.
4. AWS Management Console 좌측 상단에 있는 [Services] 를 선택하고 검색창에서 ssm를 검색하고 [Systems Manager] 를 선택
5. Systems Manager Dashboard 왼쪽 패널 Node Management 섹션 아래에 있는 [Session Manager] 선택
6. [Start Session] → Target instances 탭에서 Instance name이 lead인 인스턴스를 선택 → [Start Session] 클릭 (Region 확인필수)
Home Directory로 이동
Git 설치
Git 유저 설정
CodeCommit 리포지토리를 로컬서버로 복제
위에서 만든 Git 자격증명 입력
해당 Github 리포지토리를 로컬서버로 복제
샘플 애플리케이션 구동
소스코드 복사
Git 자격증명 저장을 원할경우 (Optional)
CodeCommit 리포지토리로 소스코드를 Push
7. 해당 CodeCommit 리포지토리에 대한 쓰기 권한이 없기 때문에 403 에러가 발생합니다.
8. IAM 대시보드로 이동해서 [Users] 클릭 → lead를 선택 → [Permissions] 섹션 오른쪽에 있는 [➕ Add inline policy] 클릭후, Service = CodeCommit, Actions = GitPush, Resources 탭에 있는 [Add ARN] 클릭 → Region = ap-northeast-2, Repository name = guess → [Add]
9. [Review Policy] → Name = codecommit-lead-access → [Create Policy]
10. git push
명령어 재시도
1. AWS Systems Manager Session Manager를 통해서 dev 인스턴스로 연결
RSA Key Pair 생성 (기본값으로 생성 Enter 3번)
e.g.
RSA Public Key를 클립보드로 복사
2. IAM 대시보드로 이동해서 [Users] 클릭 → dev를 선택 → [Security credentials] → HTTPS Git credentials for AWS CodeCommit 밑에 있는 [Upload SSH public key] 클릭 → 클립보드 내용 붙여넣기 → [Upload SSH public key] → SSH key ID를 메모
3. 다시 EC2 세션으로 돌아와서
Home Directory로 이동
Git 설치
Git 유저 설정
로컬 SSH 연결 설정
CodeCommit 리포지토리를 로컬서버로 복제
4. 어플리케이션을 1 ~ 20까지의 숫자를 맞추는걸로 수정하고 Git 리포지토리에 변경사항 반영
5. 권한 부족으로 리포지토리에 변경사항을 반영할수 없으므로 다음 단계로 진행
1. Git Branch 생성 후 Origin으로 Push
2. 권한 부족으로 리포지토리에 변경사항을 반영할수 없으므로 다음 단계로 진행
3. IAM 대시보드로 이동해서 [Users] 클릭 → dev를 선택 → [Permissions] 섹션 아래 [Add permissions] → [Attach existing policies directly] → ✅ AWSCodeCommitPowerUser 선택 → [Next: Review] → [Add permissions]
4. [➕ Add inline policy] 클릭 → JSON 선택 후 아래 내용 붙여넣고 [Review policy]
5. Name = DenyChangesToMaster → [Create policy]
6. 다시 EC2 세션으로 돌아와서 Git Branch를 Origin으로 Push 재시도
1. 아래의 IAM 유저로 AWS 관리콘솔에 로그인
dev
Asdf!234
2. AWS Management Console에서 좌측 상단에 있는 [Services] 를 선택하고 검색창에서 CodeCommit을 검색하거나 [Developer Tools] 카테고리에 있는 [CodeCommit] 를 선택
3. 리포지토리 목록에서 guess를 선택 → 왼쪽 패널에서 [Branches] → [Create pull request] 클릭 → Destination = master, Source = feature-max20 → [Compare]
4. Title = NEW-01 최댓값 변경, Description = 사용자 XXX의 요청으로 최댓값을 20으로 변경 → [Create pull request]
5. lead IAM 유저로 AWS 관리콘솔에 로그인하고 AWSCodeCommitPowerUser 권한 부여
6. CodeCommit 대시보드에서 Pull requests 섹션으로 이동
7. NEW-01 최댓값 변경 Pull request를 선택 → [Approve] → [Merge] → [Merge pull request]
8. Master branch의 소스코드에 변경사항이 적용 됬는지 확인
Test 빌드의 상태를 Pull Request 댓글에 기록
CloudWatch Events에서 Test 빌드의 상태변화를 인지하고 Lambda 실행
Lambda function을 통해서 CodeBuild에 있는 Test 빌드 실행
CloudWatch Events에서 Pull Request에 대한 이벤트를 인지하고 Lambda 실행
개발자가 Pull Requeust 생성
1. 제공된 AWS 계정으로 로그인 합니다. AWS 관리콘솔 좌측 상단에 있는 [Services] 를 선택하고 검색창에서 CodeBuild를 검색하거나 [Developer Tools] 카테고리에 있는 [CodeBuild] 를 선택
2. [Create build proejct] 클릭하고
Project name = guess-unittest, Source provider = AWS CodeCommit, Repository = guess, Reference type = Branch
Environment image = Managed Image, Operating system = Amazon Linux 2, Runtime(s) = Standard, Image = aws/codebuild/amazonlinux2-x86_64-standard:3.0, Service role = New service role
Build specifications = Insert build commands → [Switch to editor] → 아래 커맨드블록을 Build commands에 붙여놓고 [Create build project] 클릭
1. AWS 관리콘솔 좌측 상단에 있는 [Services] 를 선택하고 검색창에서 Lambda를 검색하거나 [Compute] 카테고리에 있는 [Lambda] 를 선택
2. Lambda 대시보드에서 [Create function] 클릭후, Function name = run_testbuild, Runtime = Python 3.8, [Create function] 클릭해서 Lambda 함수 생성
3. 생성된 Lambda 함수 설정에서 [Configuration] → [Permission] → Execution role 에서 run_testbuild-role-xxxx 를 선택
4. [Permissions] 섹션 오른쪽에 있는 [Add Permissions ] [Create inline policy] 클릭 후
Service = CodeBuild, Actions = StartBuild, Resources 탭에 있는 [Add ARN] 클릭 → Region = ap-northeast-2, Project name = guess-unittest → [Add]
5. [Review Policy] → Name = allow-lambda-run-codebuild → [Create Policy]
6. 아래 코드블록을 Lambda에 복사 후, [Deploy] 클릭
1. AWS 관리콘솔 좌측 상단에 있는 [Services] 를 선택하고 검색창에서 [Amazon EventBridge] 를 선택
2. EventBridge 대시보드에서 [Events] 섹션 아래에 있는 [Rules] → [Create rule] 클릭
Step 1: Define rule detail - Service Name = pull_request_made, Rule tpye= Rule with an event pattern
Step 2: Build event pattern - Event source - AWS services
Event source = CodeCommit - Event Type = CodeCommit Pull Request State Change, ✅ Specific resource(s) by ARN = CodeCommit Repository ARN 입력
CodeCommit Repository ARN은 CodeCommit -> Repositories -> settings -> General 에서 확인 가능합니다
Step 3: Select tartget(s) AWS service → Lambda function → Function = run_testbuild
Step 4: Configure tags - optional
Step 5: Review and create - create rule
1. AWS 관리콘솔 좌측 상단에 있는 [Services] 를 선택하고 검색창에서 Lambda를 검색하거나 [Compute] 밑에 있는 [Lambda] 를 선택
2. Lambda 대시보드에서 [Create function] 클릭후, Function name = post_test_result, Runtime = Python 3.8, [Create function] 클릭
3.생성된 Lambda 함수 설정에서 [Configuration] → [Permission] → Execution role에서 View the post_test_result-role-xxxx on the IAM console 를 선택
4. [Permissions] 섹션 오른쪽에 있는 [ Add permissions] - [Create inline policy] 클릭
Service = CodeCommit, Actions = PostCommentForPullRequest, Resources 탭에 있는 [Add ARN] 클릭 → Region = ap-northeast-2, Repository name = guess → [Add]
5. [Review Policy] → Name = allow-lambda-post-comment-on-pr → [Create Policy]
6. 아래 코드블록을 Lambda -post_test_result에 복사 후, [Deploy] 클릭
1. AWS 관리콘솔 좌측 상단에 있는 [Services] 를 선택하고 검색창에서 [Amazon EventBridge] 를 선택
2. EventBridge 대시보드에서 [Events] 섹션 아래에 있는 [Rules] → [Create rule] 클릭
Step 1: Define rule detail - Service Name =test_build_run, Rule tpye= Rule with an event pattern
Step 2: Build event pattern - Event source = other
Event pattern에 아래 블록을 붙여넣기
Step 3: Select tartget(s) AWS service → Lambda function → Function = post_test_result
Step 4: Configure tags - optional
Step 5: Review and create - create rule
새로운 Git Branch를 생성 후, 어플리케이션을 1 ~ 30까지의 숫자를 맞추는걸로 수정하고 해당 Branch를 CodeCommit에 Push하고 Pull Request 생성
CodeCommit 대시보드에서 방금 생성한 Pull request를 선택하고, Activity나 Changes 탭 밑에서 CodeBuild 테스트 결과 확인
CodeBuild 테스트 빌드가 성공하도록 소스코드 수정