devops

가변적 인프라, 불변적 인프라 차이와 Terraform 선언적 방식과 상태 본문

DevOps

가변적 인프라, 불변적 인프라 차이와 Terraform 선언적 방식과 상태

vata500 2022. 6. 24. 17:37
반응형

Pets(가변적) vs Cattle(불변적)

immutable Infrastructure(불변적 인프라스트럭처)

불변의 인프라스트럭처의 정의는 서버가 설치된 이후 절대 변경되지 않는 형태의 인프라다. 여기서 수정은 기존의 서버를 제거하고 새롭게 만드는 것을 의미하는 것이다.

여기서 '멱등성의 법칙'이 적용된다.

* 멱등성 법칙 : 같은 작업을 여러 번해도 결과가 동일, 한번 설정된 서버는 수정 없이 파기되므로 멱등성 보자아

특징

각 서버의 버전은 서로 독립적이며, 두 가지 버전을 실행할 수 없다.

변경이 필요할 때 새버전의 서버를 생성하기 때문에 버전의 문제를 추적할 수 있다.

각 서버의 구성이 일관되기 때문에 다른 서버를 테스트하고 롤아웃하는 것이 쉽다.

서버가 동일하게 유지되므로 예측 가능성을 높일 수 있다.

클라우드 기술과 같으느 상호 의존적인 환경에 적합하다.

단점

데이터 저장소를 로컬 디스크에 복사하지 않고 외부화해야 한다.

기존 서버는 수정할 수 없어 문제 발생 시, 동일 구성의 서버에 대해 완전 점검이 필요하다.

Mutable Infrastructure(가변적 인프라스트럭처)

웹 서버를 만들고 기존의 변경 가능한 인프라에 배포했을 경우, 문제 발생시 서버를 쉽게 변경할 수 있다. 기존 데이터를 새 시스템으로 옮길 필요 없이 기존 버전에 변경 사항을 적용한다.

특징

변경이 필요할 때마다 처음부터 서버를 구축할 필요가 없다.

개별 서버에 대한 업데이트를 롤 아웃하여 프로세스 업데이트를 더 빠르게 할 수 있다.

각 서버를 개별 수준에서 이해할 수 있기 때문에 문제를 진단하기 쉽다.

단점

각 서버의 구성이 고유하기 때문에 각 서버를 진단, 관리하는 것이 더 어려워진다. (Configure Drift)

서버에 대한 변경사항이 문서화되지 않기 때문에 추적이 어렵고 진단이 불가능하다.

DNS 오류, 네트워크 연결 불량과 같은 여러 이유로 업데이트가 실패할 수 있다.

업데이트 추적 문제로 디버깅에 시간이 많이 걸린다. 문제에 대한 이해도 없이 여러 버전의 업데이트로 끝날 수 있다.


불변적 인프라는 자동 배포를 지원한다. 이 유형의 인프라는 주로 가상화를 중심으로 구축되기 때문에, 하드웨어와 소프트웨어의 프로비저닝 및 디프로비저닝에 대해 걱정할 필요가 없다.

또한, 클라우드에서는 리소스 생성을 위한 모든 프로세스를 문서화할 수 있다.

데브옵스는 종속성을 제한해야 시간이 절약된다. 자동화된 테스트 및 배포를 지원하는 파이프라인을 생성할 때 수동 검증은 시간이 많이 소요되므로 새로운 어플리케이션을 더 빨리 시작하는 것을 방해한다. 변경할 수 없는 인프라를 사용하여 시나리오를 재현하고 자동으로 재해복구도 가능하다.

https://www.bridge-global.com/blog/mutable-vs-immutable-infrastructure/

 

Mutable vs Immutable Infrastructure Comprehensive Guide in 2021

Comparing and contrasting mutable vs immutable infrastructure is a crucial decision that all developers need to consider. Access the comprehensive guide.

www.bridge-global.com

https://www.openmaru.io/%EB%B6%88%EB%B3%80%EC%9D%98-%EC%9D%B8%ED%94%84%EB%9D%BC%EC%8A%A4%ED%8A%B8%EB%9F%AD%EC%B2%98/

 

불변의 인프라스트럭처(immutable infrastructure) - OPENMARU APM

