[CJ Olivenetworks - Cloud Wave] CGV Fast Order 시스템 인프라 구축 2. Terraform / Terraform Cloud 를 활용한 Cloud Infra 구축 자동화
Terraform 을 통한 Cloud Infra 자동화
- IaC(Infrastructure as Code)는 수동 작업 대비 일관성 유지, 재사용성, 자동화 측면 향상.
- 테라폼은 cloudformation, pulumi와 같은 IaC 방법론을 실현하는 도구 중 하나.
- IaC 이전의 Cloud Infra 관리는 웹 콘솔이 주류로 사용.
- 콘솔로도 작업은 가능하지만 대규모 / 반복적 작업을 수행하는 경우 매우 비효율적.
- 테라폼은 cloudformation, pulumi와 같은 IaC 방법론을 실현하는 도구 중 하나.
- 가령 필요에 따라 dev 환경의 생성 및 제거 작업이 반복적으로 필요한 경우
- 해당 dev VPC에는 각 3개의 퍼블릭/프라이빗 서브넷을 갖고, 퍼블릭엔 서비스 확인을 위한 접근용 ALB / 프라이빗엔 WEB, WAS 서버 및 RDS가 구성되어야 하고, 각 ALB와 EC2에 대하여 쉬운 접근을 위해 Route53 도메인을 붙이는 것이 필요 조건.
- 해당 과정을 수동으로 진행한다면 리소스 tag 규칙등의 과정에서 입력 실수로 인해 누락/오입력이 발생하고, 일관성의 훼손 가능성 증가.
- 생성 및 재생성 과정을 일일히 생성하면 시간도 오래 걸리고, 비효율적이다. 그러나 코드로 구성되어, 필요할때마다 복제하고 재생성 한다면 매우 효율적.
작성한 Terraform code - main.tf 중 일부분.
Terraform 기본 Command
# 현재 디렉토리 초기화
$ terraform init
# Terraform 이 어떤 작업을 하게 될 지 Dry-Run
$ terraform plan
# 해당 코드를 apply하여 적용하고 Build.
$ terraform apply
# Terraform 으로 구축된 것 삭제
$ terraform destroy
# state file 새로고침
$ terraform refresh
# Terraform output 보기
$ terraform output
# Dot-formatted graph 생성
$ terraform graph
tfenv 를 사용하여 Terraform 설치하기
- tfenv clone 설치
$ git clone https://github.com/tfutils/tfenv.git ~/.tfenv
- Terraform 특정 버전 설치
- Terraform 특정 버전 설치 확인
$ tfenv list
- 특정 버전의 Terraform 사용하기
$ tfenv use (버젼 명시) $ terraform --version
- 특정 버전의 Terraform 삭제하기
$ tfenv uninstall (버전 명시)
[Terraform Cloud] Terraform 및 Terraform Cloud 사용해보기
- UI integration
- 버전 관리 시스템 (VCS)
- API Driven Workflows
- 중앙 관리형
- Private Module Registry 제공
- Sentinel Policy Ensforcement
- IAM Policy?
- Single Sign-on
- 사용자가 여러 웹 애플리케이션 또는 서비스에 대해 단일 인증을 사용하여 한 번의 로그인으로 여러 서비스에 액세스할 수 있는 인증 메커니즘
- 이는 사용자 경험을 향상시키고 비밀번호 관리의 어려움을 줄이는 것에 도움.
- SSO 시스템은 일반적으로 중앙 인증 서비스를 사용하여 여러 애플리케이션 간의 인증을 처리.
- Secure API credentials
[Terraform Cloud] 시작하기
terraform 시작하기
- Terraform Cloud 에서 제공하는 Sample 을 이용해서 시작해보자.
- Terraform login
$ terraform login
terraform login
terraform login 시 자동으로 웹 창으로 이동하게 된다.
Token 발급 후 로그인이 되는 것을 볼 수 있다.
- Terraform Sample repository 클론
$ git clone https://github.com/hashicorp/tfc-getting-started.git
- 인프라 자원을 Provisionning 하기 위한 Configuration 파일.
- infra 자원은
fake web service
사용 (AWS-ec2 와 비슷한 가짜 자원을 생성)
링크: registry.terraform.io/providers/hashicorp/fakewebservices/latest
- setup script 실행
작업 시작 전 Local PC에jq
가 설치되어 있는 지 확인 할 것. (없다면 설치)$ cd tfc-getting-started $ ./scripts/setup.sh
- configuration 초기화
[Terraform Cloud] Example Configuration
- Workspace
- Name: getting-started
- URL : https://app.terraform.io/app/example-org-1b7e9c/workspaces/getting-started
- Terraform init
Terraform init
- Terraform plan
Terraform plan
- Terraform Plan 은 Local의 내 맥북에서 init 되었지만, Terraform Cloud에서 실행되고 있음.
Terraform Cloud runs Terraform on disposable virtual machines in its own cloud infrastructure.
- 테라폼 클라우드 내 클라우드 환경의 VM에서 테라폼이 실행됨.
This 'remote execution' helps provide consistency and visibility for critical provisioning operations.
- 위와 같은 Cloud 환경에서의 원격 실행은 Provisioning 작업에 관해 일관성과 가시성을 제공.
It also enables notifications, version control integration, and powerful features like Sentinel policy enforcement and cost estimation (shown in the output above).
- 또한 원격 실행은 알림 및 버전 컨트롤 (VCS) 기능, 보안 및 비용 관리를 수월하게 해줌.
- Terraform apply
Terraform apply
- Apply 하게 되면 Team&Governance 기능을 사용할 수 있는 30일 무료 체험 organization이 생성됨.
→ 무료체험 기간이 끝나면 자동으로 Free tier로 변경되니 걱정 안해도 된다.
Terraform apply 후 모습
- Terraform Cloud 는 여러 Infrastructure 들을 directory 대신 workspace로 관리함.
- 링크 : https://app.terraform.io/app/example-org-1b7e9c/workspaces/getting-started
- Remote State Management
- workspace 간의 output 공유 가능함.
- 다른 workspace 에서 ‘terraform_remote_state’ data source 를 참조 가능
- 생성된 example configuration 에 관해 더 알고 싶다면 :
- https://app.terraform.io/fake-web-services
- Apply 하게 되면 Team&Governance 기능을 사용할 수 있는 30일 무료 체험 organization이 생성됨.
- Next Steps:
-
main.tf 파일 수정을 통한 Server 추가
resource "fakewebservices_server" "server-3" { name = "Server 3" type = "t2.macro" } resource "fakewebservices_server" "server-4" { name = "Server 4" type = "t2.macro" }
- 위 코드를 main.tf 파일에 추가하여 추가적인 서버 생성 가능.
terraform apply
를 통해 적용한 후 확인하기.
- 실제 Cloud 환경에서 실행하기
- Workspace 의 variables 메뉴에서 해당 Cloud Service provider 에 관한 Credentials 로 변경.
terraform apply
하여 적용.
-
[Terraform Cloud] GIT 연동하기
Terraform Cloud Git 연동하기
Terraform Cloud Git 연동하기
- Version Control 탭에서 설정.
- Terraform working directory 를 설정하여 API를 날릴 git repository를 정할 수 있다.
- 설정하지 않으면 Terraform Cloud 의 default working directory 로 설정됨.
- 여러 Infra 환경이 존재 할 수 있기 때문에. 따로 설정해주는 것이 좋아 보임.
- GIT에서 코드 변동이 생기면 Trigger를 통해 자동으로 Terraform Cloud에서 실행할 수 있다.
- Trigger의 조건
- 항상 실행
- GIT repo 내 특정 directory 변경 (ex. /modules) 되면 실행
- GIT tag 반영 시 실행
[Terraform Cloud] VCS 연동 후 CI / CD 환경에서 Cloud Infra 구축하기
1. Terraform Cloud 가입 및 Organization 참가 / 생성
- Terraform Cloud 가입
- Organization 참가 / 생성
- VCS Workflow 옵션으로 Workspace 생성
- Github Repository 연동
2. Workspace 설정 및 Provider Credential Variable 추가
Workspace → Settings → Version Control 이동
Terraform Working Directory
- TFC가 현재 Workspace와 연동된 VCS에서 WebHook 하여 수정/추가 된 Terraform Code를 수행할 경로를 지정.
- VCS Repository 에서 테라폼 코드가 존재하는 경로를 명시 (Git)
Variables 설정 (현재 Provider : AWS)
AWS_ACCESS_KEY_ID 및 AWS_SECRET_ACCESS_KEY 추가
- Git에 Push 한 Terraform Code -
main.tf
및variables.tf
에 임의로 지정된 AWS_ACCESS_KEY, AWS_SECRET_KEY 변수를 TFC 에서 Hook 해오며 TFC에 위 사진처럼 저장되어 있는 Variable 로 Overwrite 해준 후 해당 AWS Credentials / TFC의 VM을 사용해 개발자의 AWS 계정에 접근, terraform code를 사용해 배포해준다.주의 : Value 값은 String 이므로 “ ” 안에 포함해줄것.
- Variables 설정 옵션
- Terraform Code에 Overwrite할 용도이기 때문에
HCL
선택. - Credential 에 관한 정보이므로
Sensitive
옵션 선택하여 암호화 보관.
- Terraform Code에 Overwrite할 용도이기 때문에
3. [CI] Local 에서 Terraform Code 개발 및 Commit / Push
- Terraform 코드 개발 후 VCS(Git) 에 Push 하게 되면 위처럼 자동으로 TFC가 해당 Github repository를 web hook 하여 TFC의 Variable에 저장된 AWS Credential을 Overwrite하고, 계정에 접근하여 Terraform 코드에 기반해 자동 Infra 구축 및 배포를 해주게 된다.
4. Terraform Destroy
- 위 사진처럼 Local 에서 terraform destory 는 먹히지 않는다.
- VCS Workflow 로서만 추가 / 수정 / 삭제 가 이루어져야 각 작업에 대해 혼란이 생기지 않으므로 막아둔 것으로 보인다.
- TFC의 Workspace → Settings 에서 Terraform Destroy가 가능함. (유저 권한에 따라서)
[Terraform Cloud] 실제 프로젝트 Cloud Infra 구축 영상
[CJ Olivenetworks - Cloud Wave 1기] 활동 중 진행한 팀 프로젝트입니다.
무단 복제 및 게시는 삼가주시기 바랍니다.
Task Lists
- Terraform 을 통한 Cloud Infra 자동화
- Terraform 기본 Command
- tfenv 를 사용하여 Terraform 설치하기
- [Terraform Cloud] Terraform 및 Terraform Cloud 사용해보기
- [Terraform Cloud] Example Configuration
- [Terraform Cloud] GIT 연동하기
- [Terraform Cloud] VCS 연동 후 CI / CD 환경에서 Cloud Infra 구축하기
- [Terraform Cloud] 실제 프로젝트 Cloud Infra 구축 영상
Comments