Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 17 Current »

목차

IAC

1-1 Iac (Infra as a Code) 이란?

1-2 Iac 종류

1-3 lac 가치와 기대 효과

Terraform

2-1 Terraform 이란?

2-2 Terraform 주요 명령어

2-3 Terraform 코드는 어떻게 작성되는가?

2-4 Terraform 실행 환경 구성

2-5 Terraform Hands On

2-5-1 Terraform 코드 작성
2-5-2 Terraform 배포

IAC

1-1 Iac 이란?

Iac Infrastructure as Code의 약자로 IT 서비스를 위한 시스템을 구성할 때 수동으로 구성하는 대신 Shell기반의 스크립트(Shell Based Script)를 사용하여 컴퓨팅 인프라를 구성하는 기술을 말합니다.

"프로그래밍 형 인프라" 라고도 하는 Iac(Infrastructure as Code)는 인프라 구성을 마치 소프트웨어를 프로그래밍 하는 것처럼 처리하는 방식입니다.

결과적으로 애플리케이션을 작성하는 작업과 애플리케이션이 실행되는 환경을 구현하는 작업 사이의 경계가 모호해지기 시작했습니다.

애플리케이션은 자체적으로 VM(가상 시스템)을 생성하고 오케스트레이션 하는 스크립트를 포함할 수 있습니다. 이는 클라우드 컴퓨팅의 기본적인 부분으로, DevOps에 반드시 필요한 요소입니다.

1-2 Iac의 종류

Tool

Tool Type

Approach

Language

CHEF

설정 관리

선언형 & 명령형

Ruby

puppet

설정 관리

선언형

DSL & ERB

Ansible

설정 관리

선언형 & 명령형

YAML

CloudFormation

인프라 프로비저닝

선언형

JSON & YAML

Terraform

인프라 프로비저닝

선언형

HCL (Hashicorp Configuration Language)

1-3 lac 가치와 기대 효과

첫 번째 - 비용 절감입니다. IT 시스템의 운영/관리 에는 많은 인력과 비용이 소요됩니다. 단순히 재무적인 측면에서 비용 절감 효과 이외에 사람이 수 작업으로 진행하는 일들을 자동화하고, 운영/관리를 통합 관리함으로써 많은 비용 효율을 얻을 수 있으며, 기업 입장에서는 보다 중요한 비즈니스에 집중함으로써 높은 비용 효율을 확보할 수 있게 됩니다.


두 번째 - 빠른 실행입니다. 인프라 운영/관리의 자동화를 통해 인프라를 보다 빠르고 효과적으로 구성할 수 있습니다. 빠른 실행 능력을 통해 빠르게 변화하는 시장 상황에 보다 민첩하게 대응할 수 있으므로, 시장 선도적인 기술 도입을 통한 시장의 혁신을 주도할 수 있게 됩니다

세 번째 - 리스크 관리입니다. 인프라의 자동화는 수 동 구성 시 발생할 수 있는 오류와 인적 오류 (Human Error)와 관련된 위험(Risk)을 제거할 수 있습니다. 이런 위험을 제거하면 서비스의 다운타임(Down Time)이 감소하고 신뢰성이 향상될 수 있습니다.

이러한 laC의 가치(Value)와 기대 효과는 기업이 IT 시스템의 개발과 운영을 위한 DevOps를 구현하는데 필요한 핵심적인 역량이 됩니다.

2-1 [lac] Terraform이란?

쿠버네티스, aws, gcp, ncp 등의 클라우드 자원들을 코드 형태로 작성해서 배포하고 운영할 수 있는 환경을 제공합니다. Terraform은 기본적으로 코드를 작성하고 plan 명령을 이용해서 코드를 시뮬레이션을 하고 이상이 없으면 적용할 수 있습니다. Terraform은 테라폼 코어라는 기능을 제공하여 프로바이더와 프로비저너를 활용할 수 있고, 다양한 대상의 API를 연결해서 쓸 수 있도록 제공하는 도구 입니다.

image-20240320-012136.png

Terraform은 원하는 결과(state)를 명시하면, Terraform이 그 결과를 달성하기 위해 필요한 일련의 작업들을 자동으로 수행하는 선언적(declarative) 방식으로 인프라를 관리하는 도구입니다. 선언적인 방식은 인프라 관리를 단순화하고, 일관성을 유지할 수 있게 도와줍니다. 또한, 변경 내역을 추적하기도 용이합니다. 

Terraform은 자체적인 DSL(Domain Specific Language)을 사용합니다. DSL은 특정 분야에 특화된 언어를 말하며, Terraform에서는 HCL(HashiCorp Configuration Language)이라는 DSL을 사용합니다.

HCL은 Terraform을 위해 개발된 언어이며, HCL은 JSON과 유사한 구문을 사용하며, 구조화된 데이터를 표현하기 적합합니다. 그러나 HCL은 JSON보다 가독성이 높고 유연하다는 장점이 있습니다. 
또한, HCL에서는 변수와 함수를 사용할 수 있어서, 코드를 재 사용하고 유연하게 구성할 수 있으며 복잡한 구성을 쉽게 표현할 수 있습니다.

image-20240320-012210.png

2-2 Terraform 주요 명령어

terraform init - 초기화

terraform plan - 인프라 변경 사항에 관한 실행 계획

terraform validate - 유효성 검증

terraform apply - 계획을 기반으로 작업을 실행

terraform destroy - 모든 개체를 제거

