Skip to content

A Terrafrom module for deploying 3tire resources in Alibaba Cloud

Notifications You must be signed in to change notification settings

seodea/terraform-alicloud-module

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

68 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Terraform module์„ ์ด์šฉํ•œ Resources ๊ด€๋ฆฌ

Terraform ์•Œ๊ณ  ์‚ฌ์šฉํ•˜์ž

Overview

Terraform Code๋ฅผ Moduleํ™” ํ•˜์—ฌ ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ์ „์ฒด ์ฝ”๋“œ๋ฅผ ๋ชจ๋ฅด๋”๋ผ๋„, ๋ณ€์ˆ˜๊ฐ’ ๋ณ€๊ฒฝ์„ ํ†ตํ•ด ์›ํ•˜๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ…Œ๋ผํผ์œผ๋กœ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ–ฅํ›„์— Moduleํ™”์— ์ถ”๊ฐ€๋กœ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค ์ƒ์„ฑ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š”๋ฐ ๊ธฐ๋ฐ˜์ด ๋ ์ˆ˜์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๋ชฉํ‘œ

HOL์„ ํ†ตํ•ด์„œ Module์˜ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ˆ˜์ •ํ•˜์—ฌ ์›ํ•˜๋Š” ์•„ํ‚คํ…์ณ๋ฅผ ๋ฐฐํฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์ „ ๊ตฌ์„ฑ

Terraform์„ ์„ค์น˜๊ฐ€ ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

Terraform ์„ค์น˜๋Š” ์—ฌ๊ธฐ๋ฅผ ๋”ฐ๋ผ์„œ ์„ค์น˜ํ•ด ์ฃผ์„ธ์š”

STEP 0. ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ๋ฌธ

VPC, vSwitch, ECS, Security Group, RDS, SLB์— ๋Œ€ํ•œ Terraform Code๋ฅผ ์‚ฌ์šฉ์„ ํ•ฉ๋‹ˆ๋‹ค.

Terraform์—์„œ ์ œ๊ณตํ•˜๋Š” Alibaba Cloud Provider๋Š” ์ฒจ๋ถ€ํ•œ ๋งํฌ๋ฅผ ํ†ตํ•ด์„œ ๋” ์ž์„ธํ•˜๊ฒŒ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

https://registry.terraform.io/providers/aliyun/alicloud/latest/docs

์ถ”๊ฐ€๋กœ Terraform HCL ์–ธ์–ด์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ์„ ํ•ฉ๋‹ˆ๋‹ค.

for, count, Local, lookup ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰ ๋ฐ ๋ณ€์ˆ˜ ์ „๋‹ฌ ์šฉ๋„๋ฅผ ์œ„ํ•ด์„œ ์‚ฌ์šฉ์„ ํ•ฉ๋‹ˆ๋‹ค.

STEP 1. Module ์ด๋ž€?

Terraform์˜ ๊ฒฝ์šฐ ํด๋” ๋‹จ์œ„๊ฐ€ ํ•˜๋‚˜์˜ Module๋กœ ์ธ์‹์„ ํ•˜๊ณ  ๊ด€๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์„œ๋น„์Šค ๋ณ„๋กœ ํ•˜๋‚˜์˜ ํด๋”๋กœ ์ƒ์„ฑ์„ ํ•˜๊ณ  Code ์ €์žฅ์„ ํ•  ์ˆ˜๋Š” ์žˆ์œผ๋‚˜, ์ถ”ํ›„์— ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ๋ฐ ๊ด€๋ฆฌ์— ์–ด๋ ค์›€์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ํด๋”๋ฅผ ๋‚˜๋ˆ„์–ด ๋†จ์Šต๋‹ˆ๋‹ค.

- 01.code : ๋ฉ”์ธ ํด๋”
  ใ„ด main_code.tf : main terraform ํŒŒ์ผ
  ใ„ด config.tf : terraform ์ ‘์† ๊ณ„์ • ์ •๋ณด ํŒŒ์ผ(์‹ค์‚ฌ์šฉ์—์„  ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”์ฒœ)
  ใ„ด output.tf : terraform output ํŒŒ์ผ

- 02.test_code : ํ…Œ์ŠคํŠธ์šฉ ํด๋”
  ใ„ด main_code.tf : ์ƒ์„ฑ ํ…Œ์ŠคํŠธ์šฉ ๋ชจ๋“  ๋ณ€์ˆ˜ ๊ธฐ์ž…๋œ tf ํŒŒ์ผ (ํ…Œ์ŠคํŠธ์šฉ)
  ใ„ด config.tf : terraform ์ ‘์† ๊ณ„์ • ์ •๋ณด ํŒŒ์ผ(์‹ค์‚ฌ์šฉ์—์„  ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”์ฒœ)
  ใ„ด output.tf : terraform output ํŒŒ์ผ

- modules : terraform code ์ €์žฅ ํด๋”
  ใ„ด ecs : ecs ์ƒ์„ฑ code ์ €์žฅ ํด๋”
  ใ„ด rds : rds ์ƒ์„ฑ code ์ €์žฅ ํด๋”
  ใ„ด sg : sg ์ƒ์„ฑ code ์ €์žฅ ํด๋”
  ใ„ด slb : slb ์ƒ์„ฑ code ์ €์žฅ ํด๋”
  ใ„ด vpc : vpc ์ƒ์„ฑ code ์ €์žฅ ํด๋”

dev ํด๋”๋Š” ์›ํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. modules ํด๋”๋Š” module์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ ์„œ๋น„์Šค ์ƒ์„ฑ ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

STEP 1.0 Local ๋ณ€์ˆ˜ ๋“ฑ๋ก

Terraform code์—์„œ ์ œ๊ณตํ•˜๋Š” Local ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ํ•œ๋ฒˆ๋งŒ ์ •์˜๋ฅผ ํ•˜์—ฌ ์‚ฌ์šฉ์„ ํ•  ์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊ณผ ๊ฐ™์ด ๋ชจ๋“ˆํ™”๋ฅผ ํ•œ code์—์„œ๋Š” ๋” ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ž…๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ์„ ํ•  ๋•Œ, ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ์„ ํ•˜๊ฒŒ๋˜๋Š” region, zone, subnet์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ locals๋กœ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

locals {
  region = "Your Region"
  azs    = ["Your Zone A", "Your Zone B"]
  public_subnets   = ["Your public subnet A","Your public subnet B"]
  private_subnets  = ["Your Private subnet A","Your Private subnet B"]
  database_subnets = ["Your DB subnet A","Your DB subnet B"]
}

STEP 1.1 VPC ์ƒ์„ฑ

