使用 terraform 创建 azure 自动化 dsc 配置和 dsc 配置节点似乎不起作用

Posted

技术标签:

【中文标题】使用 terraform 创建 azure 自动化 dsc 配置和 dsc 配置节点似乎不起作用【英文标题】:Creating azure automation dsc configuration and dsc configuration node using terraform doesn't seems to be working 【发布时间】:2021-05-30 09:03:24 【问题描述】:

作为我发布过程的第一步,我运行以下 terraform 代码

resource "azurerm_automation_account" "automation_account" 
  for_each            = data.terraform_remote_state.pod_bootstrap.outputs.ops_rg
  name                = "$local.automation_account_prefix-$each.key"
  location            = each.key
  resource_group_name = each.value.name

  sku_name = "Basic"

  tags = 
    environment = "development"
  

按预期创建的自动化帐户,我可以在 Azure 门户中看到这些帐户。

我也有 terraform 代码,可以创建几个 Windows 虚拟机,每个虚拟机创建伴随以下内容

resource "azurerm_virtual_machine_extension" "dsc" 
  name                 = "DevOpsDSC"
  virtual_machine_id   = var.vm_id
  publisher            = "Microsoft.Powershell"
  type                 = "DSC"
  type_handler_version = "2.83"

  settings = <<SETTINGS_JSON
        
          "configurationArguments": 
              "RegistrationUrl": "$var.dsc_server_endpoint",
              "NodeConfigurationName": "$var.dsc_config",
              "ConfigurationMode": "$var.dsc_mode",
              "ConfigurationModeFrequencyMins": 15,
              "RefreshFrequencyMins": 30,
              "RebootNodeIfNeeded": false,
              "ActionAfterReboot": "continueConfiguration",
              "AllowModuleOverwrite": true
          
        
    SETTINGS_JSON

  protected_settings = <<PROTECTED_SETTINGS_JSON
    
      "configurationArguments": 
         "RegistrationKey": 
                  "UserName": "PLACEHOLDER_DONOTUSE",
                  "Password": "$var.dsc_primary_access_key"
                
      
    
PROTECTED_SETTINGS_JSON

结果如下

因此为每个 VM 创建了 VM 扩展,并且状态表明配置成功。

对于下一步,我运行以下 terraform 代码

resource "azurerm_automation_dsc_configuration" "iswebserver" 
  for_each                = data.terraform_remote_state.pod_bootstrap.outputs.ops_rg
  name                    = "iswebserver"
  resource_group_name     = each.value.name
  automation_account_name = data.terraform_remote_state.ops.outputs.automation_account[each.key].name
  location                = each.key
  content_embedded        = "configuration iswebserver "


resource "azurerm_automation_dsc_nodeconfiguration" "iswebserver" 
  for_each                = data.terraform_remote_state.pod_bootstrap.outputs.ops_rg
  name                    = "iswebserver.localhost"
  resource_group_name     = each.value.name
  automation_account_name = data.terraform_remote_state.ops.outputs.automation_account[each.key].name
  depends_on              = [azurerm_automation_dsc_configuration.iswebserver]
  content_embedded        = file("$path.cwd/iswebserver.mof")

mof文件内容如下

/*
@TargetNode='IsWebServer'
@GeneratedBy=P120bd0
@GenerationDate=02/25/2021 17:33:16
@GenerationHost=D-MJ05UA54
*/

instance of MSFT_RoleResource as $MSFT_RoleResource1ref

ResourceID = "[WindowsFeature]IIS";
 IncludeAllSubFeature = True;
 Ensure = "Present";
 SourceInfo = "D:\\DSC\\testconfig.ps1::5::9::WindowsFeature";
 Name = "Web-Server";
 ModuleName = "PsDesiredStateConfiguration";

ModuleVersion = "1.0";

 ConfigurationName = "TestConfig";

;
instance of OMI_ConfigurationDocument


                    
 Version="2.0.0";
 

                        MinimumCompatibleVersion = "1.0.0";
 

                        CompatibleVersionAdditionalProperties= "Omi_BaseResource:ConfigurationName";
 

                        Author="P120bd0";
 

                        GenerationDate="02/25/2021 17:33:16";
 

                        GenerationHost="D-MJ05UA54";
 

                        Name="TestConfig";


                    ;

运行代码后,我得到以下结果

配置按预期创建,单击 UI 网格中的配置条目,导致以下内容

意味着节点配置也被创建。我的期望是,对于每个 VM,我将看到配置为运行 mof 文件中提供的配置的节点,但节点 UI 显示空节点

所以我试图手动配置节点以将所有和平连接在一起

并且失败并显示以下内容

所以我完全认错了。一方面,azurerm_virtual_machine_extension 允许创建扩展并将其绑定到自动化帐户。此外,还有 azurerm_automation_dsc_configuration 和 azurerm_automation_dsc_nodeconfiguration 允许创建配置和节点配置。但最重要的是,您无法连接所有这些点来创建节点。

为了确认配置有效,我在不使用 azurerm_virtual_machine_extension 的情况下创建了额外的 vm,并且我能够成功地将这个 MV 添加到创建的节点配置中

【问题讨论】:

【参考方案1】:

问题出在 azurerm_virtual_machine_extension dsc_configuration 参数中。该值需要与 azurerm_automation_dsc_nodeconfiguration 资源的 name 属性相同。

【讨论】:

以上是关于使用 terraform 创建 azure 自动化 dsc 配置和 dsc 配置节点似乎不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Terraform 上的 Azure 应用服务自动缩放错误

如何使用 Terraform 为 Azure 资源创建警报

Terraform DSC 配置与节点配置中的 Azure 自动化

使用 Terraform 创建 Azure IaaS 域控制器

使用 Terraform 创建一个 Azure Active Directory 自定义域

创建 azure vm 时,terraform 抛出“无效或未知的密钥:区域”