본문 바로가기
Project/Cloud Project

IaC를 이용한 클라우드 인프라 구축 프로젝트 2

by kjy1010 2023. 12. 5.

첫번째로 진행한 Terraform을 이용해 AWS 환경 구성 프로젝트의 구현방식에 대해 설명드리겠습니다.

 

프로젝트 진행환경

 

인스턴스 환경은 다음과 같습니다.

 

VM ware에 CentOS 8.4와 Ubuntu 22.04.3 환경을 구축하였으며, AWS는 Linux 2023 AMI 환경을 2대 구축하였습니다.

 

Service Architecture 는 다음과 같이 구성하였습니다.

 

이제 구현 방법에 대해 설명드리겠습니다.

 

Terraform을 이용해 AWS 환경 구성 구현

1. CentOS 8에서 Terraform 설치하기

CentOS Stream 8 은 Terraform 설치를 기본적으로 지원하지 않으므로 그 레파지토리를 먼저 아래처럼 설치한 후 그 패키지를 설치해야 합니다.

[root@master ~]# yum-config-manager --add-repo \ > https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
[root@master ~]# dnf repolist 
[root@master ~]# dnf install terraform awscli -y 
[root@master ~]# yum --showduplicate list terraform 
[root@master ~]# rpm -qa | grep terraform
[root@master ~]# terraform version

설치가 완료된 모습

 

2. aws provider 파일 생성하기

Terraform 을 사용하여 해당 리전에 aws 리소스를 생성하고 관리하는 기본 설정을 나타내는 코드 작성합니다.

[nana@master] $ mkdir auto-lb
[nana@master ]$ cd auto-lb
[nana@master auto-lb] $ vim main.tf
terraform {
 required_version = "1.5.5"
 required_providers {
 aws = {
 source = "hashicorp/aws"
 version = "~> 5.3"
 }
 }
}
provider "aws" {
 region = "ap-northeast-3"    #region 변경
}

 

3. 새로운 Key pair 사용하기

EC2 인스턴스를 생성하고 이를 접속하기 위해 새로운 “terraform-key”를 생성하여 인스턴스로의 접속을 시도합니다.

1) ssh-keygen 이용 terraform-key 생성

$ ssh-keygen -t rsa -b 4069 -C {nana@naver.com} -f "terraform-key" -N "" 
$ ls
$ cat terraform-key.pub

terraform-key라는 새로운 key가 생성된 모습

 

2) terraform-key 생성 파일 정의하기

[nana@master auto-lb] $ vim key-pair.tf 
resource "aws_key_pair" "terraform_key" {
 key_name = "terraform-key"
 public_key = file("./terraform-key.pub")
 tags = {
   Name = "terraform-key"
 }
}

 

4. 새로운 SecurityGroup 생성하기

terraform-sg 라는 이름의 SecurityGroup 을 생성하고 이를 인스턴스에 적용

포트번호 80,22,443,3306,9200,5601

[nana@master auto-lb] $ vim security-group.tf 
resource "aws_security_group" "instance" {
  name        = "terraform-instance-sg"
  description = "Security Group for terraform instance"
  vpc_id      = aws_vpc.terraformVPC.id

  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    from_port   = 3306
    to_port     = 3306
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # ICMP 규칙 추가
 ingress { 
   from_port = -1 # 모든 ICMP 트래픽 
   to_port = -1 
   protocol = "icmp" 
   cidr_blocks = ["0.0.0.0/0"] 
 } 

 egress { 
  from_port = 0 
  to_port = 0 
  protocol = "-1" 
  cidr_blocks = ["0.0.0.0/0"] 
  }

  tags = {
    Name = "terraform-sg"
  }
}

terraform-sg라는 이름으로 SecurityGroup이 생성됨을 확인 할 수 있음
설정한 인바운드 규칙이 올바르게 생성됨을 확인 할 수 있음

 

 

이번 포스팅에서는 아래와 같은 순서로 프로젝트 구현과정을 설명드렸습니다.

 

1. CentOS 8에서 Terraform 설치하기

2. aws provider 파일 생성하기

3. 새로운 Key pair 사용하기

4. 새로운 SecurityGroup 생성하기

 

다음 포스팅에서 VPC를 생성하는 부분부터 설명을 이어가보도록 하겠습니다.