์ธํ”„๋ผ์˜ ๊ธฐ๋ณธ์ด ๋˜๋Š” VPC ์ƒ์„ฑ์„ ํ•˜๋Š” ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.

  • ๋ชจ๋“ˆ ๋ณ€์ˆ˜ Code

    • vpc ์ƒ์„ฑ ํŒŒ์ผ์„ ์œ„ํ•œ Module ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
    module "dev_vpc" {
      # source๋Š” variables.tf, main.tf, outputs.tf ํŒŒ์ผ์ด ์œ„์น˜ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.
      source = "../modules/vpc"
    
      # VPC์ด๋ฆ„์„ ๋„ฃ์–ด์ค€๋‹ค. ์ด ๊ฐ’์€ VPC module์ด ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋“  ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์˜ prefix๊ฐ€ ๋œ๋‹ค
      name = "Your VPC Name"
    
      # VPC์˜ CIDR block์„ ์ •์˜ํ•œ๋‹ค. ์œ„์— ์ •์˜ํ•œ subnet๋ฅผ ํฌํ•จํ•˜๋Š” ๋Œ€์—ญ๋Œ€๋ฅผ ๊ธฐ์ž…ํ•ฉ๋‹ˆ๋‹ค.
      cidr = "Your VPC CIDR"
    
      # VPC๊ฐ€ ์‚ฌ์šฉํ•  AZ๋ฅผ ์ •์˜ํ•œ๋‹ค.
      azs               = local.azs
      # VPC์˜ Public Subnet CIDR block์„ ์ •์˜ํ•œ๋‹ค. (Public ๋ง๊ณ  ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ๋„ ๊ฐ€๋Šฅ.)
      public_subnets    = local.public_subnets
    
      # VPC์˜ Private Subnet CIDR block์„ ์ •์˜ํ•œ๋‹ค.
      private_subnets   = local.private_subnets
    
      # VPC์˜ Private DB Subnet CIDR block์„ ์ •์˜ํ•œ๋‹ค. (RDS๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ด ๋ผ์ธ์€ ํ•„์š”์—†๋‹ค.)
      database_subnets  = local.database_subnets
    
      # VPC module์ด ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋“  ๋ฆฌ์†Œ์Šค์— ๊ธฐ๋ณธ์œผ๋กœ ์ž…๋ ฅ๋  Tag๋ฅผ ์ •์˜ํ•œ๋‹ค.
      tags = {
        "TerraformManaged" = "true"
      }
    }
    
    • source : ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋Š” ํด๋”์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •
    • name : vpc, vswitch์˜ ์ด๋ฆ„์„ ๊ธฐ์ž…
    • cidr : ์›ํ•˜๋Š” vpc์˜ cidr ๊ธฐ์ž…
    • azs : ์›ํ•˜๋Š” zone์„ ["",""] ํ˜•ํƒœ๋กœ ๊ธฐ์ž… (locals ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉ)
    • public_subnets : ์›ํ•˜๋Š” public subnet์„ ["",""] ํ˜•ํƒœ๋กœ ๊ธฐ์ž… (locals ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉ)
    • private_subnets : ์›ํ•˜๋Š” private subnet์„ ["",""] ํ˜•ํƒœ๋กœ ๊ธฐ์ž… (locals ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉ)
    • database_subnets : ์›ํ•˜๋Š” database subnet์„ ["",""] ํ˜•ํƒœ๋กœ ๊ธฐ์ž… (locals ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉ)
    • tags : tag๋ฅผ ์ด์šฉํ•ด์„œ ๊ด€๋ฆฌํ•  ๊ฒฝ์šฐ ๊ธฐ์ž… "key" = "value" ํ˜•ํƒœ๋กœ ๊ธฐ์ž…
  • ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ชจ๋“ˆํ™” ์ฝ”๋“œ

VPC ์ƒ์„ฑ code ์ฐธ๊ณ  : modules/vpc ํด๋” ์ฐธ๊ณ 

STEP 1.2 ๋ณด์•ˆ๊ทธ๋ฃน ์ƒ์„ฑ

