DevOps 파이프라인에서 인프라를 코드로 관리하는 방법

이 블로그 포스트는 eBook ‘관리자로부터 데브옵스로: Azure에서 데브옵스를 성공적으로 달성하는 No-BS 방법’의 장입니다. 인프라스트럭처를 코드로 배우면서 Microsoft Azure에서 데브옵스를 성공하기 위해 필요한 요소에 대해 자세히 알아보고 싶다면 꼭 확인해보세요.

클라우드 또는 가상 인프라를 수동으로 생성한 적이 있다면, 많은 클릭이나 많은 타이핑이 필요하다는 것을 알고 있을 것입니다. 인프라스트럭처를 코드로 작성하는 것은 이러한 문제를 해결해줍니다.

어떤 것을 프로비저닝하려면 어떤 화면으로 이동해야 하는지 또는 어떤 명령을 실행해야 하는지 기억해야 합니다. Azure를 배우기 위해 잠깐 사용하는 것이라면 괜찮지만, 시간이 돈인 비즈니스 중요한 프로세스로 발전하게 되면 어떤 변화가 필요합니다.

조직이 인프라스트럭처 프로비저닝과 관리에 진지하게 접근하기 시작하면 많은 새로운 도전에 직면하게 될 것입니다.

업무 중복, 오타로 인한 문제, 변경 관리 문제, 구성 드리프트 등 여러 문제가 발생할 수 있습니다. 조직과 팀이 클수록 문제의 규모도 커집니다. 이러한 모든 문제는 인프라스트럭처를 코드로 정의하는 개념인 인프라스트럭처를 코드 (IaC)를 사용하여 제거하거나 최소화할 수 있습니다.

인프라스트럭처를 코드 (IaC)로 표현하기: 예시

IaC는 인프라스트럭처 구성 요소를 구축하는 데 필요한 모든 것을 코드로 저장하는 산업 용어입니다. 이 코드는 일반적으로 JSON 또는 YAML 파일에 정의되며 인프라스트럭처가 어떻게 보여야 하는지를 나타냅니다.

모든 구성 요소가 구조화된 파일에 정의되면 다른 프로세스가 코드를 이해하고 즉시 그 문서를 인프라를 구축하는 지침으로 사용합니다.

일반적인 의사 코드와 같은 예를 들어 가상 머신(VM)을 생성해야 할 수도 있습니다. 그 VM에는 컴퓨팅, 스토리지 및 네트워킹과 같은 필요한 요소가 있습니다. IaC 접근 방식은 템플릿에 VM과 그 구성 요소를 설명하는 것입니다.

템플릿

다음 코드 스니펫에서는 각 구성 요소가 계층 구조로 분해되고 각 구성 요소에 대해 정의된 속성을 볼 수 있습니다. 이 가상의 예제는 대부분의 서비스에서 템플릿이라고 부르는 JSON 파일에 작성되었습니다.

{
	"VM": {
        "Name": "MYVM",
        "Disk": {
            "Size": "100GB"
        },
        "Networking": {
            "IPAddress" : "10.0.0.1"
        }
    }
}

이 템플릿은 VM과 해당 VM에 연결된 모든 속성을 정의합니다. 템플릿 작성자가 정의해야 하는 VM의 모습을 정의하는 특정 스키마가 있습니다. 이 템플릿은 그런 다음 myvm.json이라는 파일로 저장됩니다.

소스 제어

이제 VM을 구성하는 모든 구성 요소가 단일 파일에 저장되었습니다. 좋은 DevOps 전문가처럼 그 파일을 소스 제어에 체크합니다. 이제 파일의 변경 사항을 추적할 수 있는 방법이 있습니다.

도구

이제 파일이 생성되었으므로, 빌드하려는 내용을 이해하는 파일을 읽을 수 있는 도구나 서비스가 필요합니다. 그 도구는 템플릿을 입력으로 사용하고 다른 상호 작용 없이 해당 사양에 따라 VM을 구축합니다.

> [some command line tool] -File myvm.json

좋은 거래, 그런데 여기에서 멈추지 않습니다.

구성 드리프트 대응

이제 가상 머신의 NIC에 할당된 정적 IP 주소를 변경해야 한다고 가정해보십시오. 가상 머신에 RDP하여 IP를 변경할 수 있지만, 그렇게 하고 싶지 않습니다. 왜냐하면 다음과 같은 이유 때문입니다.

  1. 변경 작업을 수동으로 수행하면 시간이 낭비되며 인간의 실수 가능성이 있습니다.
  2. IP를 변경한 사람과 변경 일자에 대한 감사 추적이 없습니다.
  3. IP 주소를 잘못 입력한 경우 변경 내용을 자동으로 되돌릴 방법이 없습니다.

인프라스트럭처 코드(IaC)를 사용하면 위에서 언급한 모든 문제를 해결할 수 있습니다. 몇 번의 키 입력으로 변경 작업을 수행할 수 있으므로 관리자와 감사원이 당신을 좋아할 것입니다.

myvm.json 파일을 열고 IPAddress 속성을 변경한 후 변경 사항을 소스 제어에 커밋하고 도구를 다시 실행하십시오. 끝입니다.

{
	"VM": {
        "Name": "MYVM",
        "Disk": {
            "Size": "100GB"
        },
        "Networking": {
            "IPAddress" : "10.0.0.2"
        }
    }
}
> [some command line tool] -File myvm.json

도구는 어떤 변경 사항이 필요한지 스스로 알고 있습니다. NIC를 분리하거나 전체 가상 머신을 다시 빌드하지 않습니다. 모든 IaC 도구와 서비스는 변경 작업을 수행하는 방법을 이해할 수 있습니다. 마법 같지요!

하지만 이제 잘못된 IP를 사용했음을 깨달았고 복원해야 합니다. 문제 없습니다. 소스 제어에서 변경 사항을 되돌리고 커밋하고 도구를 실행하면 문제를 해결할 수 있습니다.

하지만 이게 끝이 아닙니다.

지속적인 배포의 시작

템플릿으로 저장된 인프라가 소스 제어에 저장되어 있으면, 자동화된 릴리스 또는 지속적인 전달 파이프라인을 시작하기 위한 구성 요소가 있습니다.

템플릿을 변경할 때마다 해당 도구를 실행해야 했던 것을 기억하세요. 자동화된 파이프라인/워크플로우에서는 해당 도구가 자동으로 실행됩니다. 환경을 생성하거나 변경하는 프로세스가 자동화되면 템플릿에 변경 사항을 커밋하는 순간 인프라가 일치합니다.

충분한 템플릿을 작성하면 결국 전체 인프라를 코드로 나타낼 수 있습니다. 또는 코드로.

결론

IaC는 운영팀이 소프트웨어 개발자의 방법론을 활용할 수 있도록 하는 DevOps 방법론입니다. IaC는 소프트웨어 개발자가 오랫동안 활용해온 많은 이점을 시스템 관리자의 손에 넣어줍니다.

Source:
https://adamtheautomator.com/infrastructure-as-code-iac/