
AWS CodeCommit: Clients로 부터 생성할 Infra에 대한 .tf 코드 파일을 Push 받아 보관 및 형상관리Amazon CloudWatch: AWS CodeCommit의 변경사항을 캡쳐하여 AWS CodeBuild에게 변경된 사항에 대한 이벤트 처리를 요청AWS CodeBuild: terraform init 및 terraform apply 명령어를 수행하여 실질적인 Infra 생성에 대한 역할 수행Amazon S3: CodePipeline의 Artifact Store 역할Terraform Cloud: Terraform을 활용하여 Infra 생성을 하기 위한 UI 화면 및 Workspace, Sensitive Variables 등의 기능 제공CodeCommit은 AWS의 버전 관리 서비스이다. GRC라는 유틸을 사용하는 것을 AWS는 권장하며 Git 자격 증명 설정 대신 IAM 사용자로 바로 접근이 가능하다.
curl -O https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py --user
sudo yum install -y git
pip3 install git-remote-codecommit
grc 사용을 위한 자격증명용이므로 Role이 적용된 EC2의 경우 생략 가능
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version
[Output]
aws-cli/2.11.6 Python/3.11.2 Linux/5.4.0-137-generic exe/x86_64.ubuntu.20 prompt/off
aws configure
AWS Access Key ID [None]: AKIA...WH5
AWS Secret Access Key [None]: 8Jep...Y/p
Default region name [None]: ap-northeast-2
Default output format [None]: <Enter>
aws sts get-caller-identity
[Output]
{
"UserId": "AID...IEP",
"Account": "070...981",
"Arn": "arn:aws:iam::070...981:user/<Name>"
}
리포지토리 항목 선택리포지토리 생성 버튼 클릭
리포지토리 명 입력 후 완료버튼 클릭하여 리포지토리 생성
리포지토리 Clone

git clone codecommit::ap-northeast-2://test-repo
cd test-repo
vi test.txt
test
git add .
git commit -m '1st commit'
git push origin main

프로젝트 빌드 항목 선택빌드 프로젝트 생성 버튼 클릭
프로젝트 이름 입력 및 소스 항목을 생성해 둔 CodeCommit의 리포지토리로 지정
hashicorp/terraform 이미지를 사용하도록 지정 및 서비스 Role 생성

서비스 역할은 이미 역할이 존재할 경우 기존 서비스 역할 라디오 버튼을 선택하여 해당 역할을 지정, 그렇지 않을 경우 새 서비스 역할 라디오 버튼을 선택하여 새로운 역할을 생성환경 변수TF_TOKEN_app_terraform_ioBuildspec 파일 사용 라디오 버튼 선택 후 빌드 프로젝트 생성 버튼 클릭
빌드 프로젝트 생성 확인
파이프라인 항목 선택파이프라인 생성 버튼 클릭
파이프라인 이름 입력 및 아티팩트 스토어 지정 후 다음 버튼 클릭
서비스 역할은 이미 역할이 존재할 경우 기존 서비스 역할 라디오 버튼을 선택하여 해당 역할을 지정, 그렇지 않을 경우 새 서비스 역할 라디오 버튼을 선택하여 새로운 역할을 생성아티팩트 스토어 또한 기존 S3 버킷을 사용하려면 사용자 지정 위치 라디오 버튼을 선택, 그렇지 않을 경우 기본 위치 라디오 버튼을 선택하여 새로운 S3 버킷 생성소스 공급자로 AWS CodeCommit 선택 후 리포지토리 이름과 브랜치 이름을 생성한 CodeCommit에 맞게 선택한 후 변경 감지 옵션을 Amazon CloudWatch Events로 선택하여 다음 버튼 클릭
AWS CodePipeline으로 선택할 경우 코드가 변경됨을 감지하고 반영하는 시간이 매우 길어짐빌드 공급자로 AWS CodeBuild 선택 후 프로젝트 이름을 생성한 프로젝트에 맞게 선택한 후 다음 버튼 클릭
배포 스테이지 건너뛰기 버튼 클릭
건너뛰기 버튼 클릭

buildspec.yml 파일이 포함된 코드 파일들이 없어서 Build에 실패한 것을 확인할 수 있다.New - Workspace 버튼 혹은 가운데 Create a workspace 버튼을 클릭하여 Workspace 생성
CLI-Driven Workflow 선택
Create 버튼 클릭
Variables 선택+ Add variable 버튼 클릭하여 Environment Variable 항목으로 AWS 환경변수 입력
Sensitive 항목에 체크하여 위 이미지의 AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY 변수와 같이 암호화하여 변수를 저장할 수 있다.2.4. 과정에서 clone한 test-repo 디렉토리에서 작업 진행
cd test-repo
이벤트가 발생했을 때 CodeBuild에서 진행할 명령어를 정의
vi buildspec.yml
version: 0.2
phases:
build:
commands:
- terraform init
- terraform apply -auto-approve
Test용 VPC 생성 코드 작성
vi vpc.tf
terraform {
cloud {
organization = "<Terraform Cloud Organization>"
workspaces {
name = "test-workspace"
}
}
}
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "test-vpc"
}
}
organization 항목에 Terraform Cloud의 Organization 값을 넣어준다.git add .
git commit -m 'test code push'
git push origin main
AWS 좌측 사이드바의 파이프라인 선택 후 정상 빌드 확인

Terraform Cloud 좌측 사이드바의 Runs 선택 후 VPC 생성 확인

VPC 생성 확인
