클라우드/Azure-Terraform

Azure terraform modules 구성

Hoony.Song 2024. 6. 17. 16:52
반응형
Azure Terraform 을 공부하면서 간단하게 모듈을 구성

 

모듈의 디렉토리 구조 

modules
    ├── base
    │   └── resource_group
    ├── container
    │   ├── kubernetes_cluster
    │   ├── kubernetes_node_pool
    │   ├── registry
    │   └── registry_scope_map
    ├── kubernetes
    │   └── core
    │       ├── configmap
    │       └── namespace
    └── network
        ├── publicIP
        ├── subnets
        └── virtual_network

resource_group 모듈 

resource "azurerm_resource_group" "resource_group" {
  location = var.location
  name     = var.name
  tags = var.tags
  }
  • 간단하게 리소스 그룹의 모듈을 만들어 봤다 필요한 옵션은 나중에 추가 하자

kubernetes_cluster 모듈 

resource "azurerm_kubernetes_cluster" "cluster" {
  # automatic_channel_upgrade = "patch"
  dns_prefix                = var.dns_prefix
  location                  = var.location
  name                      = var.name
  resource_group_name       = var.resource_group_name
  default_node_pool {
    enable_auto_scaling = true
    max_count           = var.max_count
    min_count           = var.min_count
    name                = var.default_nodepool_name
    os_disk_type        = var.os_disk_type
    vm_size             = var.vm_size
    upgrade_settings {
      max_surge = var.upgrade_max_surge
    }
  }
  identity {
    type = "SystemAssigned"
  }
  
}
  • aks 클러스터 생성 모듈이다 역시 필요한 옵션만 넣고 간단하게 만들어 봤다 

kubernetes_node_pool 모듈 

resource "azurerm_kubernetes_cluster_node_pool" "node_pool" {
  enable_auto_scaling   = var.enable_auto_scaling
  kubernetes_cluster_id = var.cluster_id
  max_count             = var.max_count
  min_count             = var.min_count
  mode                  = var.mode
  name                  = var.name
  os_disk_type          = var.os_disk_type
  vm_size               = var.vm_size
  upgrade_settings {
    max_surge = var.upgrade_max_surge
  }
}
  • aks 에 필요한 추가 노드풀이다 만들어는 놨는데 생성은 하지 않았다 (비용 ㅠㅠ) 

configmap 모듈 

resource "kubernetes_config_map" "configmap" {
  metadata {
    name      = var.name
    namespace = var.namespace
  }

  data = {
    "aims.properties" = file(var.config_Path)
  }
}
  • aks 에 configmap을 직접 생성해야 할 일이 있어서 한번 만들었다 

namespace 모듈 

resource "kubernetes_namespace_v1" "Singular_namespace" {
  count      = length(var.name) > 0 ? 1 : 0
  metadata {
    name = var.name
  }
  wait_for_default_service_account = var.wait_for_default_service_account
}

resource "kubernetes_namespace_v1" "plural_namespace" {
  for_each = { for namespace in var.namespaces : namespace.name => namespace }

  metadata {
    name = each.value.name
  }

  wait_for_default_service_account = each.value.wait_for_default_service_account
}
  • configmap 만들면서 네임스페이스도 필요할 것 같아 만들었는데 역시나 필요했고 ... 
    네임스페이스를 단일로 생성하는것과 map 형식으로 한번에 생성하도록 두 가지를 구현했다 

Public IP 모듈 

resource "azurerm_public_ip" "public_ip" {
  name                = var.name
  location            = var.location
  resource_group_name = var.resource_group_name
  #public_ip_address_allocation = "static"
  allocation_method = var.allocation_method
  #domain_name_label            = var.name_prefix
}

subnets 모듈

resource "azurerm_subnet" "res-12" {
  address_prefixes     = var.address_prefixes
  name                 = var.name
  resource_group_name  = var.resource_group_name
  virtual_network_name = var.vnet_name  
}

virtual_network 모듈 

resource "azurerm_virtual_network" "vnet" {
  address_space       = var.address_space
  location            = var.location
  name                = var.name
  resource_group_name = var.resource_group_name
}
  • 실제 샘플 서비스를 올려보기 위해 네트워크를 구성했다 

 

다음 장에서 프로비저닝을 구성해서 올라 가는지 테스트 해보자 

 

 

 

 

 

 

 

 

반응형