목표
- 협업 방법에 대해 알아본다
- TFC에 대해 알아다
협업
- 인프라 규모가 커지고 관리 팀원이 늘어날 수록 구성 코드 관리가 필요 → 서로 작성 코드 점검 및 협업 환경 구성
협업 방법 - VCS(Github), 중앙 저장소 도입
- 테라폼 코드 형상관리를 위한 중앙 저장소 (git)
- *.tf file
- State 백엔드
- state file
- 이원화 관리 권장
실습 p219 ~ 233
깃허브 포크
- 깃허브는 포크 fork 기능을 제공해 기존 리모트 저장소를 본인 소유의 저장소로 복사할 수 있다
포크를 한다
git 공유 제외 대상
- 코드 파일 공유 시 깃 관리 대상 제외 → .gitignore 정의
- .terraform 디렉터리 : init 실행 시 작성되므로 제외
- .tfstate 파일 : 프로비저닝 결과 데이터 소스 정보, 민감 데이터가 포함
- 백엔드 사용 필요
- tfvars 파일 : 프로비저닝 시 적용할 변수 값을 보관하는 파일로, 작업자 마다 별도 변수 사용
- 시크릿 파일 : 인프라 구성에 필요한 시크릿 정보 파일
- terraformrc 파일 : 작업자의 CLI 설정 파일
# .gitignore
# Local .terraform directories
**/.terraform/*
# .tfstate files
*.tfstate
*.tfstate.*
# Crash log files
crash.log
crash.*.log
# Exclude all .tfvars files, which are likely to contain sensitive data, such as
# password, private keys, and other secrets. These should not be part of version
# control as they are data points which are potentially sensitive and subject
# to change depending on the environment.
*.tfvars
*.tfvars.json
# no creds
*.pem
# Ignore override files as they are usually used to override resources locally and so
# are not checked in
override.tf
override.tf.json
*_override.tf
*_override.tf.json
# Include override files you do wish to add to version control using negated pattern
# !example_override.tf
# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
# example: *tfplan*
# Ignore CLI configuration files
.terraformrc
terraform.rc
gitignore 참고 사이트
https://www.toptal.com/developers/gitignore
생성 됬다!
스터디 멤버가 공유해준 사이트인데
관련 툴들을 알면.. 편한 세상!
로컬 저장소에 복제
MyGit=<각자 자신의 깃허브 계정>
git clone https://github.com/$MyGit/terraform-aws-collaboration
# 확인
tree terraform-aws-collaboration
cd terraform-aws-collaboration
git remote get-url origin
# 예시 : https://github.com/hyungwook0221/terraform-aws-collaboration
정상적으로 clone 했다.
코드 협업을 위한 1인 2역 테스트
두 작업자간 서로 푸시하는 경우 발생
=== 위는 로컬 저장소, 아래는 리모트 저장소 내용
현재 변경 사항 수락: 로컬 저장소 정보로 변경
수신 변경 사항 수락: 리모트 저장소 정보로 변경
두 변경 사항 수락: 두개의 데이터가 공존하게 됨
변경 사항 비교: vimdiff 와 같이 vsc에 비교하는 창 생
Terraform Cloud (TFC) 백엔드
- SaaS 환경인 TFC(Terraform Cloud)를 제공하며 State 관리 기능은 무상을 제공
- 제공 기능 : 기본 기능 무료, State 히스토리 관리, State lock 기본 제공, State 변경에 대한 비교 기능
- Free Plan 업데이트 :
- 사용자 5명
- 리소스 500개
- 보안 기능(SSO, Sentinel/OPA로 Policy 사용)
- 테라폼 클라우드 가격정책 - [참고: Pricing, Feature]
- Free : 리소스 500개 까지 무료 → 커뮤니티 버전
- Standard : Free + 워크플로우 기능 추가 + 동시실행(Concurrency 개수 3개)
- Plus : 정책, 보안, 신뢰성, 확장성 등 기업형 고객에게 적합(대규모 사용자를 위한 비용모델)
- Enterprise : Plus와 대부분 유사하며 설치형 모델
TFC 계정 생성
free account 생성
https://app.terraform.io/
토큰으로 Terraform 로그인
7.4 실습(5주차 과제로 전환)
목표 : 아래 깃허브 저장소를 복제해 아래 조건에 만족하는 코드를 작성
- Terraform Cloud를 State 백엔드로 구성
- Workspace 이름 : terraform-edu-part1-assessment
- 실행 모드는 local
- AWS 공통 Tag : Project = “workshop”
- aws_instance는 반복문을 사용해 3개 구성
- EIP를 제거하고 EC2에서 public ip를 자체 사용하도록 구성
- placeholder 변수는 아래 3가지가 각각의 aws_instance에 적용되도록 구성
- placekitten.com / placebear.com / placedog.net
Terraform Cloud Sate 백엔드가 정상 동작하는지 테스트 했다.
terraform {
cloud {
organization = "thumbsup" # 생성한 ORG 이름 지정
hostname = "app.terraform.io" # default
workspaces {
name = "terraform-edu-part1-assessment" # 없으면 생성됨
}
}
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}
aws_instance는 반복문을 사용해 3개 구성
을 하기 위해 무작정 count = 3 을 추가해 보았다.
resource "aws_instance" "hashicat" {
count = 3
ami = data.aws_ami.ubuntu.id
instance_type = var.instance_type
key_name = aws_key_pair.hashicat.key_name
associate_public_ip_address = true
subnet_id = aws_subnet.hashicat.id
vpc_security_group_ids = [aws_security_group.hashicat.id]
tags = {
Name = "${var.prefix}-hashicat-instance"
}
}
125번째줄 에러가 났다.
EIP를 제거하고 EC2에서 public ip를 자체 사용하도록 구성
임으로 eip를 주석 처리 했다.
// resource "aws_eip" "hashicat" {
// instance = aws_instance.hashicat.id
// vpc = true
// }
여러곳에서 에러가 났다.
130, 131, 2, 6
전부 주석처리를 했더니
"null_resource"의 "configure-cat-app" 에서 에러가 발생했다.
확인해 보니, 인스턴스에 접근해서 pem 파일도 옮기고, 아파치 배포를 한다.
그런데 기존에 eip를 통해서 배포를 했었던 것을 public ip로 변경해야 하는데..
count로 된 인스턴스 public ip 값을 어떻게 가져왔나 example를 훔쳐봤다..
아! 이런 방법이
example을 훔쳐봤는데 간단했다.
변경 했더니 인스턴스 3개가 배포 됬다!
placeholder 변수는 아래 3가지가 각각의 aws_instance에 적용되도록 구성
placekitten.com / placebear.com / placedog.net
검색을 해보니 변수로 호출 하는 것을 확인 했다.
변수 지정된 곳을 배열로 변경후에 호출하는 방식을 변경했다.
재배포를 했지만, 이미지가 변경 되지 않았다.
remote-exec ssh inline 값을 수정후에
재배포하여도 기존 값이 변하지는 않는다는 것을 알수 있다.
destory 후에 재배포 해보겠다.
destroy 후에 재배포 하니깐
잘된다!
TFC 에도 이력이 잘 남아있다.
느낀점
마지막주 답게 내용이 엄청 많은 것 같다
협업이라는 내용에 대해 배우는 것이라서 어떻게 해야 좋을지 알아봤다
업무 절차를 정할때 많은 도움이 되었고
앞으로 테라폼 뿐만아니라 다양한 업무에서도
이번에 배운 협업 방식을 활용해
좀 더 효율적인 체계를 잡을 수 있을 것 같다.
'테라폼 > T101[3기]' 카테고리의 다른 글
T101-6주차 (0) | 2023.10.15 |
---|---|
T101 - 5주차 / 02 (0) | 2023.10.07 |
T101 - 4주차 (0) | 2023.09.24 |
T101 - 3주차 (0) | 2023.09.16 |
T101 - 2주차 (0) | 2023.09.09 |