Terraform만 Azure의 안내 진단을 효과적으로 수행하지 못하기 때문에 GUI와의 결합 기술로 강제로 누르기

11834 단어 AzureTerraformCLItech

시작


안녕하세요.나는 도쿄 도내에서 엔지니어로 일한다.
Azure가 Linux VM 개발을 강요받자 Azure의 문서를 읽다가 이른바'부트 진단'을 알게 됐다.뒷부분에서 설명하겠지만 이 시동진단은 간지럼을 만질 수 있는 서비스라고 생각해서 테라form으로 시동진단을 시도하는 설정으로 결정했다.

1. 본 기사에서 문제의식의 공유


그러나 제목과 같이 Terraform만 진단 시작을 설정할 수 없습니다.따라서 이 글에는 테라form 설정만으로 진단을 시작하는 것, 빼는 오류, 그리고 지금 할 수 있는 타자를 남겨야 한다.
※ 이 기사에서 테라form은 지나치게 초점을 맞추지 않습니다.Terraform의 기본 사용 방법에 대해서는 아래 기사를 참조하십시오.
[Azure] Terraform에서 Windows Virtual Machine에서 설계를 하기 전에

2. "Azure의 부팅 진단" 사용 가능


Azure 문서에는 다음과 같은 설명이 있습니다.
부팅 진단은 VM 부팅 오류 진단을 가능한 Azure 가상 머신(VM)의 디버깅 기능입니다.를 사용하여 진단을 시작하면 Serial 로그 정보를 수집하고 캡처하여 시작 중인 VM의 상태를 확인할 수 있습니다.
참조: Azure 부팅 진단 - Azure Virtual Machines | Microsoft Docs
부팅 진단을 사용하면 아래의 로그 등을 확인할 수 있습니다.
  • VM 해제 후 표시되는 VM의 로그인 화면 캡처(이하 이미지의 왼쪽)
  • VM 처리 전 직렬 로그(이하 이미지 오른쪽)
  • 로그의 끝에 출력successfully running

  • 2-1.용례(예정)


    실제 업무에서 사용한 적이 없고 개인 검증 환경에서 사용한 적이 있다는 것을 전제로 한 예상인데 다음과 같은 용례를 고려할 수 있을까요?
  • 起動しているはずだけどVMにリモートアクセスできない시 디버깅을 진행하여 원인 규명에 도움이 된다
  • 2-2.VM 로그인 화면을 캡처하고 디버깅할 때까지 로그 저장 위치


    VM의 로그인 화면을 캡처하고 디버깅할 때까지 로그가 저장되는 위치는 Azure Storage 계정입니다.
    또 IaS와 지난 시사회를 통해 VM 시연을 할 때도 들을 수 있는'판'과 아주스토어 계정은 다르다.Disk는 다음 이미지디스크 관리에 표시됩니다.

    그림 출처: Azure에서 Windows VM 실행 (빨간색 테두리는 필자가 편집)

    3. 환경 정보


    - ローカル(Terraform実行環境)
      - Ubuntu 20.04.2 LTS
      - Terraform v1.0.0
      - azure-cli 2.61.0
    
    - TerraformでデプロイするVM
      - Ubuntu 18.04
       - Standard F2
    

    4.Terraform만 tf 파일에 써서 Azure의 안내 진단을 유효하게 합니다

  • 아래 내용을 참고하여 tf 파일을 만듭니다
  • Configure a Linux VM with infrastructure in Azure using Terraform | Microsoft Docs
  • terraform azure boot_diagnostics
  • 생성된 tf 파일
  • https://github.com/gkzz/azure-provider-terraform-linux/blob/main/main.tf
  • 점은 다음 2점
  • [요점 1] "azurem storage account" 리소스를 사용하여 진단 안내를 위한 캡처와 직렬 로그


    :::messages
  • 스토리지 계정은 개체 스토리지이므로 이름이 고유해야 합니다.
  • 따라서 "randomid"자원을 사용하여 저장 계정의 이름을 생성합니다.(*1)
  • 스토리지 계정은 세계 어디에서나 HTTP 또는 HTTPS를 통해 Azure Storage 데이터를 액세스할 수 있는 고유한 이름 공간을 제공합니다.
    참조: 스토리지 계정 만들기 - Azure Storage | Microsoft Docs
    :::
    main.tf에서 발췌하다
    
    resource "azurerm_storage_account" "main" {
        ## *1: "random_id"リソースを使ってストレージアカウントの名前を生成
        ## ここでは"boot diagnostics"の"diag"をprefixとしている
        name                        = "diag${random_id.main.hex}"
        location            = azurerm_resource_group.main.location
        resource_group_name         = azurerm_resource_group.main.name
        account_replication_type    = "LRS"
        account_tier                = "Standard"
    }
    
    resource "random_id" "main" {
        keepers = {
            # Generate a new ID only when a new resource group is defined
            resource_group = azurerm_resource_group.main.name
        }
    
        byte_length = 8
    }
    
    참조: https://github.com/gkzz/azure-provider-terraform-linux/blob/main/main.tf#L171:#L191

    [점 2] "azurem linux virtual machine" 리소스의 boot점 1에 생성된 스토리지 계정 지정


    main.tf에서 발췌하다
    
    resource "azurerm_linux_virtual_machine" "main" {
      name                = "${var.prefix}-vm"
      resource_group_name = azurerm_resource_group.main.name
      location            = azurerm_resource_group.main.location
      size                = "Standard_F2"
      admin_username      = "${var.admin_username}"
      network_interface_ids = [
        azurerm_network_interface.main.id,
      ]
    
      admin_ssh_key {
        #略
      }
    
      os_disk {
        #略
      }
    
      source_image_reference {
        #略
      }
    
      boot_diagnostics {
            enabled = "true"
            storage_account_uri = azurerm_storage_account.main.primary_blob_endpoint
      }
    }
    
    참조: https://github.com/gkzz/azure-provider-terraform-linux/blob/main/main.tf#L66:#L169
    그러면 tf 파일을 썼는지 확인하기 위해terraform plan을 시도해 보십시오.

    5.terraform plan


    오류가 발생했습니다.다음 오류 메시지를 읽는 이유는
    "azurem linux virtual machine"리소스의 bootdiagnostics 블록에 썼다고 볼 수 있다enabled = "true".
    $ terraform plan
    ╷
    │ Error: Unsupported argument
    │ 
    │   on main.tf line 99, in resource "azurerm_linux_virtual_machine" "main":
    │   99:         enabled = "true"
    │ 
    │ An argument named "enabled" is not expected here.
    ╵
    $ 
    
    main.tf에서 발췌하다
    
    resource "azurerm_linux_virtual_machine" "main" {
      name                = "${var.prefix}-vm"
      resource_group_name = azurerm_resource_group.main.name
      location            = azurerm_resource_group.main.location
      size                = "Standard_F2"
      admin_username      = "${var.admin_username}"
      network_interface_ids = [
        azurerm_network_interface.main.id,
      ]
    
      #略
    
      boot_diagnostics {
            enabled = "true"
            storage_account_uri = azurerm_storage_account.main.primary_blob_endpoint
      }
    }
    

    6. "azurem linux virtual machine" 리소스가 enabled ="진짜"

  • Azure 문서에 따라 Azure Resource Manager(ARM) 템플릿에서 사용 가능
  • ※ 수중에 미검증
  •  "diagnosticsProfile": {
         "bootDiagnostics": {
             "enabled": true
          }
     }
    
    참조: Azure 부팅 진단 - Azure Virtual Machines | Microsoft Docs

  • Terraform 문서에서 bootdiagnostics 블록 지원 기재**enabled

  • A boot_diagnostics block supports the following:
    ・enabled ty
    이야기uri - (Required) The Storage Account's Blob Endpoint which should hold the virtual machine's diagnostic files.
  • 참조: azurerm_virtual_machine | Resources | hashicorp/azurerm | Terraform Registry
    :::messages
  • 조사 결과, Terraform의 bootdiagnostics 블록의 작법이 정확하다고 볼 수 있다
  • 그러나 위에서 말한 바와 같이 잘못된 원인은 썼기 때문일 것이다enabled = "true"도 정확해야 한다
  • 현재 단계에서Terraform은 유도 진단을 효과적으로 할 수 없다고 판단하여 isse를 제기하였다.
  • Cannot get boot_diagnostics enabled since boot_diagnostics block seems NOT support "enabled=true" · Issue #13023 · hashicorp/terraform-provider-azurerm
  • :::

    7. Terraform만으로는 Azure의 부팅 진단을 유효하게 할 수 없습니다.


    Terraform과 GUI의 조합 기술을 사용하여 시작 진단을 유효하게 설정합니다.Terraform을 사용하여 스토리지 계정을 만들고 GUI를 통해 부팅 진단을 효율적으로 수행합니다.

    7-1.Terraform으로 스토리지 계정 만들기

  • "azurem linux virtual machine"리소스의 bootdiagnostics 블록에서 enabled 삭제 = "진짜"
  • "azuurerm storge account"자원과 "randomid"자원은 상기 내용을 직접 사용
  • main.tf에서 "azurem linux virtual machine"자원과 "azurem storage account"자원과 "randomid"자원
    略
    
    resource "azurerm_linux_virtual_machine" "main" {
      name                = "${var.prefix}-vm"
      resource_group_name = azurerm_resource_group.main.name
      location            = azurerm_resource_group.main.location
      size                = "Standard_F2"
      admin_username      = "${var.admin_username}"
      network_interface_ids = [
        azurerm_network_interface.main.id,
      ]
    
      admin_ssh_key {
        #略
      }
    
      os_disk {
        #略
      }
    
      source_image_reference {
        #略
      }
    
      boot_diagnostics {
            # enabled = "true"
            storage_account_uri = azurerm_storage_account.main.primary_blob_endpoint
      }
    }
    
    resource "azurerm_storage_account" "main" {
        name                        = "diag${random_id.main.hex}"
        location            = azurerm_resource_group.main.location
        resource_group_name         = azurerm_resource_group.main.name
        account_replication_type    = "LRS"
        account_tier                = "Standard"
    }
    
    resource "random_id" "main" {
        keepers = {
            # Generate a new ID only when a new resource group is defined
            resource_group = azurerm_resource_group.main.name
        }
    
        byte_length = 8
    }
    
    을 발췌
  • "azurem storge account"을 설정하는name의 output(후속 설정에서 "azurem stoorage account"를 사용하는name)
  • output.tf에서 발췌
    output "azurerm_storage_account_name" {
      value = azurerm_storage_account.main.name
    }
    
    

    7-2.GUI를 통한 진단 시작 활성화

  • terraform apply 이후 출력된'메모리 계정'을 확인하고 디버깅된 VM 화면 왼쪽에 있는 탭을 아래로 스크롤하고'진단 설정'
  • 을 클릭한다.
  • "스토리지 계정 선택"아래 탭에서 "azurram storage account"의name 선택
  • prefixが"diag"となっているはず!
  • 방문객 레벨 진단 활성화
  • 를 클릭

  • 이따가 아래 화면으로 전환해서'시동 진단 표시'를 눌러주세요.
  • 화면 오른쪽 상단의 팝업에서 안내 진단이 유효하다는 알림


  • 다음과 같이 VM의 캡처(화면 왼쪽) 및 로그(화면 오른쪽)를 표시하여 부트 진단의 유효성을 확인합니다.

  • 8.앞으로의 전망


    현재 진단을 시작하는 설정은Terraform만으로는 완성하기 어렵지만 문서가 선행되었습니까?따라서 Terraform을 통해서만 유도 진단을 효과적으로 할 수 있는 날이 멀지 않을 것이다.
    진단을 효과적으로 이끌어갈 수 있는 설정 방법이 있다면 댓글 등에서 알려주세요.

    P.S.Azure에서 Terraform을 사용하여 Linux VM에서 추출한 샘플 코드


    https://github.com/gkzz/azure-provider-terraform-linux

    P.P.S. 트위터도 있는데 팔로우 해주면 너무 좋아서 울어버린다:)

    좋은 웹페이지 즐겨찾기