ECS์„ ์ƒ์„ฑ ์ „์— ECS๊ฐ€ ์‚ฌ์šฉํ•ด์•ผ๋˜๋Š” ๋ณด์•ˆ๊ทธ๋ฃน์„ ์ƒ์„ฑ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ฐ€์ด๋“œ์—์„œ๋Š” public์šฉ, was์šฉ์œผ๋กœ 2๊ฐœ๋ฅผ ๋™์ผํ•œ zone A์— ์ƒ์„ฑํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

  1. dev-public-sg ๋ณด์•ˆ์ •์ฑ… ๋‚ด์šฉ
  • 80,443 port : 0.0.0.0/0
  • 21, 22 port : "Your Public IP"
  • ICMP : 172.16.0.0/16 (VPC Network)
  1. dev-was-sg ๋ณด์•ˆ์ •์ฑ… ๋‚ด์šฉ
  • 80 port : 172.16.0.0/24, 172.16.100.0/24 (public subnet)

  • 21, 22 port : 172.16.0.0/24, 172.16.100.0/24 (public subnet)

  • ICMP : 172.16.0.0/16 (VPC Network)

  • ๋ชจ๋“ˆ ๋ณ€์ˆ˜ Code

    • ๋ณด์•ˆ๊ทธ๋ฃน ์ƒ์„ฑ์— ํ•„์š”ํ•œ ๋ณ€์ˆ˜ ๊ฐ’๋“ค์„ ๊ธฐ์ž…ํ•ฉ๋‹ˆ๋‹ค.

      1. ๋ณด์•ˆ๊ทธ๋ฃน ์ •์ฑ…์— ํ•„์š”ํ•œ ๋‚ด์šฉ์ด ๋ชจ๋‘ ์žˆ์„ ๊ฒฝ์šฐ : ์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ

      2. ๋ณด์•ˆ๊ทธ๋ฃน ์ •์ฑ…์— port๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ : ๋‘๋ฒˆ์งธ ์ฝ”๋“œ

      ingress_ports ๋ณ€์ˆ˜์— ์ •์˜ํ•œ port๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

      1. ๋ณด์•ˆ๊ทธ๋ฃน ์ •์ฑ…์— cidr์„ ์ง€์ •ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ : ์„ธ๋ฒˆ์งธ ์ฝ”๋“œ

      vpc_cidr ๋ณ€์ˆ˜์— ์ •์˜ํ•œ cidr์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

    module "public_sg" {
    
      source = "../modules/sg"
    
      // ๋์— -sg ๊ฐ€ ์ž๋™์œผ๋กœ ๋ถ™์Šต๋‹ˆ๋‹ค.
      sg_name = "Your public SG Name" 
    
      vpc_id = module.dev_vpc.vpc_id 
      vpc_cidr = [module.dev_vpc.vpc_cidr_block]
    
    
      ingress_ports = [80,443] # Port ์ •์˜๊ฐ€ ์—†์„ ๊ฒฝ์šฐ, [22,3389]๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ• ๋‹น
    
      # 3๊ฐœ์˜ ํ•ญ๋ชฉ ์ค‘ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐฉ์‹ ์ด์™ธ๋Š” ๊ผญ ์‚ญ์ œ๋ฅผ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
      ingress_with_cidr_blocks_and_ports = [
        {
          # ๋ชจ๋“  ๋‚ด์šฉ (port, protocol, priority,cidr)์ด ์žˆ์„๊ฒฝ์šฐ, ํ•ด๋‹น ๋‚ด์šฉ์œผ๋กœ ํ• ๋‹น
          ports       = "21,22"
          protocol    = "tcp"
          priority    = 1
          cidr_blocks = "Your IP/32"
        },
        {
          # port์˜ ์ •์˜๊ฐ€ ์—†์„ ๊ฒฝ์šฐ, ingress_ports์—์„œ ์ •์˜ํ•œ port๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ• ๋‹น
          # protocole ์ •์˜๊ฐ€ ์—†์„ ๊ฒฝ์šฐ, ๊ธฐ๋ณธ๊ฐ’์ธ TCP๋กœ ํ• ๋‹น
          protocol    = "tcp"
          description = "ingress for tcp"
          cidr_blocks = "0.0.0.0/0"
        },
        {
          # cidr์ด ์ •์˜๊ฐ€ ์—†์„ ๊ฒฝ์šฐ vpc_cidr์—์„œ ์ •์˜ํ•œ cidr์„ ๊ธฐ์ค€์œผ๋กœ ํ• ๋‹น
          protocol    = "icmp"
          priority    = 2
          description = "ingress for icmp"
        }
      ]
    }
    
    module "was_sg" {
    
      source = "../modules/sg"
    
      // ๋์— -sg ๊ฐ€ ์ž๋™์œผ๋กœ ๋ถ™์Šต๋‹ˆ๋‹ค.
      sg_name = "Your WAS SG Name"
    
      vpc_id = module.dev_vpc.vpc_id
      vpc_cidr = [module.dev_vpc.vpc_cidr_block]
    
    
      ingress_ports = [80] # Port ์ •์˜๊ฐ€ ์—†์„ ๊ฒฝ์šฐ, [22,3389]๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ• ๋‹น
    
      # 3๊ฐœ์˜ ํ•ญ๋ชฉ ์ค‘ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐฉ์‹ ์ด์™ธ๋Š” ๊ผญ ์‚ญ์ œ๋ฅผ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
      ingress_with_cidr_blocks_and_ports = [
        {
          # ๋ชจ๋“  ๋‚ด์šฉ (port, protocol, priority,cidr)์ด ์žˆ์„๊ฒฝ์šฐ, ํ•ด๋‹น ๋‚ด์šฉ์œผ๋กœ ํ• ๋‹น
          ports       = "21,22"
          protocol    = "tcp"
          priority    = 1
          cidr_blocks = module.dev_vpc.public_cidr
        },
        {
          # port์˜ ์ •์˜๊ฐ€ ์—†์„ ๊ฒฝ์šฐ, ingress_ports์—์„œ ์ •์˜ํ•œ port๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ• ๋‹น
          # protocole ์ •์˜๊ฐ€ ์—†์„ ๊ฒฝ์šฐ, ๊ธฐ๋ณธ๊ฐ’์ธ TCP๋กœ ํ• ๋‹น
          protocol    = "tcp"
          description = "ingress for tcp"
          cidr_blocks = module.dev_vpc.public_cidr #vpc ์ƒ์„ฑํ• ๋•Œ public cidr์„ ์›ํ•  ๊ฒฝ์šฐ ๋ชจ๋“ˆ๋กœ ์ž‘์—… ๊ฐ€๋Šฅ
        },
        {
          # cidr์ด ์ •์˜๊ฐ€ ์—†์„ ๊ฒฝ์šฐ vpc_cidr์—์„œ ์ •์˜ํ•œ cidr์„ ๊ธฐ์ค€์œผ๋กœ ํ• ๋‹น
          protocol    = "icmp"
          priority    = 2
          description = "ingress for icmp"
        }
      ]
    }
    
    • sg_name : ๋ณด์•ˆ๊ทธ๋ฃน์˜ ์ด๋ฆ„ ๊ธฐ์ž…
    • vpc_id : vpc ์ƒ์„ฑ ์‹œ ์ƒ๊ธฐ๋Š” id๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ€์ ธ์˜ด (vpc ๋ชจ๋“ˆ์—์„œ ๋ฏธ๋ฆฌ output์œผ๋กœ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ด)
    • vpc_cidr : vpc ์ƒ์„ฑ ํ›„ cidr ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ€์ ธ์˜ด (vpc ๋ชจ๋“ˆ์—์„œ ๋ฏธ๋ฆฌ output์œผ๋กœ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ด)
    • ingress_ports : ์›ํ•˜๋Š” port ๋ฒˆํ˜ธ๋ฅผ [21,22] ์ฒ˜๋Ÿผ ๊ธฐ์ž… ์•„๋ž˜ ๋ณ€์ˆ˜๊ฐ’์—์„œ port์˜ ์ •์˜๊ฐ€ ์—†์„ ๊ฒฝ์šฐ, ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์ฑ… ์„ค์ •
    • ingress_with_cidr_blocks_and_ports : ๋ณด์•ˆ๊ทธ๋ฃน์— ์ ์šฉํ•  ๋‚ด์šฉ์„ ๊ธฐ์ž…
      • ports : ์›ํ•˜๋Š” port๋ฅผ ๊ธฐ์ž…. ๋‹จ, 2๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ "21","22" ํ˜•ํƒœ๋กœ ๊ธฐ์ž… (ํ•„์ˆ˜ o) ๋‹จ, ๋ฏธ๊ธฐ์ž…์‹œ ingress_ports์— ๊ธฐ์ž…ํ•œ port๋กœ ๋Œ€์ฒด
      • protocol : TCP, UDP๋ฅผ ์„ ํƒ ํ›„ ๊ธฐ์ž…. ๋‹จ, ๋ฏธ ๊ธฐ์ž…์‹œ ๊ธฐ๋ณธ๊ฐ’์ธ TCP๋กœ ์„ค์ • (ํ•„์ˆ˜ x)
      • priority : ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ธฐ์ž…. ๊ธฐ๋ณธ๊ฐ’ "1" (ํ•„์ˆ˜ x)
      • cidr_blocks : ํ—ˆ์šฉ์„ ํ•˜๊ณ ์ž ํ•˜๋Š” cidr ๊ธฐ์ž…. 2๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ "1.1.1.1","2.2.2.2" ํ˜•ํƒœ๋กœ ๊ธฐ์ž… (ํ•„์ˆ˜ o) ๋‹จ, ๋ฏธ๊ธฐ์ž…์‹œ vpc_cidr ๊ฐ’์œผ๋กœ ๋Œ€์ฒด. ์™ธ๋ถ€ public IP ๊ฒฝ์šฐ ํ•„์ˆ˜๋กœ ๊ธฐ์ž…
      • description : ์„ค๋ช…์„ ๊ธฐ์ž…

๋ณด์•ˆ๊ทธ๋ฃน ์ƒ์„ฑ code ์ฐธ๊ณ  : modules/sg ํด๋” ์ฐธ๊ณ 

STEP 1.3 ECS ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

