cloud bee

[ Terraform ] aws에서 테라폼 사용하기 본문

AWS/code

[ Terraform ] aws에서 테라폼 사용하기

who you 2023. 1. 26. 07:27

오늘 기능훈련을 하다가, Terraform을 사용해 보고 싶어서 Terraform에 관한 실습을 해 보았다.

내가 Terraform을 실습하면서 정리한 내용은 다음과 같다.

 

테라폼 사용

⏺️ 설치 환경 구성하기

⏺️ provider 설정하기

⏺️ vpc 생성하기

⏺️ EC2 web instance 생성하기

⏺️ 테라폼 리소스 삭제


설치 환경 구성

이번 실습은 로컬에서 access key를 부여하여 구성하지 않을 것이다.

amazon console ec2 환경에서 terraform을 설치하고 구성해보려 한다.

 

1. 먼저 https://console.aws.amazon.com/vpc에 들어가서 기본 VPC 생성을 진행한다.

기본 VPC이다.

2. 라우팅 테이블에 서브넷을 모두 연결한다.

라우팅 테이블 설정

3. 보안그룹을 생성해 준다.

보안그룹 생성

4. https://console.aws.amazon.com/iam에 접속하여 ec2에서 사용 가능한 AdministratorAccess 권한을 생성해 준다.

준비된 역할

 

5. 생성한 환경을 기반으로 ec2 instance를 다음과 같이 생성해 준다.

인스턴스 생성 1
AdministratorAccess 연결

 

6. 생성된 인스턴스의 터미널을 열어 아래 명령어로 Terraform을 설치해 준다.

#!/bin/bash
sudo yum install -y yum-utils shadow-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
sudo yum -y install terraform

 

설치확인

설치 버전을 확인한다.


provider 설정하기

인스턴스의 터미널을 열어 다음 명령어로 provider.tf 파일을 생성해 준다.

근데 왜 provider를 설정할까?🤔

-> 이유는 간단하다. 테라폼과 외부 서비스(aws)를 연결해 주기 위해서 사용한다.

 

다음 명령어를 입력하여 provider.tf를 작성하고 terraform을 실행해 준다.

mkdir demo && cd demo
cat << EOF > provider.tf
provider "aws" {
  # access_key = "YOUR-ACCESS-KEY"
  # secret_key = "YOUR-SECRETK-KEY"
  region = "ap-northeast-2"
}
EOF

terraform init
terraform plan
terraform apply

 

실행되면 다음과 같이 표시되어야 한다.

실행 표시 사진이다.


VPC 생성하기

테라폼을 통해 퍼블릭 서브넷 2개를 가지는 VPC를 생성해 보도록 할 것이다.

가용영역이 A와 C를 가지는 VPC를 생성하는 코드는 다음과 같다.

#!/bin/bash
cat << EOF > vpc.tf
data "aws_availability_zones" "available" {
  state = "available"
}
resource "aws_vpc" "new_vpc" {
  cidr_block  = "10.0.0.0/16"
  enable_dns_hostnames = true
  enable_dns_support = true
  instance_tenancy = "default"

  tags = {
    Name = "NEW-VPC"
  }
}
resource "aws_subnet" "new_public_subnet_2a" {
  vpc_id = aws_vpc.new_vpc.id
  cidr_block = "10.0.0.0/24"
  map_public_ip_on_launch = true
  availability_zone = data.aws_availability_zones.available.names[0]
  tags = {
    Name = "NEW-PUBLIC-SUBNET-2A"
  }
}

resource "aws_subnet" "new_public_subnet_2c" {
  vpc_id = aws_vpc.new_vpc.id
  cidr_block = "10.0.1.0/24"
  map_public_ip_on_launch = true
  availability_zone = data.aws_availability_zones.available.names[2]
  tags = {
    Name = "NEW-PUBLIC-SUBNET-2C"
  }
}

resource "aws_internet_gateway" "new_igw" {
  vpc_id = aws_vpc.new_vpc.id
  tags = {
    Name = "NEW-IGW"
  }
}
resource "aws_route_table" "new_public_rtb" {
  vpc_id = aws_vpc.new_vpc.id

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.new_igw.id
  }
  tags = {
    Name = "NEW-PUBLIC-RTB"
  }
}
resource "aws_route_table_association" "new_public_subnet_2a_association" {
  subnet_id = aws_subnet.new_public_subnet_2a.id
  route_table_id = aws_route_table.new_public_rtb.id
}

resource "aws_route_table_association" "new_public_subnet_2c_association" {
  subnet_id = aws_subnet.new_public_subnet_2c.id
  route_table_id = aws_route_table.new_public_rtb.id
}
EOF
terraform init
terraform plan
terraform apply

 

위 코드를 실행하면 10.0.0.0 대역의 VPC가 생성된다

성공적으로 생성된 VPC
성공적으로 생성된 VPC2


EC2 web instance 생성하기

EC2 web instance를 생성하기 전에 WEB-KEY라는 이름을 가진 키페어를 사전에 미리 생성해 준다.

 

이제 아래 명령어를 실행하여 instance.tf를 작성해 web instance를 생성하도록 해준다.

해당 web instance는 "Hello, web Site!!"라는 페이지가 뜨도록 구성하였다.

#!/bin/bash
cat << EOF > instance.tf
resource "aws_instance" "example" {
  ami                    = "ami-0fd0765afb77bcca7"
  instance_type          = "t2.micro"
  subnet_id              = "${aws_subnet.new_public_subnet_2a.id}"
  vpc_security_group_ids = [aws_security_group.instance.id]
  key_name  = "WBE-KEY"
  user_data = <<-EOF
              #!/bin/bash
              yum install -y httpd
              systemctl enable --now httpd
              echo "Hello, Web Site!!" > /var/www/html/index.html
              EOF

  tags = {
    Name = "demo-webserver"
  }
}

resource "aws_security_group" "instance" {

  name = var.security_group_name
  vpc_id = "${aws_vpc.new_vpc.id}"

  ingress {
    from_port   = 80
    to_port     = 80
    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"]
  }
  tags = {
    Name = "web-sg"
  }
}

variable "security_group_name" {
  description = "The name of the security group"
  type        = string
  default     = "terraform-example-instance"
}

output "public_ip" {
  value       = aws_instance.example.public_ip
  description = "The public IP of the Instance"
}

output "public_dns" {
  value       = aws_instance.example.public_dns
  description = "The Public dns of the Instance"
}

output "private_ip" {
  value       = aws_instance.example.private_ip
  description = "The Private_ip of the Instance"
}
EOF
terraform init
terraform plan
terraform apply

 

생성 결과

생성 성공

 

이제 생성된 인스턴스의 퍼블릭 IP를 복사하여 웹 서버에 접속해 준다.

파이어폭스 브라우저에서 접속

 

이제 인스턴스에서 curl 명령어를 써볼 것이다.

성공적인 결과


테라폼 리소스 삭제

테라폼 리소스를 삭제하는 방법은 다음과 같다.

terraform destroy

 

이 명령어를 쓸 때 주의할 점이 있는데, 여태까지 생성하였던 리소스 전부가 삭제될 수도 있다는 점을 감안하고 실행하여야 한다.

삭제 과정 1

 

성공적인 삭제

다음과 같이 리소스가 삭제된 것을 확인할 수 있다.

 

 

'AWS > code' 카테고리의 다른 글

sns 메시지 게시할때마다 cloudwatch로 기록하기  (0) 2023.01.29
Lambda 볼륨 암호화  (0) 2023.01.16
Serverless Api test  (0) 2022.11.09
code pipeline 간단하게 구현  (0) 2022.10.31
Comments