다른 프로젝트와 마찬가지로 terraform도 프로젝트 디렉토리 구조를 잘 잡는것이 중요하다. 하지만 terraform의 `HCL (HashiCorp Configuration Language)`은 Python이나 Java같은 프로그래밍 언어가 아니라 말 그대로 설정 언어이기 때문에 (YAML 같은) 어떻게 프로젝트 구조를 잡아야 좋을지 감이 쉽게 오지 않을수 있다...
ReadAWS에서 제공하는 load balancer 서비스에는 2가지가 있는데 ALB(Application Load Balancer)와 ELB(Elastic Load Balancer)이다. 예전에는 AWS에서 ELB만 제공했었다. ELB는 굉장히 기본적인 load balancing 기능 밖에 제공하지 않았다. 예를 들어 url path에 따라 routing을 하는 기능 같은 것은 제공되지 않아서 많은 유저들이 ELB를 쓰지 않고 nginx나 HAProxy 등을 직접 운영하는 경우도 많았었다. ELB의 부족한 기능을 보완한것이 ALB이다. Url path 기반의 routing을 할수도 있고 최근에는 host-based routing 기능도 추가되었다. Terraform을 사용하여 ALB 설정을 구현해보자.
ReadSeucrity Group(보안그룹) 은 하나 이상의 인스턴스에 대한 트래픽을 제어하는 가상 방화벽 이다. 이전 [post](https://rampart81.github.io/post/vpc_confing_terraform/) 에서는 VPC를 사용하여 큰그림의 전체적인 네트워크를 구현했다면 Security Group을 사용해서 더 세부적으로 (서버별로) 네트워크 트래픽을 제어할수 있다. Security Group을 사용하여 해당 인스턴스에 접속 할수 있는 소스 IP, Protocol 와 해당 인스턴스가 보낼수 있는 outbound 트래픽까지 설정할수 있다. 이전 [post](https://rampart81.github.io/post/vpc_confing_terraform/)에서 구현했던 네트워크 아키텍쳐를 기반으로 security group 아키텍쳐를 구현해보자...
ReadVPC(Virtual Private Cloud) 는 논리적으로 독립된 가상의 네트워크 이다. 즉 클라우드 상에서 논리적으로 분리된 네트워크 이다. 데이터센터 에서 직접 서버를 운영하면 네크워크 분리를 하기위해 네트워크 장비를 사용하여 실제 물리적으로 네트워크들을 용도에 맞게 구분하고 분리하게 되는데, 이를 클라우드 상에서 가상으로 구현 가능하게 한게 VPC이다. VPC를 이용하여 네트워크 아키텍쳐를 구현하기 위해선 아래의 개념들을 이해해야 한다...
ReadTerraform으로 IAM 계정 설정하는 방법을 설명하였다. Terraform을 사용해서 IAM 계정을 설정하기 위해서 필요한 terraform `resource`들은 아래와 같다...
Read2000년 초반까지만 하더라도 많은 소프트웨어 개발 회사들은 많은 비용과 시간을 서버 등등의 하드웨어를 빌드 하는데 사용했다. 시스템 엔지니어 혹은 ops 팀이라고 하는 서버 관리 팀이 따로 있는게 대부분 이었다. 개발자들이 빌드한 애플리케이션을 ops팀에게 넘기면 ops팀이 서버에 디플로이하는 과정을 담당했었다. 그리고 이러한 과정은 많은 부분이 수동 작업이었다. 당연히 비용과 시간이 많이 걸렸으며 문제도 많이 생겼었다. 개발자가 자기 dev box에서는 다 작동하는걸 확인하고 ops 팀에 넘겼는데 실제 프로덕션 서버에서는 문제가 발생했던 적은 예전에는 흔치 않게 겪었던 일이다. 하지만 AWS를 필두로한 클라우드 서비스가 널리 퍼지면서 회사들은 점차 서버를 직접 관리하지 않게되었고 그러면서 개발팀 과 ops팀의 구분이 모호해지기 시작했다. 개발자가 코딩 부터 서버 실행 및 디플로이 까지 전부 다 충분히 할 수 있는 환경이 주어진것이다. 그러면서 DevOps 운동이 일어나기 시작했다. 많은 devops 들이 생겨나고 devops 분야가 발전하면서 IAC (Infrastructure As Code) 도 같이 많은 주목을 받기 시작했다. IAC는 단어 그대로 서버 등등의 인프라스트럭쳐를 코드로 표현 한다는 의미로, AWS UI를 통해 수동으로 서버를 운영하는게 아니라 코드로 서버 생성, 운영 및 관리 하는 것이다. 애플리케이션과 마찬가지로 인프라도 코드로 정의하고 출시, 운영, 관리 심지어 테스트 까지 하는게 IAC 이다...
Read