ECS ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ฐ€์ด๋“œ์—์„œ๋Š” web์šฉ ECS 2EA, was์šฉ ECS 2EA๋ฅผ ์ƒ์„ฑ์„ ํ•ฉ๋‹ˆ๋‹ค. web์šฉ์˜ ๊ฒฝ์šฐ EIP๋ฅผ ์—ฐ๊ฒฐ์„ ํ•ฉ๋‹ˆ๋‹ค.

  • Public : 2 EA (๊ณต์ธ๋ง) + EIP

  • WAS : 2 EA (์‚ฌ์„ค๋ง)

  • ๋ชจ๋“ˆ ๋ณ€์ˆ˜ Code

    • ecs Module์— ecs ์šฉ๋„์— ๋งž๊ฒŒ ๊ธฐ์ž… ๋ฐ ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅ์„ ํ•ฉ๋‹ˆ๋‹ค. ECS ์ƒ์„ฑ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์„ฑ์„ ํ•˜๋ฏ€๋กœ ์šฉ๋„ ๋ณ„๋กœ ๊ฐ๊ฐ ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉ์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
    module "web_instances" {
    
      source = "../modules/ecs"
    
       # ๊ธฐ๋ณธ type ์„ ํƒ์šฉ Region ์„ ํƒ
        azs  = local.azs[0]
       # ECS Count ์„ ํƒ
        ecs_count = "2"
    
       # ECS Name ์ž…๋ ฅ - name-01, name-02 ์ˆœ์œผ๋กœ ๋„ค์ด๋ฐ์ด ๋ฉ๋‹ˆ๋‹ค.
        ecs_name = "Your Web Server Name"
    
       # PW ์ž…๋ ฅ
        ecs_password = "Your Password"
    
       # ECS Image ์„ ํƒ (^centos_7์˜ ๊ฒฝ์šฐ Centos 7 ๋ฒ„์ „์ค‘ ์ตœ์Šจ์œผ๋กœ ์ „๋‹ฌ) 
        ecs_image = "Your OS Image"
    
       # ECS type
        ecs_type = "Your ECS Type"
    
       # EIP ์ˆ˜๋Ÿ‰ ์„ ํƒ (ํ•„์š”ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ 0 ์ด๋‚˜ "" ์ž…๋ ฅ)
        eip_count = "2"
    
       # System disk size ์„ ํƒ (๊ธฐ๋ณธ๊ฐ’ window - 40GB, linux - 20GB)
        disk_size = "40"
    
       # vswitch ์ •๋ณด (vpc ์ƒ์„ฑ ์‹œ map์—์„œ ๋“ฑ๋กํ•œ ๋ฆฌ์ „ ์ˆœ์œผ๋กœ 0,1)
        ecs_vswitch_id = lookup(module.dev_vpc.public_info_map, local.azs[0])
       # SG ์ •๋ณด
        ecs_sg_id = module.public_sg.sg_id
    }
    
    module "was_instances" {
    
      source = "../modules/ecs"
    
     # ๊ธฐ๋ณธ type ์„ ํƒ์šฉ Region ์„ ํƒ
      azs  = local.azs[0]
    
     # ECS Count ์„ ํƒ
      ecs_count = "2"
    
     # ECS Name ์ž…๋ ฅ - name-01, name-02 ์ˆœ์œผ๋กœ ๋„ค์ด๋ฐ์ด ๋ฉ๋‹ˆ๋‹ค.
      ecs_name = "Your Was Server Name"
    
     # PW ์ž…๋ ฅ
      ecs_password = "Your Password"
    
     # ECS Image ์„ ํƒ (^centos_7์˜ ๊ฒฝ์šฐ Centos 7 ๋ฒ„์ „์ค‘ ์ตœ์Šจ์œผ๋กœ ์ „๋‹ฌ)
      ecs_image = "Your OS Image"
    
     # ECS type (์˜ˆ : ecs.n4.large)
      ecs_type = "Your ECS Type"
    
     # EIP ์ˆ˜๋Ÿ‰ ์„ ํƒ (ํ•„์š”ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์‚ญ์ œ)
     # eip_count = ""
    
     # System disk size ์„ ํƒ (๊ธฐ๋ณธ๊ฐ’ window - 40GB, linux - 20GB)
      disk_size = "40"
    
     # vswitch ์ •๋ณด (vpc ์ƒ์„ฑ ์‹œ map์—์„œ ๋“ฑ๋กํ•œ ๋ฆฌ์ „ ์ˆœ์œผ๋กœ 0,1)
      ecs_vswitch_id = lookup(module.dev_vpc.public_info_map, local.azs[0])
    
     # SG ์ •๋ณด
      ecs_sg_id = module.was_sg.sg_id
    }
    
    • azs : local์— ๊ธฐ์ž…ํ•œ ๋‚ด์šฉ ์ค‘ ๋ฆฌ์ „์„ ์„ ํƒ. ์ฒซ๋ฒˆ์งธ ๋ผ๋ฉด [0], ๋‘๋ฒˆ์งธ ๊ฐ’์ด๋ฉด [1] ์ˆœ์œผ๋กœ ๊ธฐ์ž…
    • ecs_count : ๋™์ผํ•œ ์šฉ๋„์˜ ecs์˜ ์ˆ˜๋Ÿ‰์„ ์„ ํƒ
    • ecs_name : ecs์˜ ์ด๋ฆ„์„ ๊ธฐ์ž…. ์ˆ˜๋Ÿ‰์ด 2๊ฐœ์ผ ๊ฒฝ์šฐ "name-01", "name-02" ์ˆœ์œผ๋กœ ์ˆœ๋ฒˆ์ด ๊ธฐ์ž…
    • ecs_password : ecs์˜ ์•”ํ˜ธ ๊ธฐ์ž…
    • ecs_image : ecs์˜ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ์ž…. ์ด๋ฏธ์ง€๋ฅผ ์•ˆ๋‹ค๋ฉด ์ง์ ‘ ๊ธฐ์ž…ํ•ด๋„ ๋ฌด๊ด€
    • ecs_type : ecs์˜ ์ŠคํŽ™์„ ๊ธฐ์ž…. ๋ฌธ์„œ์—์„œ ์›ํ•˜๋Š” ํƒ€์ž…์„ ์„ ํƒ ํ›„ ๊ธฐ์ž…
    • eip_count : ecs์— eip๋ฅผ ์—ฐ๋™ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ๊ธฐ์ž…. ๋‹จ ํ•„์š” ์—†๋‹ค๋ฉด "" ์œผ๋กœ ๊ธฐ์ž…
    • disk_size : system disk๊ฐ€ ์‚ฌ์šฉํ•  ์šฉ๋Ÿ‰์„ ๊ธฐ์ž…. ์ถ”ํ›„์— ๋ฐ์ดํƒ€ ๋””์Šคํฌ๋„ ์ถ”๊ฐ€ ์˜ˆ์ •
    • ecs_vswitch_id : ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” vswitch์˜ ๋ฆฌ์ „์„ ๋ณ€๊ฒฝ. local.azs[0] or "cn-shanghai-a"
    • ecs_sg_id : ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•œ ์šฉ๋„์˜ ๋ณด์•ˆ๊ทธ๋ฃน์„ ์„ ํƒ. was_sg - ์ด๋ฆ„์„ ๋ณด์•ˆ๊ทธ๋ฃน ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝ

ECS ์ƒ์„ฑ code ์ฐธ๊ณ  : modules/ecs ํด๋” ์ฐธ๊ณ 

STEP 1.4 SLB ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

