안녕하세요!
하씨가문의 영광입니다
오늘은 Terraform 리소스에 대한 이해 Azure 편이 어느새 마지막편인데요!
마지막까지 한번 달려볼까요~
고고싱~!
VM
현재 Terraform Azure Documentation에 VM 배포 resources가 azurerm_linux_virtual_machine, azurerm_virtual_machine 과 azurerm_windows_virtual_machine으로 3개가 있습니다.
"azurerm_virtual_machine" 리소스가 "azurerm_linux_virtual_machine" 및 "azurerm_windows_virtual_machine" 리소스로 대체되었습니다. 기존 azurerm_virtual_machine 리소스는 2.x 릴리스 내내 계속 사용할 수 있지만 호환성을 유지하기 위해 기능이 정지된 상태입니다.
대신 새로운 기능이 azurerm_linux_virtual_machine 및 azurerm_windows_virtual_machine 리소스에 추가됩니다.
그러므로 되도록이면 "azurerm_virtual_machine"이 아닌 "azurerm_linux_virtual_machine" 과 "azurerm_windows_virtual_machine" 사용하는게 좋습니다.
저는 Linux 가상 머신을 배포할 예정이기에 "azurerm_linux_virtual_machine"을 사용하도록 하겠습니다.
resource "azurerm_linux_virtual_machine" "example" {
name = "example-machine"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
size = "Standard_F2"
admin_username = "adminuser"
network_interface_ids = [
azurerm_network_interface.example.id,
]
admin_ssh_key {
username = "adminuser"
public_key = file("~/.ssh/id_rsa.pub")
}
os_disk {
caching = "ReadWrite"
storage_account_type = "Standard_LRS"
}
source_image_reference {
publisher = "Canonical"
offer = "UbuntuServer"
sku = "16.04-LTS"
version = "latest"
}
}
vm 같은경우는 블록이 많기에 어느 블록에 어떤 인수를 사용되는지 잘 분간해서 사용하는게 좋을거 같습니다.
resource "azurerm_linux_virtual_machine" "example" { } 블록에는 어떤것이 사용되는지 한번 알아보도록 하겠습니다.
<필수>
- name : Linux 가상 머신의 이름입니다. 이를 변경하면 새 리소스가 생성됩니다.
- resource_group_name : Linux 가상 머신이 있어야 하는 리소스 그룹의 이름입니다. 이를 변경하면 새 리소스가 생성됩니다.
- location : Linux 가상 머신이 있어야 하는 Azure 위치입니다. 이를 변경하면 새 리소스가 생성됩니다.
- size : 이 가상 머신에 사용해야 하는 SKU(예 : Standard_F2)
- admin_username : 가상 머신에 사용되는 로컬 관리자의 사용자 이름입니다. 이를 변경하면 새 리소스가 생성됩니다.
- network_interface_ids : 이 가상 머신에 연결해야 하는 네트워크 인터페이스 ID 목록입니다. 이 목록의 첫 번째 네트워크 인터페이스 ID는 가상 머신의 기본 네트워크 인터페이스가 됩니다.
- os_disk : os disk { } 아래 정의된 블록입니다.
<선택사항>
- license_type : 이 가상 머신에 대한 BYOL 유형을 지정합니다. 가능한 값은 RHEL_BYOS 및 SLES_BYOS 입니다.
- additional_capabilities : addtitional_capabilities { } 아래에 정의된 블록입니다.
- admin_password : 이 가상 머신의 로컬 관리자에 대해 사용해야 하는 암호입니다. 이를 변경하면 새 리소스가 생성됩니다.
admin_password 가 지정되면 disable_password_authentication 은 false로 지정되어야만 합니다.
admin_password 또는 admin_ssh_key 중 하나를 지정해야 합니다.
- admin_ssh_key : admin_ssh_key { } 아래에 정의된 블록 입니다.
- allow_extension_operations : 이 가상 머신에서 확장 작업을 허용하는지에 대한 인수입니다.
- availability_set_id : 가상 머신이 위치할 가용성 집합의 ID를 지정합니다. 이를 변경하면 새 리소스가 생성됩니다.
- boot_diagnostics : boot_diagnostics { } 아래에 정의된 블록입니다.
- capacity_reservation_group_id : 가상 머신이 할당되어야 하는 용량 예약 그룹의 ID를 지정합니다.
capacity_reservation_group_id 는 availability_set_id 또는 proximity_placement_group_id 와 함께 사용할 수 없습니다.
- custom_data : 이 가상 머신에 사용해야 하는 Base64로 인코딩된 사용자 지정 데이터입니다. 이를 변경하면 새 리소스가 생성됩니다.
- disable_password_authentication : 이 가상 머신에서 암호 인증을 비활성화해야 하는지 여부에 대한 인수입니다. 기본값은 true 이고, 이를 변경할시, 새 리소스가 생성됩니다.
- edge_zone : 이 Linux 가상 머신이 있어야 하는 Azure 지역 내의 edge 영역을 지정합니다. 이를 변경하면 새 Linux 가상 머신이 생성됩니다.
- encryption_at_host_enabled : 호스에서 암호화를 활성화하여 이 가상 머신에 연결된 모든 디스크(임시 디스크 포함)를 암호화해야 하는지 여부에 대한 인수입니다.
- identity : identity { } 아래에 정의된 블록입니다.
- platform_fault_domain : 이 Linux 가상 머신을 생성해야 하는 플랫폼 장애 도메인을 지정합니다. 기본값은 "-1", 이는 사용 가능한 장애 도메인에서 균형을 가장 잘 유지하는 장애 도메인에 자동으로 할당됨을 의미합니다. 이를 변경하면 새 Linux 가상 머신이 생성됩니다.
- priority : 이 가상 머신의 우선 순위를 지정합니다. 가능한 값은 Regular 및 Spot 입니다. 기본값은 Regular 입니다. 이를 변경하면 새 리소스가 생성됩니다.
- provision_vm_agent : 이 가상 머신에 Azure VM agent를 프로비저닝해야 하는지 여부에 대한 인수입니다. 기본값은 true로, 이를 변경할시, 새 리소스가 생성됩니다.
provision_vm_agent가 false로 설정되어있다면 allow_extension_operations 또한 false로 지정되어야 합니다.
- secure_boot_enabled : 가상 머신에서 보안 루팅을 활성화해야 하는지 여부를 지정합니다. 이를 변경하면 새 리소스가 생성됩니다.
- source_image_id : 이 가상 머신을 생성 하는 이미지의 ID 입니다. 이를 변경하면 새 리소스가 생성됩니다.
가능한 ID 유형으로는 아래와 같이 있습니다.
- Iamge ID (s)
- Shared Image ID (s)
- Shared Image Version ID (s)
- Community Gallery Image ID (s)
- Community Gallery Image Version ID (s)
- Shared Gallery Image ID (s)
- Shared Gallery Image Version ID (s)
- source_image_reference : source image_referenece { } 아래에 정의된 블록입니다. 이를 변경하면 새 리소스가 생성됩니다.
source_image_id 또는 source_image_reference 중 하나를 설정해야 합니다.
- tags : 이 가상 머신에 할당해야 하는 태그 매핑입니다.
- virtual_machine_scale_set_id : 이 가상 머신이 생성되어야 하는 오케스트레이션된 가상 머신 확장 집합을 지정합니다.
오케스트레이션된 가상 머신 확장 집합은 리소스를 사용하여 azurerm_orchestrated_virtual_machine_scale_set 프로비저닝할 수 있습니다.
- zone : 이 Linux 가상 머신이 있어야 하는 가용 영역을 지정합니다. 이를 변경하면 새 Linux 가상 머신이 생성됩니다.
지금까지 "azurerm_linux_virtual_machine" 볼록내에 쓰이는 필수&선택사항에 대한 인수 또는 블록들을 알아보았습니다.
이제부터는 주로 쓰이는 블록내에서 쓰이는 인수들에 대해서 알아보도록 하겠습니다.
admin_ssh key { } 블록 인수
<필수>
- public_key : 인증에 사용해야 하는 공개 키(2048 bit 이상 및 ssh_rsa 형식)입니다. 이를 변경하면 새 리소스가 생성됩니다.
- username : 이 공개 SSH 키를 구성해야 하는 사용자 이름입니다.
Azure VM 에이전트는 경로(/home/{username}/.ssh/authorized_keys" )에서 SSH 키 생성만 허용합니다. 따라서 이 공개 키는 인증된 키 파일에 기록됩니다.
os_disk { } 블록 인수
<필수>
- caching : 내부 OS 디스크에 사용해야 하는 캐싱 유형입니다. 가능한 값은 None, ReadOnly 및 ReadWrite 입니다.
- storage_account_type : 이 내부 OS 디스크를 백업해야 하는 저장소 계정의 유형입니다. 가능한 값은 Standard_LRS, StandardSSD_LRS, Premium_LRS, StandardSSD_ZRS, Premium_ZRS 입니다. 이를 변경하면 새 리소스가 생성됩니다.
<선택사항>
- disk_size_gb : 내부 OS 디스크의 크기(GB)입니다. 이 가상 머신이 제공되는 이미지에 사용된 크기와 다르게 하려는 경우 사용되는 인수입니다.
- name : 내부 OS 디스크에 사용할 이름입니다. 이를 변경하면 새 리소스가 생성됩니다.
- write_accelerator_enabled : 이 OS 디스크에 대해 쓰기 가속기를 활성화할지 여부에 대한 인수입니다. 기본값은 false 입니다.
이를 위해, storage_account_type 는 Premium_LRS 로 세팅되어야하고 caching은 None으로 세팅되어야합니다.
source_image_reference { } 블록 인수
<선택사항>
- publisher : 이 가상 머신을 생성하는 데 사용되는 이미지의 게시자를 지정합니다.
- offer : 이 가상 머신을 생성하는 데 사용되는 이미지의 제공을 지정합니다.
- sku : 이 가상 머신을 생성하는 데 사용되는 이미지의 SKU를 지정합니다.
- version : 이 가상 머신을 생성하는 데 사용되는 이미지의 버전을 지정합니다.
여기까지 해서 Azure Linux VM을 배포하는데에 주로 사용되는 인수들에 대해 알아보았습니다. 이제는 VM 배포할때 쓰이는 "사용자 지정"에 쓰이는 리소스를 알아보겠습니다.
Azure VM Extension
이번에 소개할 "azurerm_virtual_machine_extension" 리소스는 배포 후 구성을 제공하고 자동화된 작업(코드)를 실행하기 위해 가상 머신 확장을 사용합니다.
사용자 지정 스크립트 확장을 사용하려면 Azure 가상 컴퓨터 게스트 에이전트가 가상 컴퓨터에서 실행 중이어야 합니다.
resource "azurerm_virtual_machine_extension" "example" {
name = "hostname"
virtual_machine_id = azurerm_virtual_machine.example.id
publisher = "Microsoft.Azure.Extensions"
type = "CustomScript"
type_handler_version = "2.0"
settings = <<SETTINGS
{
"commandToExecute": "hostname && uptime"
}
SETTINGS
tags = {
environment = "Production"
}
}
"azurerm_virtual_machine_extension" 블록에 사용되는 인수는 다음과 같습니다.
<필수>
- name : 가상 머신 확장 peering의 이름입니다. 이를 변경하면 새 리소스가 생성됩니다.
- virtual_machine_id : 가상 머신의 ID 입니다. 이를 변경하면 새 리소스가 생성됩니다.
- publisher : 확장의 게시자, 사용 가능한 게시자는 Azure CLI를 사용하여 찾을 수 있습니다. 이를 변경하면 새 리소스가 생성됩니다.
- type : 확장 유형, 게시자가 사용할 수 있는 유형은 Azure CLI를 사용하여 찾을 수 있습니다.
- type_handler_version : 사용할 확장 버전을 지정합니다. 사용 가능한 버전은 Azure CLI를 사용하여 찾을 수 있습니다.
<선택사항>
- automatic_upgrade_enabled : 게시자가 이 VM 확장의 새 버전을 출시할 때마다 확장이 자동으로 업데이트되어야 하는지 여부에 대한 인수입니다. 기본값은 false 입니다.
- settings : 확장에 전달된 설정은 문자열에서 JSON 개체로 지정됩니다.
특정 VM 확장에서는 settings 블록의 키가 대소문자를 구분해야 합니다.
- protected_settings : 확장에 전달된 protected_settings는 설정과 같이 문자열에서 JSON 객체로 지정됩니다.
protected_settings 또한 특정 VM 확장에서는 블록의 키가 대소문자를 구분해야 합니다.
- tags : 리소스에 할당할 태그 매핑입니다.
지금까지 Terraform Azure에 대한 내용을 다루어보았는데요!
IaC 도구인 Terraform이 얼마나 많은 기능을 제공하는지 다시한번 느낄 수 있었습니다.
다음에는 Terraform AWS에 대한 기능을 다루어볼텐데요 다음편도 많이 기대해주세요~~
그럼 뿅!
'INFRA > Operation' 카테고리의 다른 글
Terraform 리소스에 대한 이해 - AWS 1편 (2) | 2022.09.19 |
---|---|
쿠버네티스 이론 STEP10 Cluster Upgrade (0) | 2022.09.16 |
쿠버네티스 이론 STEP9 Controller&Rolling Update (0) | 2022.09.14 |
Terraform 리소스에 대한 이해 - Azure 4편 (0) | 2022.09.06 |
Terraform 리소스에 대한 이해 - Azure 3편 (0) | 2022.09.03 |
댓글