후니의 IT인프라 사전
[T101 스터디] 네이버 클라우드 - VPC 환경의 단일 WebServer 배포 본문
[T101 스터디] 네이버 클라우드 - VPC 환경의 단일 WebServer 배포
james_janghun 2022. 11. 12. 15:00당연하지만 우리는 클라우드 벤더사의 자원을 생성할 것이고, CLI를 이용하기 때문에 반드시 사전작업을 먼저 진행해야한다.
사전 작업을 진행했다는 전제 하에 다음 작업을 수행할 수 있다.
완성된 코드는 github에서 확인할 수 있다.
작업 디렉토리 생성
앞서 말했듯 테라폼에서는 작업 디렉토리 단위로 작업을 편성하고 이를 마치 프로젝트라고 생각하면 된다.
우리는 web-dev라는 하나의 프로젝트를 구성하겠다.
mkdir single-web-server
cd single-web-server
provider 규정
가장 먼저 할 일은 내가 사용할 provider가 무엇인지 테라폼에게 알려주는 일이다. 따라서 provider 선언을 해주고 terraform init명령어를 통해서 해당 디렉토리를 해당 환경으로 규정시킨다.
1. provider.tf 생성
해당 provider에 대한 코드는 모두 Terraform registry의 ncloud 항목에서 가져올 수 있다.
민감정보는 모두 var를 통한 변수처리를 진행한다.
terraform {
required_providers {
ncloud = {
source = "NaverCloudPlatform/ncloud"
}
}
required_version = ">= 0.13"
}
provider "ncloud" {
access_key = var.access_key
secret_key = var.secret_key
region = var.region
site = var.site
support_vpc = var.support_vpc
}
2. variables.tf 생성
기존 코드에서 {var.변수명}으로 처리된 내용에 대한 값을 variables 파일로 별도 생성해서 관리할 수 있다.
variable "access_key" {
default = "엑세스 키"
}
variable "secret_key" {
default = "시크릿 키"
}
variable "region" {
default = "KR"
}
variable "site" {
default = "public"
}
variable "support_vpc" {
default = "true"
}
3. terraform init
init을 통해서 내가 사용할 provider 선언을 마친다. 아래 화면처럼 초록색으로 successfully initialized! 라는 문구가 등장한다면 잘 선언된 것이다.
terraform init
main.tf 테라폼 파일 작성
이 후부터는 사실 terraform 보다 클라우드 지식이 더 중요하다고 볼 수 있는데 인스턴스 생성에 앞서 내가 사용할 인스턴스의 네트워킹 구성을 선행해야한다.
VPC (Virtual Private Cloud) 및 Subnet생성
VPC는 해당 인스턴스가 위치할 개인 사설 네트워크 영역으로 구성할 IP 설정이 가능하다.
먼저 vpc.tf 파일을 작성한다.
1. main.tf작성
resource "ncloud_vpc" "vpc" {
name = "web-dev-vpc"
ipv4_cidr_block = "10.0.0.0/16"
}
resource "ncloud_subnet" "subnet" {
vpc_no = ncloud_vpc.vpc.id
subnet = "10.0.1.0/24"
zone = "KR-2"
network_acl_no = ncloud_vpc.vpc.default_network_acl_no
subnet_type = "PUBLIC"
name = "subnet-01"
}
2. Terraform plan 으로 파악
terraform plan
Terraform plan을 입력하면 아래와 같이 생성될 리소스 정보에 대해서 표시해준다.
resource가 우리가 선언한 내용에 대한 내용이며, +는 생성표시이다.
맨 마지막 줄에 plan 줄에서 총 생성되는 리소스의 갯수 등을 파악할 수 있다.
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# ncloud_network_acl.nacl will be created
+ resource "ncloud_network_acl" "nacl" {
+ description = (known after apply)
+ id = (known after apply)
+ is_default = (known after apply)
+ name = (known after apply)
+ network_acl_no = (known after apply)
+ vpc_no = (known after apply)
}
# ncloud_vpc.vpc will be created
+ resource "ncloud_vpc" "vpc" {
+ default_access_control_group_no = (known after apply)
+ default_network_acl_no = (known after apply)
+ default_private_route_table_no = (known after apply)
+ default_public_route_table_no = (known after apply)
+ id = (known after apply)
+ ipv4_cidr_block = "10.0.0.0/16"
+ name = (known after apply)
+ vpc_no = (known after apply)
}
Plan: 2 to add, 0 to change, 0 to destroy.
3. Terraform apply로 작업 실행
plan에서 원하는 대로 실행될 준비가 완료되었다면 terraform apply를 통해서 실제로 배포해본다.
terraform apply --auto-approve
서버 인증키(pem) 생성
서버 인증 및 비밀번호 획득을 위한 pem 키를 생성하고, 해당 pem키가 저장될 장소를 local_file 리소스를 통해서 규정합니다. filename에 저장 경로를 규정해주면 해당 경로로 pem키가 생성되며, destroy시 pem키도 같이 삭제됩니다.
resource "ncloud_login_key" "login_key" {
key_name = "key-test"
}
resource "local_file" "private_key" {
filename = "./${ncloud_login_key.login_key.key_name}.pem"
content = "ncloud_login_key.login_key.private_key"
file_permission = "0400"
}
ACG(Access Control Group) 생성
ACG는 AWS의 Security Group 과 동일한 리소스입니다. 인스턴스의 inbound, outbound traffic을 통제합니다.
1. ACG 생성 (acg 설정이 필요한 경우만 사용, default가 기본으로 생성됨)
resource "ncloud_access_control_group" "web-acg" {
name = "web-dev-acg"
description = "This is acg for webserver on dev"
vpc_no = ncloud_vpc.vpc.id
}
- ncloud_access_control_group
name : ACG의 이름을 규정
description : 설명 작성
vpc_no : 해당 ACG가 속할 vpc를 규정
2. ACG-Rule 설정
resource "ncloud_access_control_group_rule" "acg-rule" {
access_control_group_no = ncloud_vpc.vpc.default_access_control_group_no
inbound {
protocol = "TCP"
ip_block = "0.0.0.0/0"
port_range = "22"
description = "accept 22 port"
}
inbound {
protocol = "TCP"
ip_block = "0.0.0.0/0"
port_range = "80"
description = "accept 80 port"
}
outbound {
protocol = "TCP"
ip_block = "0.0.0.0/0"
port_range = "1-65535"
description = "accept 1-65535 port"
}
}
WebServer 배포
1. init script 규정
nginx 서버를 통해서 web server를 배포하기 위해서 자동 설치 스크립트를 적용시켜 보겠습니다.
resource "ncloud_init_script" "init" {
name = "http-script"
content = "#!/bin/bash \n yum install -y httpd \n systemctl start httpd"
}
2. Web Server 인스턴스 생성
서버 인스턴스를 생성하기 위해서 필요한 서브넷 정보와 이미지 정보를 기입하고, 공인 IP를 추가하도록 하겠습니다.
resource "ncloud_server" "server" {
subnet_no = ncloud_subnet.subnet.id
name = "dev-web-server"
server_image_product_code = "SW.VSVR.OS.LNX64.CNTOS.0703.B050"
login_key_name = ncloud_login_key.login_key.key_name
init_script_no = ncloud_init_script.init.id
}
- ncloud_server
name : 서버의 이름을 규정합니다.
subnet_no : 해당 서버가 위치할 서브넷 규정
server_image_product_code : 서버 이미지를 규정 (이미지 정보는 이 링크에서 자세하게 확인 가능합니다)
login_key_name : 사용할 pem 키를 규정
init_script_no : 사용할 init script가 있다면 id를 규정
3. Public IP 추가
공인 IP를 통해서 외부 노출을 할 수 있도록 적용시켜 줍니다.
resource "ncloud_public_ip" "public_ip" {
server_instance_no = ncloud_server.server.id
}
- ncloud_public_ip
server_instance_no : 공인아이피를 부여할 서버 규정
'프로젝트&&스터디 > Terraform 스터디 [T101]' 카테고리의 다른 글
[Terraform 101] 테라폼 백엔드 (0) | 2022.12.12 |
---|---|
[T101 스터디] 네이버 클라우드 NKS 클러스터 구성하기 (0) | 2022.12.11 |
[T101 스터디] 네이버 클라우드 - Auto Scaling 및 LB 배포 (0) | 2022.11.12 |
[T101 스터디] Terraform 활용해서 네이버 클라우드 다루기 - 준비 (0) | 2022.11.12 |
[T101 스터디] Terraform 개요 (0) | 2022.11.12 |