SLB ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ์„ ํ•ฉ๋‹ˆ๋‹ค.

  • Product ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ SLB ์ƒ์„ฑ๊ณผ Internal SLB ์ƒ์„ฑ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ ํ›„ SLB์˜ Listener๋ฅผ ๊ตฌ์„ฑ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜๋„ ๋“ฑ๋ก์„ ํ•˜๋ฉด ๋ชจ๋‘ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ๋ชจ๋“ˆ ๋ณ€์ˆ˜ Code

    module "dev_public_slb" {
    
      source  = "../modules/slb"
    
      #####
      #  SLB instance
      #####
      name = "Your public slb Name"
      internet_charge_type = "PayByTraffic" # ๊ธฐ๋ณธ๊ฐ’ PaybyTraffic
      address_type         = "internet" # [internet, intranet] ์ค‘ ์„ ํƒ
      vswitch_id           = lookup(module.dev_vpc.public_info_map, "cn-shanghai-a") # internet์ผ ๊ฒฝ์šฐ ๋ฌด์‹œ 
      specification        = "slb.s1.small" # ๊ธฐ๋ณธ๊ฐ’:"slb.s1.small" ๋‚˜๋จธ์ง€ ์„ ํƒ "slb.s2.small", "slb.s2.medium", "slb.s3.small", "slb.s3.medium", "slb.s3.large" and "slb.s4.large"  
      master_zone_id       = local.azs[0]
      slave_zone_id        = local.azs[1]
    
      ########################
      #attach virtual servers#
      ########################
      servers_of_virtual_server_group = [
        {
          # ์—ฌ๋Ÿฌ๋Œ€ ๋„ฃ์„ ๊ฒฝ์šฐ, "i-asd,i-asd"
          server_ids = lookup(module.web_instances, "ecs_ids")
          port       = "80"
          type       = "ecs" # ๊ธฐ๋ณธ๊ฐ’ ecs, ์•ˆ์ ์–ด๋„ ๋ฌด๊ด€
          weight     = 100 # ๊ธฐ๋ณธ๊ฐ’ 100, ์•ˆ์ ์–ด๋„ ๋ฌด๊ด€
        }
    ]
    
    
    ##########
    # Liteners ์›ํ•˜๋Š”๊ฑธ ์ผ์ผ์ด ๊ธฐ์ž…์ด ํ•„์ˆ˜
    ##########
    
      listeners = [
        {
          backend_port      = "80"
          frontend_port     = "80"
    
          # protocol์„ ์›ํ•˜๋Š” ๊ฑธ๋กœ ๋ณ€๊ฒฝ L4 - TCP UDP, L7 - HTTP HTTPS
          protocol          = "http"
          bandwidth         = "-1"
          scheduler         = "wrr"
          healthy_threshold = "4"
          gzip              = "false"
          health_check_type = "tcp"
        }
      ]
    
      // health_check will apply to all of listeners if health checking is not set in the listeners
      health_check = {
        health_check              = "on"
        health_check_type         = "tcp"
        healthy_threshold         = "3"
        unhealthy_threshold       = "2"
        health_check_timeout      = "5"
        health_check_interval     = "2"
        health_check_connect_port = "80"
        health_check_uri          = "/"
        health_check_http_code    = "http_2xx"
      }
    
      // advanced_setting will apply to all of listeners if some fields are not set in the listeners
      advanced_setting = {
    
        # TCP์˜ ๊ฒฝ์šฐ sticky session setting, "on", "server"
        #sticky_session      = "on"
        #sticky_session_type = "server"
    
        # http์˜ ๊ฒฝ์šฐ sticky session setting, "on", "insert"
        #sticky_session      = "on"
        #sticky_session_type = "insert"
        #cookie_timeout      = "86400"
    
        gzip                = "false"
        #retrive_slb_ip      = "true"
        #retrive_slb_id      = "false"
        #retrive_slb_proto   = "true"
        persistence_timeout = "5"
      }
    
      // x_forwarded_for will apply to all of listeners if it is not set in the listeners
      x_forwarded_for = {
        retrive_slb_ip    = "true"
        retrive_slb_id    = "false"
        retrive_slb_proto = "true"
      }
    
      ssl_certificates = {
        #tls_cipher_policy = "tls_cipher_policy_1_0"
      }
    }
    
    module "dev_internal_slb" {
    
      source  = "../modules/slb"
    
      #####
      #  SLB instance
      #####
      name = "Your internal slb Name"
      internet_charge_type = "PayByTraffic" # ๊ธฐ๋ณธ๊ฐ’ PaybyTraffic
      address_type         = "intranet" # [internet, intranet] ์ค‘ ์„ ํƒ
      vswitch_id           = lookup(module.dev_vpc.public_info_map, "cn-shanghai-a") # internet์ผ ๊ฒฝ์šฐ ๋ฌด์‹œ 
      specification        = "slb.s1.small" # ๊ธฐ๋ณธ๊ฐ’:"slb.s1.small" ๋‚˜๋จธ์ง€ ์„ ํƒ "slb.s2.small", "slb.s2.medium", "slb.s3.small", "slb.s3.medium", "slb.s3.large" and "slb.s4.large"  
      master_zone_id       = local.azs[0]
      slave_zone_id        = local.azs[1]
    
      ########################
      #attach virtual servers#
      ########################
      servers_of_virtual_server_group = [
        {
          # ์—ฌ๋Ÿฌ๋Œ€ ๋„ฃ์„ ๊ฒฝ์šฐ, "i-asd,i-asd"
          server_ids = lookup(module.was_instances, "ecs_ids")
          port       = "1234"
          type       = "ecs" # ๊ธฐ๋ณธ๊ฐ’ ecs, ์•ˆ์ ์–ด๋„ ๋ฌด๊ด€
          weight     = 100 # ๊ธฐ๋ณธ๊ฐ’ 100, ์•ˆ์ ์–ด๋„ ๋ฌด๊ด€
        }
      ]
    
    
      ##########
      # Liteners ์›ํ•˜๋Š”๊ฑธ ์ผ์ผ์ด ๊ธฐ์ž…์ด ํ•„์ˆ˜
      ##########
    
      listeners = [
        {
          backend_port      = "1234"
          frontend_port     = "1234"
    
          # protocol์„ ์›ํ•˜๋Š” ๊ฑธ๋กœ ๋ณ€๊ฒฝ L4 - TCP UDP, L7 - HTTP HTTPS
          protocol          = "tcp"
          scheduler         = "wrr"
          healthy_threshold = "4"
          gzip              = "false"
          health_check_type = "tcp"
        }
      ]
    
      // health_check will apply to all of listeners if health checking is not set in the listeners
      health_check = {
        health_check              = "on"
        health_check_type         = "tcp"
        healthy_threshold         = "3"
        unhealthy_threshold       = "2"
        health_check_timeout      = "5"
        health_check_interval     = "2"
        health_check_connect_port = "80"
        health_check_uri          = "/"
        health_check_http_code    = "http_2xx"
      }
    
      // advanced_setting will apply to all of listeners if some fields are not set in the listeners
      advanced_setting = {
    
        # TCP์˜ ๊ฒฝ์šฐ sticky session setting, "on", "server"
        #sticky_session      = "on"
        #sticky_session_type = "server"
    
        # http์˜ ๊ฒฝ์šฐ sticky session setting, "on", "insert"
        #sticky_session      = "on"
        #sticky_session_type = "insert"
        #cookie_timeout      = "86400"
    
        gzip                = "false"
        #retrive_slb_ip      = "true"
        #retrive_slb_id      = "false"
        #retrive_slb_proto   = "true"
        persistence_timeout = "5"
      }
    
      // x_forwarded_for will apply to all of listeners if it is not set in the listeners
      x_forwarded_for = {
        retrive_slb_ip    = "true"
        retrive_slb_id    = "false"
        retrive_slb_proto = "true"
      }
    
      ssl_certificates = {
        #tls_cipher_policy = "tls_cipher_policy_1_0"
      }
    }
    
    • name : slb์— ์‚ฌ์šฉํ•  ์ด๋ฆ„ ๊ธฐ์ž…
    • internet_charge_type : ๊ธฐ๋ณธ๊ฐ’์ธ pay-by-traffic, ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ๋งŒ ๋ณ€๊ฒฝ
    • address_type : ์™ธ๋ถ€, ๋‚ด๋ถ€์šฉ ์ค‘ ์„ ํƒ
    • vswitch_id : ๋‚ด๋ถ€์šฉ์ผ๋•Œ๋งŒ ๊ธฐ์ž…
    • specification : slb์˜ ์ŠคํŽ™์„ ๊ธฐ์ž…
    • master_zone_id : ๋ฉ”์ธ slb zone์„ ๊ธฐ์ž…
    • slave_zone_id : ์Šคํƒ ๋ฐ”์ด slb zone์„ ๊ธฐ์ž…
    • listeners : slb์˜ ๋ฆฌ์Šค๋„ˆ ์ƒ์„ฑ ๋ณ€์ˆ˜ ๊ธฐ์ž…
      • backend_port : ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ๋  port ๊ธฐ์ž…
      • frontend_port : ์™ธ๋ถ€์—์„œ ์ ‘์†ํ•  port ๊ธฐ์ž…
      • protocol : tcp, ump, http, https ์ค‘ ์„ ํƒ
      • scheduler : ์„ธ์…˜ ๋ถ„๊ธฐ์— ๋Œ€ํ•œ ์˜ต์…˜ ์„ ํƒ "wrr"์˜ ๊ฒฝ์šฐ round-robin
      • healthy_threshold : ์ƒํƒœ ํ™•์ธ์— ๋Œ€ํ•œ ๋นˆ๋„ ๊ธฐ์ž…
      • gzip : gzip ํ™œ์„ฑํ™”์— ๋Œ€ํ•œ ์˜ต์…˜ ๊ธฐ์ž…
      • health_check_type : ์ƒํƒœ ํ™•์ธ ์‹œ ์ฒดํฌํ•  ํƒ€์ž… ์„ ํƒ. tcp - tcp, http - http ๋กœ ์„ค์ • (๋‚ด์šฉํ•˜๋ฒˆ๋” ํ™•์ธ)
    • health_check : ํ—ฌ์Šค์ฒดํฌ ๋ณ€์ˆ˜ ๊ธฐ์ž…
      • health_check : ์‚ฌ์šฉ์—ฌ๋ถ€ ๊ธฐ์ž…. ์‚ฌ์šฉ ํ•˜์ง€์•Š์„ ๊ฒฝ์šฐ "false"
      • health_check_type : tcp or http ์ค‘ ๊ธฐ์ž…
      • healthy_threshold : ์ •์ƒ์—ฌ๋ถ€์— ๋Œ€ํ•œ ํšŸ์ˆ˜ ๊ธฐ์ž…
      • unhealthy_threshold : ๋น„์ •์žฅ์—ฌ๋ถ€์— ๋Œ€ํ•œ ํšŸ์ˆ˜ ๊ธฐ์ž…
      • health_check_timeout : ํ—ฌ์Šค์ฒดํฌ ํƒ€์ž„์•„์›ƒ ์‹œ๊ฐ„ ๊ธฐ์ž…
      • health_check_interval : ํ—ฌ์Šค์ฒดํฌ ์ธํ„ฐ๋ฒŒ ๊ธฐ์ž…
      • health_check_connect_port : ํ—ฌ์Šค์ฒดํฌ์šฉ ํฌํŠธ ๊ธฐ์ž…
      • health_check_uri : ๊ธฐ๋ณธ๊ฐ’ "/" ๋กœ ์„ค์ •. ๋‹จ, ์›ํ•˜๋Š” ํŠน๋ณ„ํ•œ ๊ฒฝ๋กœ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๊ธฐ์ž…
      • health_check_http_code : ํ—ฌ์Šค์ฒดํฌ ํŽ˜์ด์ง€ ์ฝ”๋“œ ๊ธฐ์ž…
    • advanced_setting : ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ณ€์ˆ˜ ๊ธฐ์ž…
      • sticky_session : sticky session ์‚ฌ์šฉ ์—ฌ๋ถ€ ๊ธฐ์ž…
      • sticky_session_type : sticky_session ํƒ€์ž… ๊ธฐ์ž…
      • gzip : gzip ์‚ฌ์šฉ ์—ฌ๋ถ€ ์„ ํƒ
      • persistence_timeout : ๋ช‡์ดˆ๋™์•ˆ ์œ ์ง€๋ฅผ ํ• ์ง€์— ๋Œ€ํ•œ ์„ค์ • ๊ธฐ์ž…
  • x_forwarded_for : x_forwarded_for ๊ธฐ๋Šฅ ์„ค์ • ๋ณ€์ˆ˜ ๊ธฐ์ž…

    • retrive_slb_ip : x_forwarded_for ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ ์‚ฌ์šฉ์—ฌ๋ถ€ ๊ธฐ์ž…
    • retrive_slb_id : x_forwarded_for ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ ์‚ฌ์šฉ์—ฌ๋ถ€ ๊ธฐ์ž…
    • retrive_slb_proto : x_forwarded_for ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ ์‚ฌ์šฉ์—ฌ๋ถ€ ๊ธฐ์ž…
  • ssl_certificates : ์ธ์ฆ์„œ ์‚ฌ์šฉ๊ด€๋ จ ๋ณ€์ˆ˜ ๊ธฐ์ž…

    • tls_cipher_policy : ๊ธฐ์กด์— ๋“ฑ๋กํ•œ ์ธ์ฆ์„œ ์žˆ์„ ๊ฒฝ์šฐ ์„ ํƒ

