본문 바로가기

개발이야기/Infrastructure

IaC(Infrastructure as Code)를 통한 Enterprise환경에서 Infra 운영프로세스의 한계 해결방안

Enterprise환경의 infra 운영프로세스 지옥 - 사례1

개발자 A씨는 운영하고 있는 5개의 서버에 대해 X라고 하는 네트워크 정책을 가져가려고 한다. 이때, 거쳐야 하는 과정은 아래와 같다.


1) 5개 서버에 대한 X 정책에 대해 정의하고 티켓을 만들고 보안담당자에게 할당한다.

2) 해당 티켓을 보안담당자가 검토한다.

3) 보안 확인 후 네트워크담당자에게 할당한다.

4) 네트워크 담당자는 X 정책에 대해 확인하고 5개 서버에 적용한다.

5) 적용이 되면 네트워크 담당자는 A씨에게 적용되었음을 알린다.

6) A씨는 적용이 되었음을 확인하고 계속 일을 진행한다.


Enterprise환경의 infra 운영프로세스 지옥 - 사례2

사례1이 일어나고 5년뒤(이미 A씨는 퇴사) 개발자 B씨는 5개의 서버를 추가(scale out)하려고 한다. 이때 5개의 서버에 대해 기존 5개의 서버와 동일한 정책, 동일한 spec을 적용하기위해 거쳐야 하는 과정은 아래와 같다.


1) 5개 서버에 대한 동일한 정책, 동일한 spec에 대해 확인해달라는 티켓을 만들고 시스템 담당자에게 할당한다.

2) 시스템 담당자는 레거시 서버에 대해 확인하고 정리하여 B씨에게 전달한다.

3) B씨는 정리된 정책, spec과 같은 서버를 생성해달라고 티켓을 만들고 시스템 담당자에게 할당한다.

4) 시스템 담당자는 네트워크정책을 적용하기 위해 네트워크 정책 적용 티켓을 만들어 네트워크 담당자에게 전달한다.

6) 정책 및 설정 과정이 완료되면 B씨에게 적용 되었음을 알린다.

7) B씨는 적용이 되었음을 확인하고 계속 일을 진행한다.


infra관련 변경이 있을 때 마다 프로세스 지옥에 빠진다.


IaC(Infrastructure as Code)를 통해 지옥에서 벗어나기

상기와 같은 사례1, 사례2는 Enterprise환경에서 자주 그리고 수시로 일어난다. 또한, 각기 다른 담당자의 커뮤니케이션으로 인해 human error도 심심치 않게 나타나며, history관리도 쉽지않다. IaC(Infrastructure as Code)는 지옥에서 천국으로 바꾸어줄 훌륭한 도구로 사용가능하다. 여기서 소개하고자 하는 IaC 도구 중 하나는 Terraform이다.



Terraform소개

Terraform은 Hashicorp사에서 출시한 infra provisioning 도구이다. code로 infrasturcture(서버, 방화벽, 접근제어 등)를 관리(orchestration) 할 수 있어서 상기에서 소개한 사례들에 대해 간단히 해결 할 수 있다.


Terraform으로 사례 해결하기

Terraform으로 작성된 inbound 방화벽규칙(any protocol에 대해 inbound가 막힘)

resource "aws_security_group" "allow_all" {
  name        = "allow_all"
  description = "Allow all inbound traffic"
  vpc_id      = "${aws_vpc.main.id}"
 
  ingress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}


상기와 같은 방화벽 규칙에서 아래와 같이 바꾸고자 한다.


tcp protocol에 대해서만 inbound가능하도록 하는 방화벽 규칙

resource "aws_security_group" "allow_all" {
  name        = "allow_all"
  description = "Allow all inbound traffic"
  vpc_id      = "${aws_vpc.main.id}"
 
  ingress {
    from_port   = 0
    to_port     = 65535
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}


개발자 A가 해야하는 flow는 아래와 같다.


개발자가 항상 하던 branch, commit, push를 통해 infra관리가 가능하다는 것을 상기 flow를 통해 알 수있다.


Infrastructure as Code를 통해 얻는 이득

  1. 각 담당자에게 일을 맡기는 프로세스가 아닌 pull request & review절차를 통해 더욱 빠르게 적용 가능.
  2. ownership을 가진 개발자가 자신의 infrastructure을 code로 관리 가능.
  3. version control을 통해 infrastructure의 history 확인 및 손쉬운 rollback 가능
  4. 명시적인 code를 통한 관리로 human error 감소.

참고자료 

End of Document.