- AWS와 같은 클라우드 인프라를 꽤 큰 규모로 구축해놓았는데, stage와 prodution으로 구성을 구분해야 하는 상황이 오거나, 사용 중인 계정이 사정상 곧 삭제되어 아예 인프라를 다른 계정으로 이동시켜야 하는 난감한 상황이 온다면 어떤 수가 있을까요?
- 그런 경우 IaaC 도구인 테라폼이 꼭 필요한 도구일 것입니다.
- 하지만 이제까지 테라폼으로 구성하지 않아서 tf, tfstate 파일이 존재하지 않고, 현재 구성중인 인프라 규모는 커져있다면, 정말 난감할 것입니다.
- 그래서 테라포밍(terraforming)이라는 github 오픈소스 프로젝트가 존재합니다.
https://github.com/dtan4/terraforming
테라포밍을 알아보기 전에, 먼저 tf와 tfstate 파일에 대해 간단히 짚고 넘어갑시다.
tf, tfvars 등 테라폼 파일을 구성한 후에 terraform apply 명령어를 실행시키면 코드가 인프라에 반영이 되고 tfstate 파일이 갱신됩니다. 이렇게 생성된 tfstate 파일은 현재의 상태를 저장시켜 다음 terraform apply 실행 때 추가하거나 변경,삭제해야 할 작업을 구분해 다음 인프라에 변경될 작업을 수행하는데 사용됩니다. 그러니 우리가 해야할 작업은 terraforming과 terraform import를 적절히 사용해 모든 인프라에 대한 정보를 local (혹은 공동 작업 공간 : github, s3등)의 tf와 tfstate에 동기화를 시켜야 합니다.
우선 terraforming 인스톨한 후, 작업할 디렉터리를 만들고 본격적으로 인프라를 가져와봅시다. s3, iam 등 옵션을 설정하여 지정된 서비스만 가져올 수도 있지만 우리는 모두 필요하니 다음 명령어를 사용합니다.
export AWS_REGION=us-west-2
terraforming help | grep terraforming | grep -v help | awk '{print "terraforming", $2, "--profile", "default", ">", $2".tf";}' | bash
다양한 tf 파일이 생기는 것을 확인할 수 있습니다. 인프라가 없어도 모든 tf 파일이 다 생성되니 필요 없는 파일은 삭제해주세요. 또 주의해야 할 점은, 아직까진(21.10.13) 테라포밍이 모든 인프라를 지원하지 않습니다. 대표적으로 lambda입니다. lambda를 코드로 가져오려면 파일을 zip 압축해야 하고 , 레이어도 zip으로 관리해야 하고 연결된 이벤트나 트리거도 많기 때문에 상당히 까다로워지긴 합니다.
tf파일이 생겼지만 아직 tfstate에 반영되지는 않았습니다. 이제는 terraform import 명령어를 통해 tfstate에 인프라의 상태를 반영시킬 겁니다.
import 명령 양식은 aws 리소스에 따라 달라집니다. aws 리소스에 따른 명령어를 terraform docs에서 검색해서 알맞게 사용하면 됩니다. 보통은 terraform import 리소스. 이름 이름 형식인데, arn을 사용하는 경우도 있습니다.
terraform plan 명령어를 실행했을 때, 더 이상 change 할 내용이 없으면 테라포밍 성공입니다. 하지만 terraforming이 가져오는 정보와 terraform plan의 상태가 형식이 약간 달라서 change가 생기는 경우도 있었는데, 내용 체크 후 변경해야 할 사항은 알맞게 잘 변경하면 됩니다.
'🏋️♀️ DevOps, SRE' 카테고리의 다른 글
신입 데브옵스 (DevOps) 엔지니어 되기 - (1) (25) | 2023.02.06 |
---|---|
[k8s] Kubernetes CronJob 뜯어보기 - 구현 원리, best practices (4) | 2022.11.15 |
주니어 DevOps 엔지니어가 바라 본 CPU 아키텍처 (docker pull이 안 된다!) (0) | 2022.10.21 |
[AWS][DevOps] Terraform으로 EKS 환경 구성하기 - (1) (0) | 2022.08.14 |
[DevOps] 내부 개발자 플랫폼 (IDP) : 조직이 더 효율적으로 일하는 방법 (0) | 2022.07.22 |