클라우드/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
}
- 실제 샘플 서비스를 올려보기 위해 네트워크를 구성했다
다음 장에서 프로비저닝을 구성해서 올라 가는지 테스트 해보자
반응형