들어가며
안녕하세요, Devlos입니다.
이번 포스팅은 T101 스터디 3기 마지막 주차인 TFC Remote execution에 대한 내용에 대해 배웠습니다. 이전 주차에서 TFC를 처음 사용하면서 많이 편하다고 생각했었는데, 이번 주차에서는 TFC에서 fully 하게 다양한 기능을 사용해 볼 수 있을 것 같아서 기대하고 있었습니다!!
* 본 스터디의 자료는 아래의 책을 기반으로 합니다.
테라폼으로 시작하는 IaC | 김민수, 김재준, 이규석, 이유종 | 링크
TFC(Terraform Cloud) Remote execution
지난 5주 차 과정에서는 TFC를 Local에서 사용하는 Local execution 방식을 사용했습니다. - 링크
Remote exection 기능을 사용하게 되면 로컬에서 관리하던 환경 설정들을 모두 TFC로 이전해야 합니다. 예를 들어 로컬에서 사용하던 variables 나 secret 정보들을 TFC에서 관리하게 됩니다.
* Standard Plan으로 TFC를 사용하면 Resource 500개 까지는 무료입니다.
Remote Execution 사용 절차 - VCS(Version Control Service, Github) 연동
Github(VCS) 기반 Remote Execution 사용을 위한 프로세스를 정리하자면 다음과 같습니다.
실습 - TFC와 VCS 연계
앞서 말씀드린 Remote Exection 사용 절차에 따라 실제로 TFC 기반 인프라 관리를 실습했습니다.
실습을 위해서 스터디 repository를 개인 repository로 fork 한 다음 fork 된 repository를 로컬로 clone 합니다. 그다음 clone 된 소스코드를 변경하고 commit과 push를 수행합니다.
스터디 repository - 링크
# Clone
MyGit=devlos0322
git clone https://github.com/$MyGit/terraform-aws-tfc-workflow
cd terraform-aws-tfc-workflow
# Update
MyTfcOrg=devlos
sed -i -e "s/<MY-ORG>/$MyTfcOrg/g" main.tf
# Commit & Push
git add main.tf
git commit -m "init"
git push
다음으로 terraform init을 수행하게 되면 해당 repository에 대한 TFC workspace가 자동으로 생성됩니다.
테라폼 실행 위치가 로컬이냐 원격인지에 따라 Settings > General > Execution Mode를 설정해 주어야 합니다. 기본적으로 Organization Default 모드는 remote로 설정되어 있기 때문에 설정을 그대로 둡니다.
다음으로 Add variables를 통해 프로비저닝에 필요한 변수들을 설정합니다. 변수는 Terraform variables와 Envirment variables로 구성됩니다.
- Terraform variables: TFC에서는 실행 후 인라인으로 넣을 수 없기 때문에 기존 terraform.tfvars를 대체하는 역할을 합니다.
- Environment variables: 환경 변수는 운영체제 레벨에서 정의되며, 프로세스가 실행되는 환경에 대한 정보를 제공합니다.
민감정보의 경우 Sensitive 설정을 할 수 있으며, Write only 형태로 TFC 자체 Vault에 값을 저장하게 됩니다.
terraform plan을 실행하면 다음과 같이 TFC에서 자동으로 Planing을 수행하게 됩니다.
Plan 작업이 완료되면 다음과 같이 TFC 화면에서 추가되는 리소스들을 쉽게 확인이 가능합니다. 또한 터미널이 아닌 TFC에서 직접 Apply를 수행할 수 있도록 기능을 제공합니다.
다음은 terraform apply를 TFC에서 수행(오른쪽)했을 때 터미널(왼쪽)에서 실행 과정이 보이는 것입니다.
이제 Workspace > Settings > VersionControl에서 VCS Provider를 연결합니다.
Github의 OAuth application 등록 부분으로 이동합니다. 새로운 OAuth application을 등록할 수 있는 에디트 페이지에서 Add VCS Provider에서 확인한 정보들을 기입합니다.
Register application을 수행하면 다음과 같이 Client ID가 발급되고 Client secrets를 생성할 수 있습니다.
TFC로 돌아가 Client ID, secrets를 입력해 주면 연동과정이 끝나게 됩니다. 연동 과정이 끝나면 TFC에서 Github 계정에서 관리하고 있는 Repository들을 선택할 수 있게 됩니다.
리포지토리를 선택하고, Confirm changes 단계에서 VCS branch를 선택합니다. 여기서 IaC 기반 CD가 자동으로 수행될 수 있도록 Auto Apply를 적용합니다. (조직에 따라선 Manual apply를 선택해야 합니다.)
설정을 완료하면 자동으로 TFC에서 init 과정을 Run 하게 됩니다. (+ New run을 수행해도 Automation이 수행되는데, 변경사항이 없으면 Apply 이후에 따로 반영되는 것이 없습니다.)
Remote execution을 위해 필요한 모든 설정이 완료되었습니다.
테스트를 위해 구축된 TFC 기반 Automation이 잘 수행되는지 확인하기 위해 tfc-workflow branch를 만들고 코드를 Commit&Push 합니다.
다음과 같이 main.tf의 cloud, workspaces 블록을 변경하고, Project tag를 변경합니다. 여기서 Cloud, workspaces 블록을 삭제하는 이유는 VCS와 TFC를 연동했기 때문에 해당 내용이 없이도 자동으로 Apply가 가능하기 때문입니다.
git branch -M tfc-workflow
git add .
git commit -m “tfc workflow”
git push origin HEAD
TFC의 Runs에서 Github repository의 log가 확인되며, Plan & Apply를 자동으로 수행하는 것을 확인할 수 있습니다.
(참고로 실패하면 실패된 내용도 확인할 수 있습니다. 아래는 코드의 typo 오류가 발생한 경우의 출력입니다.)
오늘도 여정의 끝엔 귀여운 고양이네요.. ㅎ
실습 후에는 Destruction and Deletion에서 infrastructure 삭제 후 work space를 삭제합니다!
TFC 추가 기능 설명
TFC에서는 Cost Estimation라는 기능을 통해 프로비저닝 되는 리소스의 요금을 미리 예상해 볼 수 있습니다.
또한 Run Tasks라는 개념을 통해 Ops에 필요한 서드파티 도구들을 사용할 수 있습니다. 이러한 도구들은 Terraform registry에서 확인할 수 있습니다. - 링크
Run Task 들은 다음과 같이 Automation Pipeline에서 하나의 Pipe 역할을 하게 됩니다.
다음과 같이 여러 운영 관점의 카테고리들 아래 많은 Run Task들이 있습니다.
상황에 따라 각각의 Run task들이 유용하겠지만, T101스터디에서는 Security, Policy 쪽에 대한 도입을 고려해 볼 만하다고 추천했습니다! (Orca, Prisma, Snyk 등)
도전과제 2 - Terraform Cloud 추가 기능 테스트 해보기 (Cost Estimation)
Organization Settings > Integrations > Cost Estimation으로 이동하여, Enable Cost Estimation for all workspaces를 선택한 후 Update settings를 통해 Cost Estimation을 적용합니다.
다음으로 Workspace에서 Plan 작업을 수행하면 이전에는 보이지 않던 Cost estimation 단계가 추가되는 것을 볼 수 있습니다. 여기에는 AWS에서 제공하는 resource 가격을 통해 합산된 예상 월 사용 금액을 확인할 수 있습니다.
제공되는 resources 가격 정보는 다음의 링크를 통해 확인할 수 있습니다. - 링크
이런 식으로 월 사용 금액을 쉽게 확인할 수 있습니다!
마치며
이번 포스팅에서는 TFC를 remote execution 방식으로 사용하는 방법에 대해 학습했습니다. 사실 TFC를 실습해 보기 전에 스터디 자료만 봤을 때는 기존 Automation 방식과 큰 차이가 있을지 의아했었습니다. 하지만 사용해 보니까 정말 편하네요.. 또한 이전 시간에 배운 local execution 방식보다 여러 관리 포인트를 줄일 수 있어서, 신규 도입을 고려하는 측면에서는 아주 좋은 서비스라고 생각됩니다. variables에 대한 관리도 TFC에서 일원화가 가능하고 여러 가지 Run Task들을 이용하여 조직에서 원하는 다양한 관리 기능을 완제품 형태로 손쉽게 add on 할 수 있어 보이기 때문입니다.
스터디를 통해서 다른 회사들이 보안적인 내용과 협업을 위한 정책들을 고민하고 인프라에 적용하기 위해 많이 노력하고 있다는 생각이 듭니다. 그래서 스터디에서 언급된 여러가지 Run task들이 출시되었다고 생각되네요.. Run task들이 제공하는 기능들을 살펴보면서, 우리 조직도 어떤 관점에서 클라우드 인프라를 관리해야 할지 깊게 고민하게 됩니다.
이로써 CloudNet@ 운영진 분들, 그리고 Hashicorp 유형욱 님과 함께 공부한 3번째 스터디가 끝나는군요. 이번 스터디에서도 소중한 지식을 많이 얻고 갑니다. 항상 이러한 정보 공유를 위해 주말 밤낮없이 고생하시는 운영진 분들께 진심으로 감사의 말씀을 전합니다!
긴 포스팅을 따라와 주시느라 고생 많으셨습니다, 감사합니다!
'클라우드 컴퓨팅 & NoSQL > [T101] 테라폼 기초 입문 스터디' 카테고리의 다른 글
[5주차] T101 테라폼 기초 입문 스터디 (23.09.24) (1) | 2023.09.29 |
---|---|
[4주차] T101 테라폼 기초 입문 스터디 (23.09.17) (0) | 2023.09.23 |
[3주차] T101 테라폼 기초 입문 스터디 (23.09.10) (2) | 2023.09.15 |
[2주차] T101 테라폼 기초 입문 스터디 (23.08.27) (0) | 2023.09.08 |
[1주차] T101 테라폼 기초 입문 스터디 (23.08.27) (0) | 2023.09.01 |