微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Terraform 在 Linux VM 上运行脚本扩展

如何解决使用 Terraform 在 Linux VM 上运行脚本扩展

我正在尝试使用自定义脚本扩展在 Azure Linux VM 规模集上运行 bash 脚本,我已将脚本上传到 Azure 存储帐户。 bash 脚本用于在 VM Scaleset 上安装 ngix。该脚本运行时没有任何错误,但是如果我登录到任何 VMScaleset 实例进行验证,我看不到 NGIX 正在运行。 Bash 脚本在这里

#!/bin/bash
apt-get update 
apt-get install -y Nginx

这里的地形文件

data "azurerm_subnet" "refdata" {
  name                 = var.subnetName1
  virtual_network_name = var.vnetName
  resource_group_name  = var.resourceGroupName
}
resource "azurerm_windows_virtual_machine_scale_set" "res-vmscaleset" {
  name                = var.vmScaleSetName
  resource_group_name = azurerm_resource_group.DevRG.name
  location            = azurerm_resource_group.DevRG.location
  sku                 = "Standard_F2"
  instances           = 1
  admin_password      = "xxxxxx"
  admin_username      = "adminuser"

  source_image_reference {
    publisher = "MicrosoftwindowsServer"
    offer     = "WindowsServer"
    sku       = "2016-Datacenter-Server-Core"
    version   = "latest"
  }

  os_disk {
    storage_account_type = "Standard_lrs"
    caching              = "ReadWrite"
  }

  network_interface {
    name    = "vmscaleset-nic"
    primary = true

    ip_configuration {
      name      = "internal"
      primary   = true
       subnet_id=data.azurerm_subnet.test.id
    }
  }
}

resource "azurerm_linux_virtual_machine_scale_set" "res-linuxscale" {
  name                = "linuxvmss"
  resource_group_name = azurerm_resource_group.DevRG.name
  location            = azurerm_resource_group.DevRG.location
  sku                 = "Standard_F2"
  instances           = 2
  admin_password = "Password1234!"
  disable_password_authentication = false
  admin_username      = "adminuser"

  source_image_reference {
    publisher = "Canonical"
    offer     = "UbuntuServer"
    sku       = "16.04-LTS"
    version   = "latest"
  }

  os_disk {
    storage_account_type = "Standard_lrs"
    caching              = "ReadWrite"
  }

  network_interface {
    name    = "lvmscaleset-nic"
    primary = true

    ip_configuration {
      name      = "internal"
      primary   = true
      subnet_id=data.azurerm_subnet.test.id
      
    }
  }
}

resource "azurerm_virtual_machine_scale_set_extension" "res-extension" {
  name                         = "example"
  virtual_machine_scale_set_id = azurerm_linux_virtual_machine_scale_set.res-linuxscale.id
  publisher                    = "Microsoft.OSTCExtensions"
  type                         = "CustomScriptForLinux"
  type_handler_version         = "1.0"
  settings = <<SETTINGS
{
    
    "fileUris": ["https://xxxxxxxxxxx.blob.core.windows.net/shellscript11/post-deploy.sh"],"commandToExecute": "sh post-deploy.sh"
    }
 SETTINGS

}

解决方法

参考 this document,您可以像这样使用发布者和类型自定义脚本。

resource "azurerm_virtual_machine_scale_set_extension" "res-extension" {
  name                         = "nnn-extension"
  virtual_machine_scale_set_id = azurerm_linux_virtual_machine_scale_set.example.id
  publisher                    = "Microsoft.Azure.Extensions"
  type                         = "CustomScript"
  type_handler_version         = "2.0"
  settings = jsonencode({ 
    "fileUris" = ["https://xxxx.blob.core.windows.net/shscripts/aptupdate.sh"],"commandToExecute" = "sh aptupdate.sh"
    }
  )
}

应用上述配置后,您可以upgrade每个 vmss 实例,然后 Nginx 将运行。

enter image description here

结果

enter image description here

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。