SLB ์ƒ์„ฑ code ์ฐธ๊ณ  : modules/slb ํด๋” ์ฐธ๊ณ 

STEP 1.5 RDS ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

ํ•ด๋‹น ๊ฐ€์ด๋“œ์—์„œ๋Š” DB๋ฅผ ๊ด€๋ฆฌํ˜• Database๋กœ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Alibaba Clooud๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ด€๋ฆฌํ˜• Database์ค‘ Mysql์„ ์‚ฌ์šฉ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ํ•ด๋‹น ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ชจ๋“ˆํ™” ์ฝ”๋“œ์—๋Š” ์˜ค์ง MySQL๋งŒ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. RDS ์ƒ์„ฑ ๋ฐ ๋ฐฑ์—… ์ •์ฑ…๊นŒ์ง€ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ฐฑ์—… ์ •์ฑ…์€ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

  • ๋ชจ๋“ˆ ๋ณ€์ˆ˜ Code

    module "mysql" {
      source = "../modules/rds/"
      region = local.region
    
      #################
      # Rds Instance
      #################
      engine               = "MySQL"
      engine_version       = "8.0"
      instance_type        = "rds.mysql.s2.large"
      instance_storage     = 20
      instance_charge_type = "Postpaid"
      instance_name        = "dev-rds"
      security_group_ids   = [] 
      vswitch_id           = lookup(module.dev_vpc.public_info_map, local.azs[0])
      security_ips         = local.private_subnets
      master_zone          = local.azs[0]
      slave_zone           = "auto"
      tags                 = { 
    
        created = "Terraform"
    
      }
    
      #################
      # Rds Backup policy
      #################
      preferred_backup_period     = ["Monday", "Wednesday"]
      # UTC ์˜ํ–ฅ์œผ๋กœ ์„ค์ • ์‹œ๊ฐ„์—์„œ +9:00์ด ์ ์šฉ๋ฐ›์Šต๋‹ˆ๋‹ค. 
      // 00:00Z-01:00Z 01:00Z-02:00Z 02:00Z-03:00Z 03:00Z-04:00Z 04:00Z-05:00Z 05:00Z-06:00Z 06:00Z-07:00Z 07:00Z-08:00Z 08:00Z-09:00Z 09:00Z-10:00Z 10:00Z-11:00Z 11:00Z-12:00Z 12:00Z-13:00Z 13:00Z-14:00Z 14:00Z-15:00Z 15:00Z-16:00Z 16:00Z-17:00Z 17:00Z-18:00Z 18:00Z-19:00Z 19:00Z-20:00Z 20:00Z-21:00Z 21:00Z-22:00Z 22:00Z-23:00Z 23:00Z-24:00Z
    
      preferred_backup_time       = "15:00Z-16:00Z" # ํ•œ๊ตญ์‹œ๊ฐ„ 00:00-01:00 ์ž‘์—…
      backup_retention_period     = 7
      log_backup_retention_period = 7
      #enable_backup_log           = ture
    
      #################
      # Rds public endpoint  Connection
      #################
      #allocate_public_connection = false
      #port                       = 13306 # default 3306
      #connection_prefix          = "dev-rds-demo"
    
      #################
      # Rds Database account
      #################
      type           = "Normal"
      privilege      = "ReadWrite" #default ReadOnly
      account_name   = "megazone"
      password       = "test123!@#"
    
      #################
      # Rds Database
      #################
      databases       = [
        {
          name = "dbuserv1"
          character_set = "utf8"
          description   = "db1"
        },
        {
          name = "dbuserv2"
          character_set = "utf8"
          description   = "db2"
        }
      ]
    }
    
    • engine : DB ์—”์ง„ ๊ธฐ์ž…
    • engine_version : DB ๋ฒ„์ „ ๊ธฐ์ž…
    • instance_type : DB ์ŠคํŽ™ ๊ธฐ์ž…
    • instance_storage : DB ์ €์žฅ์†Œ ์šฉ๋Ÿ‰ ๊ธฐ์ž…
    • instance_charge_type : ๊ฐ€๊ฒฉ ์ •์ฑ…์— ๋Œ€ํ•œ ๋‚ด์šฉ ๊ธฐ์ž…
    • instance_name : DB ์ด๋ฆ„ ๊ธฐ์ž…
    • security_group_ids : DB์—์„œ ์‚ฌ์šฉํ•  ๋ณด์•ˆ๊ทธ๋ฃน ๋“ฑ๋ก (ํ•„์ˆ˜ x)
    • vswitch_id : DB์—์„œ ์‚ฌ์šฉํ•œ vswitch๋ฅผ local.azs[0]๋กœ ์„ ํƒ
    • security_ips : DB์— ์ ‘์†์ด ๊ฐ€๋Šฅํ•œ ๋„คํŠธ์›Œํฌ ์„ค์ •. local."subnet" ์œผ๋กœ ์„ ํƒ
    • master_zone : ๋งˆ์Šคํ„ฐ zone ์„ ํƒ
    • slave_zone : ์Šคํƒ ๋ฐ”์ด zone ์„ ํƒ ์›ํ•˜๋Š” zone์ด ๋”ฐ๋กœ์—†์„ ๊ฒฝ์šฐ, "auto"์‚ฌ์šฉ๊ฐ€๋Šฅ
    • ๋ฐฑ์—… ์—ฌ๋ถ€ ์„ค์ •
      • preferred_backup_period : ๋ฐฑ์—… ๋‚ ์งœ๋ฅผ ["",""] ํ˜•ํƒœ๋กœ ๊ธฐ์ž…
      • preferred_backup_time : ๋ฐฑ์—… ์‹œ๊ฐ„์€ UTC ๊ธฐ์ค€์œผ๋กœ ๊ธฐ์ž… (ex :15:00z-16:00z์ผ ๊ฒฝ์šฐ ํ•œ๊ตญ์‹œ๊ฐ„ 00:00-01:00)
      • backup_retention_period : ๋ฐฑ์—… ์œ ์ง€ ๊ธฐ๊ฐ„ ์„ค์ •
      • log_backup_retention_period : ๋กœ๊ทธ ๋ฐฑ์—… ๊ธฐ๊ฐ„ ์„ค์ •
      • enable_backup_log : ๋ฐฑ์—… ๋กœ๊ทธ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ ๊ธฐ์ž…
    • ์™ธ๋ถ€ ์ ‘์† ์—ฌ๋ถ€ ์„ค์ •
      • allocate_public_connection : public endpoint ์‚ฌ์šฉ์—ฌ๋ถ€ ๊ธฐ์ž…
      • port : ์™ธ๋ถ€์—์„œ ์ ‘์†ํ•  ํฌํŠธ ๊ธฐ์ž…. ๊ธฐ๋ณธ๊ฐ’์€ DB engine๊ณผ ๋™์ผ
      • connection_prefix : ์—ฐ๊ฒฐ์„ ์œ„ํ•œ prefix ๊ธฐ์ž…
    • DB ๊ณ„์ • ์„ค์ •
      • type : ๊ณ„์ • ์œ ํ˜• ์„ค์ •
      • privilege : ๊ถŒํ•œ ์„ค์ •
      • account_name : ๊ณ„์ • ์ด๋ฆ„ ๊ธฐ์ž…
      • password : ์•”ํ˜ธ ๊ธฐ์ž…
    • database ์ƒ์„ฑ ์„ค์ •
      • name : database ์ด๋ฆ„ ๊ธฐ์ž…
      • character_set : ์‚ฌ์šฉํ•  character_set ์„ ํƒ
      • description : ์„ค๋ช… ๊ธฐ์ž…