불변의 인프라스트럭처 (immutable infrastructure) 는 배포 업그레이드 보안 취약점 조치 등 서버상태의 변경이 필요할 경우 이미지를 만들어 배포하는 방식입니다. 업그레이드시에도 기존의 운영 환

www.openmaru.io


선언적 프로그래밍?

한 정의에 따르면, 프로그램이 어떤 방법으로 해야 하는지를 나타내기보다 무엇과 같은지를 설명하는 경우에 "선언형"이라고 한다. 

예를 들어, 웹 페이지는 선언형인데 웹페이지는 제목, 글꼴, 본문, 그림과 같이 "무엇"이 나타나야 하는지를 묘사하는 것이지 "어떤 방법으로" 컴퓨터 화면에 페이지를 나타내야 하는지를 묘사하는 것이 아니기 때문이다. 

이것은 전통적인 포트란과 C, 자바와 같은 명령형 프로그래밍 언어와는 다른 접근방식인데, 명령형 프로그래밍 언어는 프로그래머가 실행될 알고리즘을 명시해주어야 하는 것이다. 간단히 말하여, 명령형 프로그램은 알고리즘을 명시하고 목표는 명시하지 않는 데 반해 선언형 프로그램은 목표를 명시하고 알고리즘을 명시하지 않는 것이다.

  • 명령형 방식(HOW) : 센텀시티역 4번 출구에서 내려서 쭉 직진하세요. 그리고 횡단보도를 건너고 파리바게트가 보이면 오른쪽으로 가셔서 좌회전하세요. 그럼 이쁜 카페가 보입니다. 그 카페에 들어가서 에어컨 바람이나 쐬세요.
  • 선언형 방식(WHAT) : 주소는 부산시 센텀구 중앙대로 121번길 24입니다.

이렇게 HoW 부분은 추상화를 하고 WHAT에 집중하는 것이 선언적 프로그래밍이라고 한다.

Terraform, State

Terraform은 관리형 인프라 및 구성에 대한 상태를 저장해야 한다. 이 상태는 Terraform에서 실제 리소스를 구성에 매핑하고, 메타데이터를 추적하고, 대규모 인프라의 성능을 개선하는 데 사용된다.

이 상태는 기본적으로 "terraform.tfstate"라는 로컬 파일에 저장되지만 원격으로 저장할 수도 있으므로 팀 환경에서 더 잘 작동한다.

Terraform은 이 로컬 상태를 사용하여 계획을 만들고 인프라를 변경합니다. 작업 전에 Terraform은 실제 인프라로 상태를 업데이트하기 위해 새로 고침을 수행한다. (새로고침 = refresh 명령)

Terraform 상태의 주요 목적은 원격 시스템의 개체와 구성에 선언된 리소스 인스턴스 간의 바인딩을 저장하는 것이다. Terraform은 구성 변경에 대한 응답으로 원격 객체를 생성할 때 특정 리소스 인스턴스에 대해 해당 원격 객체의 ID를 기록한 다음 향후 구성 변경에 대한 응답으로 해당 객체를 잠재적으로 업데이트하거나 삭제한다.

Command: refresh

terraform refresh 명령은 모든 원격 개체에 현재 설정을 읽고 일치하도록 Terraform 상태를 업데이트한다. 인프라는 수정되지 않지만 상태 파일은 수정된다. 상태가 변경되면 다음 계획 또는 적용 중에 변경이 발생할 수 있다.

https://runebook.dev/ko/docs/terraform/commands/refresh

 

Terraform - 명령 : 새로 고침 - terraform refresh 명령은 실제 인프라 (상태 파일을 통해) Terraform가 알고

terraform refresh 명령은 실제 인프라 (상태 파일을 통해) Terraform가 알고있는 상태를 조정하는 데 사용됩니다. 마지막으로 알려진 상태에서 드리프트를 감지하고 상태 파일을 업데이트하는 데 사용

runebook.dev

https://www.terraform.io/cli/commands/refresh

 

Command: refresh | Terraform by HashiCorp

The `terraform refresh` command reads the current settings from all managed remote objects and updates the Terraform state to match.

www.terraform.io

https://www.terraform.io/language/state

 

State | Terraform by HashiCorp

An introduction to state, information that Terraform uses to map resources to a configuration, track metadata, and improve performance.

www.terraform.io

 

 

반응형
Comments