저번실습 정리

관리자의 할 일

  1. 외부 네트워크 만들기
  2. Flavor 만들기(EC2 Instance Type)

사용자의 할 일

  1. 내부 네트워크 만들기(VPC 만드는 것과 동일하게 격리 단위임)
    1. Router 리소스 만들기(외부와 연결)
    2. 자신의 내부 네트워크 만들고 라우터와 연결
    3. 외부 인터넷 성공
  2. 보안 그룹 작성(SSH, HTTP, HTTPS, MYSQL 등등)
  3. Floating IP 생성
    • AWS EIP와 동일
    • 다만 지금 공인 아이피가 아닌 라우터를 통해 NAT 형태로 연결 즉 사설
    • 실제 업무에서는 공인 아이피를 나눠주게 할 수 있음
  4. 이미지 생성
  5. 키 페어 생성
  6. 인스턴스 만들기
  7. Floating IP 할당
  8. 오브젝트 스토리지(S3와 같음)

이러한 일련의 과정을 매번 수동으로 웹 콘솔에서 구성하는 것은 시간이 오래 걸리고, 실수 가능성도 높다.

특히 같은 환경을 여러 번 구성해야 하거나, 팀원 간에 동일한 인프라를 구성해야 할 경우 자동화가 필요하다.

해결 방법: IaC (Infrastructure as Code)

IaC란?

인프라(서버, 네트워크, 볼륨 등)를 코드로 정의하여 자동으로 구성할 수 있도록 하는 방식

Terraform, CloudFormation, Ansible, OpenStack Heat 등이 대표적인 IaC 도구이다.

IaC의 장점

  • 재현성: 동일한 환경을 언제든 똑같이 구성 가능
  • 버전 관리: Git으로 인프라 변경 사항 추적 가능
  • 자동화: 사람의 개입 없이도 리소스를 일괄적으로 생성
  • 협업: 코드 기반으로 팀 단위 작업 가능

OpenStack의 IaC 도구: Heat

OpenStack에서는 Heat이라는 오케스트레이션 도구를 제공한다.
AWS의 CloudFormation과 유사하며, YAML 기반의 Heat 템플릿(Hot Template) 으로 인프라를 정의한다.

Heat로 할 수 있는 일

  • 인스턴스, 볼륨, 네트워크, 보안 그룹 등 자동 생성
  • 복잡한 인프라를 스택(Stack) 단위로 묶어 관리
  • 삭제 시 의존성에 따라 깔끔하게 정리

실습 목표

이전 실습에서 일일이 웹 콘솔로 구성했던 환경을
이번엔 Heat 템플릿을 통해 VM을 만들어 보면서 

기존의 네트워크에 연결해볼 것이다.

 

실습

템플릿을 직접 yaml 파일로 작성해도 된다.

하지만 더 간편하게 만드는 툴이 포함되어있다.

 

이렇게 탬플릿 생성기를 통해 원래 VM을 만들듯이 만들면 해당 설정에 맞는 템플릿을 받을 수 있다.

이 템플릿을 재사용해 만들 수 있다.

템플릿의 버전을 선택하고 생성 가능

heat_template_version: "2021-04-16"
description: "version 2017-09-01 created by HOT Generator at Thu, 29 May 2025 01:18:56 GMT."
resources: 
  Server_2: 
    type: "OS::Nova::Server"
    properties: 
      security_groups: 
        - "790315d5-9b2f-4a36-bf08-6c3e46c2d392"
      networks: 
        - subnet: "59802550-6005-4bbb-8a67-63bab687f51f"
      name: webserver
      flavor: "m1.micro"
      image: "4803a285-10cf-455e-9a9f-98ac5901ec10"
      availability_zone: nova
      key_name: "os-key"

 

스택 생성 완료

 

하지만 인스턴스 템플릿에는 볼륨을 추가하지 않았다. 하지만 잘 부팅이 된다.

왜 그럴까? → 이때 임시 볼륨이 만들어져서 그 곳에 OS가 설치되기 때문이다.

휘발성 볼륨 즉 Ephemeral Volume 인스턴스 스토어와 같은 것

 

DB 서버 + 볼륨 연결

heat_template_version: "2021-04-16"
description: "boot from pre-created volume"

resources: 
  Volume_1: 
    type: "OS::Cinder::Volume"
    properties: 
      name: "db-root-boot"
      size: 10
      volume_type: "826c86ec-fe27-4b5c-80fc-8ac824d0078e"
      image: "6e6ec1c2-58f3-40c2-9c66-0a5fbbda77bd"  # 올바른 방식
      availability_zone: nova

  Server_1: 
    type: "OS::Nova::Server"
    properties: 
      name: dbserver
      flavor: "m1.micro"
      availability_zone: nova
      key_name: "os-key"
      security_groups: 
        - "9c5b5798-4e2f-4329-9449-057976e42d5d"
      networks: 
        - subnet: "59802550-6005-4bbb-8a67-63bab687f51f"
      block_device_mapping_v2:
        - volume_id: { get_resource: Volume_1 }
          boot_index: 0
          device_name: vda
          delete_on_termination: true

여기서는 순서가 중요

볼륨이 먼저 만들어지고 서버가 만들어져야 함 OS를 담아야 하니까

인스턴스

 

루드 볼륨

 

마무리

반복적이고 수동적인 인프라 구성을 개선하기 위해, IaC(Infrastructure as Code) 개념을 도입하여
OpenStack의 오케스트레이션 도구인 Heat를 사용해 템플릿 기반 자동화 배포를 수행햇다.

 

  • 복잡한 자원 생성을 YAML 코드 한 장으로 정의하고
  • 여러 번 재사용 가능한 구조로 만들고
  • 인스턴스, 볼륨, 보안 그룹, 네트워크 등 다양한 리소스를 자동 생성했다.

이제까지는 오픈스택이 설치된 VM은 NAT 방식으로 통신했다.

다음 실습부터는 조금 더 실무와 가까운 방식인 Bridge 방식으로 VM을 새로 만들어 실습해보겠다.

 

 

 

+ Recent posts