RDS ์ƒ์„ฑ code ์ฐธ๊ณ  : modules/rds ํด๋” ์ฐธ๊ณ 

STEP 2. Module์„ ์ด์šฉํ•˜์—ฌ ๋ฐฐํฌํ•œ ์„œ๋น„์Šค ํ™•์ธ

STEP 1์—์„œ Module์„ ์ด์šฉํ•ด์„œ ๋ฐฐํฌํ•œ ์„œ๋น„์Šค๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธ์„ ํ•˜๋ฉฐ, ์›ํ•˜๋Š”๋ฐ๋กœ ์„œ๋น„์Šค๊ฐ€ ๊ตฌ์„ฑ์ด๋˜์—ˆ๋Š”์ง€ ํ™•์ธ์„ ํ•ฉ๋‹ˆ๋‹ค.

STEP 2.1. Module ์‹คํ–‰

Terraform Module์„ ์‹คํ–‰์„ ํ•˜๋ ค๋ฉด modules๊ณผ test code๋ฅผ ๋‹ค์šด์„ ๋ฐ›์•„์•ผํ•ฉ๋‹ˆ๋‹ค. linux์˜ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ๋‹ค์šด๋กœ๋“œ ํ›„ ์‚ฌ์šฉ์„ ํ•ฉ๋‹ˆ๋‹ค.