terraform fmt - 코드 정렬 (띄어쓰기, 정렬 등)

terraform show - 현재 상태에 대한 Inspect 결과 출력

image-20240320-012237.png

2-3 Terraform 코드는 어떻게 작성되는가?

image-20240320-015017.png

Terraform은 위의 그림처럼 구성 되어 있습니다. 각 부분을 Software의 Block으로 생각하면 됩니다.

모든 Block을 한 파일에 구성 할 수도 있고, 분리 할 수도 있습니다.

image-20240320-015213.png

Terraform 파일들과 SW Block을 같이 보게 되면 위 그림과 같습니다.

각 파일의 특징은 다음과 같습니다.

  1. main.tf : 생성 될 자원들의 정보를 가지고 있는 파일입니다. resource, module SW Block을 포함하고 있습니다.

  2. outputs.tf : terraform apply가 되고 나서 결과를 출력하거나 특정 값들을 다른 Block에서 참조 하도록 정보를 저장합니다.

  3. vars.tf : main.tf 에서 resource나 module에 들어가는 변수명을 선언 해주는 파일입니다.

  4. terraform.tfvars : vars.tf 파일에 선언된 변수의 값들을 저장하는 파일 입니다.

  5. terraform.tfstate: terraform apply 후에 생성된 infra 들의 상태 정보를 가지고 있습니다.

2-4 Terraform 실행 환경 구성

1. 여기에서 Terraform을 설치합니다.

  1. 여기에서 VS Code를 설치합니다.

  2. 아래와 같이 윈도우 사용자 환경 구성을 해줍니다.

image-20240320-033855.png

2-5 Terraform Hands On

image-20240320-052252.png

Terraform에서 모듈이란? 리소스를 구성하는 단위입니다.

모듈은 특정 기능이나 목적을 가진 코드 블록으로, 재 사용 가능하며 관련 리소스의 집합을 정의합니다. 이러한 모듈을 사용하면 코드를 구조화하고 관리하기 쉽고, 코드의 재 사용성을 높일 수 있습니다.

image-20240320-060436.png

2-5-1 Terraform 코드 작성

  1. Providers.tf 코드 작성

providers.tf 파일은 해당 프로젝트에서 사용할 Terraform 공급자(provider)를 정의하는 파일입니다. 이 파일을 사용하여 Terraform이 각각의 인프라 공급자와 상호 작용할 수 있도록 설정할 수 있습니다.

image-20240320-055928.png

  1. 루트 모듈의 main.tfvariables.tf

루트 모듈의 main.tf 파일은 주로 리소스와 모듈 간의 관계를 정의하고 Terraform에서 관리할 인프라스트럭처의 주요 설정을 포함합니다. variables.tf 파일은 변수를 정의하는 데 사용됩니다.

image-20240320-062146.png

  1. 자식 모듈의 rg main.tfvariables.tf

자식 모듈의 main.tfvariables.tf 파일은 해당 모듈이 구성할 리소스와 변수를 정의합니다. 예를 들 어, 리소스 그룹을 생성하는 모듈의 경우, 해당 리소스 그룹을 만들기 위한 Terraform 구성과 관련 변수를 포함 할 것 입니다.

image-20240320-062218.png

  1. 자식 모듈의 vnet main.tfvariables.tf
    자식 모듈의 main.tfvariables.tf 파일은 해당 모듈이 구성할 가상 네트워크(Virtual Network)와 관련된 리소스를 정의하고 관련 변수를 정의합니다.

image-20240320-062255.png

  1. 자식 모듈의 fw main.tfvariables.tf

자식 모듈의 main.tfvariables.tf 파일은 해당 모듈이 구성할 방화벽(Firewall)과 관련된 리소스를 정의하고, 관련 변수를 정의합니다.

image-20240320-062340.png

  1. 가상 머신(VM)을 관리하는 자식 모듈의 vm main.tfvariables.tf

image-20240320-062528.png

  1. 데이터베이스를 관리하는 자식 모듈의 db main.tfvariables.tf

image-20240320-062546.png

2-5-2 Terraform 배포

  1. terraform Init 명령어를 사용하여 구성 파일이 있는 작업 디렉터리를 초기화 합니다.

image-20240320-034633.png

  1. terraform.lock.hcl 파일이 있으면 해당 파일에 명시된 버전으로 init을 수행합니다. 이후 작업자가 의도적으로 버전을 변경하거나 코드에 명시한 다른 버전으로 변경하려면 terraform init -upgrade를 수행하여야 합니다.

image-20240320-035015.png

  1. terraform validate 명령어를 사용하여 디렉터리에 있는 Terraform 구성 파일의 유효성을 확인합니다.

image-20240320-040741.png
  1. az login 명령어를 사용하여 로그인합니다.

  2. terraform plan 명령어를 사용하여 적용 전 예상한 구성이 맞는지 검토합니다.

image-20240320-042143.png

  1. terraform apply 명령어를 입력하여 plan에서 작성된 적용 내용을 토대로 작업을 실행합니다.

image-20240320-043434.pngimage-20240320-043527.png

  1. 배포 완료 후 portal.azure.com 접속하여 리소스 확인

image-20240320-044324.png

  1. terraform destroy 명령을 사용하여 terraform 구성에서 관리하는 모든 개체를 제거 합니다.

image-20240320-044712.png

  • No labels

0 Comments

You are not logged in. Any changes you make will be marked as anonymous. You may want to Log In if you already have an account.