목록프로젝트&&스터디/Terraform 스터디 [T101] (6)
후니의 IT인프라 사전
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/QCejy/btrTiU0GM66/pBg00wocNKofMgtZKydCd1/img.png)
테라폼은 tfstate 파일이라는 상태파일을 저장합니다. 사실상 이 파일이 테라폼이 자원을 관리하는 방식이고 테라폼을 실행할 때는 이 tfstate 파일을 현재 리소스와 비교해서 작업을 진행합니다. 그렇기 때문에 tfstate 파일에는 매우 중요한 정보들이 많이 있고, 이게 없어지거나 하나의 부분만 빠져도 사실상 리소스를 관리할 수 없게됩니다. 기본적인 저장위치는 local이지만, 테라폼에서는 원하는 지정 저장소에 tfstate파일을 저장할 수 있도록 하고 있습니다. 대표적인게 AWS S3입니다. S3를 백앤드로 쓰면 S3의 기능을 장점으로 활용할 수 있습니다. - AWS 리소스를 이용할 경우 (그 외에도) 중앙 저장소가 필요한데 S3를 통해서 중앙 저장소로 활용할 수 있다. - S3의 versionin..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/6sDdu/btrThfxTvYQ/rmLiZQBnujgmxxA4SOKxgk/img.png)
이번 시간에는 Terraform을 통해서 NKS 클러스터를 구성해보도록 하겠습니다. 대략적인 구성은 아래와 같은 모습이고 NKS 서비스 자체가 managed master node이기 때문에 대부분의 클라우드 벤더사와 같이 kubernetes service 구성과 worker node pool을 별도로 구성하여 생성합니다. 1. bastion.tf 대부분 클러스터는 프라이빗 서브넷에 존재시키고 bastion에 kube-config정보를 등록하고 실행시키도록 구성하였습니다. bastion은 퍼블릭 서브넷에 존재하고, 접속을 위한 public IP를 받을 수 있도록 생성합니다. 그리고 login_key는 추후에 생성할 login pem키를 작성합니다. resource "ncloud_server" "bastio..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c2raj2/btrQ2SiTle4/TlxGfAqxvseBTYPwlB9Bj0/img.png)
구조 파악 완성된 code는 github에서 확인할 수 있다. 사전 작업 이전글인 단일 웹서버 배포에서 구성했던 VPC, Subnet, ACG를 사용한다는 전제하에 작업을 진행합니다. 해당 리소스들이 규정되어있지 않다면 이전글을 참조해주기 바랍니다. Auto Scaling 구성 auto scaling은 기본적으로 launch configuration을 먼저 규정하여 해당 configuration의 이미지를 통해서 scaling 작업을 진행합니다. 따라서 autoscaling.tf 파일을 구성할 내용을 작성해보겠습니다. 1. launch_configuration 생성 resource "ncloud_launch_configuration" "lc" { name = "my-lc" server_image_prod..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cMhtnv/btrQ0kOp6Ed/9zbQG6KJj0UsWwLLsTst8K/img.png)
당연하지만 우리는 클라우드 벤더사의 자원을 생성할 것이고, CLI를 이용하기 때문에 반드시 사전작업을 먼저 진행해야한다. 사전 작업을 진행했다는 전제 하에 다음 작업을 수행할 수 있다. 완성된 코드는 github에서 확인할 수 있다. 작업 디렉토리 생성 앞서 말했듯 테라폼에서는 작업 디렉토리 단위로 작업을 편성하고 이를 마치 프로젝트라고 생각하면 된다. 우리는 web-dev라는 하나의 프로젝트를 구성하겠다. mkdir single-web-server cd single-web-server provider 규정 가장 먼저 할 일은 내가 사용할 provider가 무엇인지 테라폼에게 알려주는 일이다. 따라서 provider 선언을 해주고 terraform init명령어를 통해서 해당 디렉토리를 해당 환경으로 규..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bTB2vy/btrQ1fr7GPc/kpYWK6Y1oisPYtxOvYBWyK/img.png)
테라폼의 구조 테라폼은 기본적으로 하나의 디렉터리를 작업 단위로 생각한다. 따라서 원하는 작업의 영역은 디렉터리로 구분해서 편성할 수 있다. 대부분의 작업 환경인 web의 prod, dev 환경으로 두 가지를 구분하면 다음과 같이 편성할 수 있다. Provider 작업할 리소스 공급자를 작성하고 해당 provider를 통해서 내가 작업할 환경을 세팅할 수 있다. 예를들어 aws를 사용하여 인프라를 편성하고자 한다면 aws provider를 등록해야한다. Terraform file 작업 디렉토리가 선정되면 해당 디렉토리 안에 terraform 파일을 저장한다. 확장자는 .tf 혹은 .tf.json 파일로 작성한다. tf 파일에서 작성하는 언어는 HCL 문법을 따르고 json형식을 원한다면 tf.sjon에 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/LNHyR/btrQ0YxiQuJ/TJAFzeIzydvDWuLKffMp3K/img.png)
도입 Terraform은 HashiCorp 사에서 발표한 대표적인 IaC(Infrastructure as Code) 도구로 코드를 통한 인프라 관리를 자동화시켜주는 툴이다. 기존 인프라 뿐 아니라 대부분의 클라우드 벤더사도 테라폼이 지원하게 되면서 정말 대중화되어 폭넓게 사용되는 툴이다. 장점 IaC의 Code를 활용하고 있기 때문에 대부분 Code형 시스템에서 갖추는 장점을 모두 활용할 수 있다. - 인프라를 코드 형태로 서술하여 실행시키지 않아도 코드로 인프라 구조를 파악할 수 있다. - 팀원들 간에 리뷰가 가능하다. - 작성된 코드를 승인 후 작동시킬 수 있도록 업무 프로세스를 만들 수 있다. - 인프라 공유가 용이하다. - git을 통한 버전관리를 할 수 있다. - 동일한 인프라 환경을 매우 쉽게..