wget https://github.com/seodea/terraform-alicloud-module/archive/refs/heads/main.zip
unzip main.zip
cd terraform-alicloud-module-main/02.test_code/

ํ•ด๋‹น ํด๋”์— ์žˆ๋Š” main_code.tf์—๋Š” ๋ฐ”๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ณ€์ˆ˜๊ฐ’์ด ๊ธฐ์ž…์ด ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ, ์ˆ˜์ •์ด ํ•„์š”ํ•˜์‹  ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ์ตœ์†Œํ•œ์œผ๋กœ ์ˆ˜์ •์œผ๋กœ ๋ฐ”๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • terraform plan์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
[root@sdh-tf-vm dev]# terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

module.was_instances.data.alicloud_instance_types.default: Refreshing state...
module.web_instances.data.alicloud_instance_types.default: Refreshing state...
module.web_instances.data.alicloud_images.images: Refreshing state...
module.was_instances.data.alicloud_images.images: Refreshing state...

------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # module.dev_internal_slb.alicloud_slb.slb_instance will be created
  + resource "alicloud_slb" "slb_instance" {
      + address              = (known after apply)
      + address_type         = "intranet"
      + delete_protection    = "off"
      + id                   = (known after apply)
      + instance_charge_type = "PostPaid"
      + internet             = (known after apply)
      + master_zone_id       = "cn-shanghai-a"
      + name                 = "internal-slb"
      + resource_group_id    = (known after apply)
      + slave_zone_id        = "cn-shanghai-b"
      + specification        = "slb.s1.small"
      + vswitch_id           = (known after apply)
    }

  # module.dev_internal_slb.alicloud_slb_listener.this[0] will be created
  + resource "alicloud_slb_listener" "this" {
      + acl_status                   = "off"
      + backend_port                 = 1234
      + delete_protection_validation = false

...

Plan: 42 to add, 0 to change, 0 to destroy.

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

์ด์ƒ์ด ์—†์„ ๊ฒฝ์šฐ, ์ƒ์„ฑ์ด๋‚˜ ๋ณ€๊ฒฝ์ด ๋˜๋Š” ๋‚ด์šฉ์— ๋Œ€ํ•ด์„œ ๋‚˜์—ด์ด ๋ฉ๋‹ˆ๋‹ค.

VPC, vSwitch, ECS, SG, SLB, RDS๋ฅผ ๋ชจ๋‘ ์ƒ์„ฑ์„ ํ•˜๋Š”๋ฐ ์ด 42๊ฐœ๊ฐ€ ์ถ”๊ฐ€๊ฐ€ ๋œ๋‹ค๋Š” ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

  • terraform apply

์„œ๋น„์Šค ์ƒ์„ฑ์„ ํ•˜๊ธฐ์œ„ํ•ด์„œ๋Š” terraform apply๋ฅผ ์ง„ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. "yes"๋ฅผ ๊ธฐ์ž…์„ ํ•˜๋ฉด ์„ค์น˜๊ฐ€ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

...

Plan: 42 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes
  • ์™„๋ฃŒ

์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๊ฐ€ ๋๋‚˜๋ฉด, output.tf์— ๊ธฐ์ž…ํ•œ ๋‚ด์šฉ์ด ์ถœ๋ ฅ์ด๋˜๋ฉด์„œ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. output.tf ํŒŒ์ผ์— ๋ณด๋‹ค ์ž์„ธํ•œ ๋‚ด์šฉ์„ ๊ธฐ์ž…์„ ํ•˜๋ฉด console์— ์ ‘์†์„ ํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋ฐ”๋กœ ์ ‘์†์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

...

module.mysql.alicloud_db_account_privilege.this[0]: Creating...
module.mysql.alicloud_db_backup_policy.this: Creation complete after 4s [id=rm-6nn14hi97t3q6uy41]
module.mysql.alicloud_db_account_privilege.this[0]: Creation complete after 2s [id=rm-6nn14hi97t3q6uy41:megazone:ReadWrite]

Apply complete! Resources: 42 added, 0 changed, 0 destroyed.

Outputs:

db_info = {
  "dev_rds_info" = {
    "dev-rds" = "rm-6nn14hi97t3q6uy41"
  }
}
public_sg_info = {
  "sg_id" = "sg-uf60ox6w6y6nu1tawwby"
}
vpc_info = {
  "database_cidr" = "172.16.2.0/24,172.16.102.0/24"
  "database_subnet_names" = "tf-dev-private-VS-cn-shanghai-a,tf-dev-private-VS-cn-shanghai-b"
  "db_info_map" = {
    "cn-shanghai-a" = "vsw-uf6djygf20uom2e2p3bpe"
    "cn-shanghai-b" = "vsw-uf600qsqqhgjsh92id2pu"
  }
  "private_cidr" = "172.16.1.0/24,172.16.101.0/24"
  "private_info_map" = {
    "cn-shanghai-a" = "vsw-uf6aef4bgrt8inqll6p84"
    "cn-shanghai-b" = "vsw-uf6x9bzs0umxwb2cml6am"
  }
  "public_cidr" = "172.16.0.0/24,172.16.100.0/24"
  "public_info_map" = {
    "cn-shanghai-a" = "vsw-uf6povif61u381tbhqtk9"
    "cn-shanghai-b" = "vsw-uf6fyue70yoi1oyj149al"
  }
  "vpc_cidr_block" = "172.16.0.0/16"
  "vpc_id" = "vpc-uf64u85w98gbz19sqecyc"
}
was_instances = {
  "ecs_ids" = "i-uf68dmrj7zr0of8lkv3d,i-uf65dnhz2h1irgcsbhll"
  "eip_addresses" = ""
  "hostname_list" = "was-01,was-02"
}
was_sg_info = {
  "sg_id" = "sg-uf6alfqlbdk6ixvbi47y"
}
web_instances = {
  "ecs_ids" = "i-uf636kjjx58o39mzyp83,i-uf6i1r3ycwoiabd94bbp"
  "eip_addresses" = "106.14.251.20,106.14.240.47"
  "hostname_list" = "web-01,web-02"
}

๋ชจ๋‘ ์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

END

About

A Terrafrom module for deploying 3tire resources in Alibaba Cloud

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages