【问题标题】:[Azure Terraform]: Create Start/Stop VM Solution[Azure Terraform]:创建启动/停止 VM 解决方案
【发布时间】:2021-08-12 14:25:22
【问题描述】:

我正在使用 Terraform 在 Azure 中创建自动化帐户。

Azure 提供程序中的以下资源可以完成这项工作:azurerm_automation_account。

好的。所以我创建了我的 AA……这是出现问题的时候。

  1. “运行方式”帐户:似乎有一种方法可以从 Terraform 创建它……但过程很麻烦。我已经失去了希望,并且可能会求助于从 Azure 门户手动启用它(只需单击一下)......但它会破坏我的自动化管道:(

  2. “启动/停止 VM 解决方案”:我需要此解决方案中的 powershell 运行手册来根据给定的时间表启动停止 VM。 Azure 提供程序中有一个名为“azurerm_automation_runbook”的资源。它有 2 个有用的参数来引用 Runbook 脚本:

    • “内容”:用它我可以“加载”一个本地的 powershell 脚本内容。我知道这会起作用(我可以手动下载“启动/停止 VM 解决方案”使用的 .ps1 脚本并使用“内容”来加载它),但我会错过微软在其代码中所做的任何修复/更新)

    • “publish_content_link”:通过它我可以指向给定的 powershell runbook 的 URI。我在“运行手册库”中查看了“启动/停止 VM 解决方案”中包含的运行手册(未找到)。有人对此有任何运气吗?另一种方法可能是从 Terraform 脚本“创建”“启动/停止 VM 解决方案”(这将自动在我的自动化帐户中填充所需的运行手册)......但不确定这是否可能。

提前致谢。

【问题讨论】:

    标签: azure automation terraform


    【解决方案1】:

    对于第 1 点:我还发现它非常具有挑战性,虽然最近情况有所改善,但似乎仍然没有一种简单、直接的方式来创建运行方式帐户。我最终求助于从 Azure 门户手动创建它,但以下是您可以探索的潜在领域:

    我不确定您是否考虑过使用来自 terraform 的 external data source 来执行来自 Microsoft 的 Powershell script。由于您必须手动进行身份验证的最后一步,这仍然很痛苦,但它仍然使您更接近于拥有您的环境的蓝图。虽然我不确定如果第二次运行这个 Terraform 脚本会如何。

    对于第 2 点:您能否确认您要使用的脚本是 Powershell 脚本而不是 Powershell Workflow 脚本?另外能否请您详细说明这种方法(我感觉这可能是最好的方法):

    另一种方法是从 Terraform 脚本“创建”“启动/停止 VM 解决方案”(这将自动在我的自动化帐户中填充所需的运行手册)

    如果您查看 Runbooks Gallery,您会发现这些 Powershell 脚本中的大多数已经多年没有更新,并且仍然可以正常工作。如果这将在生产环境中使用,最好在方便时控制更改和更新。如果要获取 URI,只需单击“查看源项目”,它将引导您到 GitHub 存储库。例如。用于运行手册Stop-Start-AzureVM (Scheduled VM Shutdown/Startup)

    您还会注意到大部分脚本是由外部方提交的。如果您链接到由其他人维护的 URI,并且该人在其中发布了恶意代码,甚至不小心弄乱了代码,那么这是不可取的。但是我再次不确定您的自动化程度(例如,如果您希望每月执行一次 terraform 脚本以确保 Runbook 是最新的)

    如果我从某个地方获得脚本,我会在将它们用于我的环境之前对其进行验证。

    data "local_file" "start_vm_parallel" {
          filename                       = "./scripts/start-vm-parallel.ps1"
    }
    
    resource "azurerm_automation_runbook" "start_vm_parallel" {
          name                           = local.NAME
          location                       = local.REGION
          resource_group_name            = local.RG
          automation_account_name        = azurerm_automation_account.automation_prod.name
          log_verbose                    = "true"
          log_progress                   = "true"
          description                    = "This runbook starts VMs in parallel based on a matching tag value"
          runbook_type                   = "PowerShellWorkflow"
          content                        = data.local_file.start_vm_parallel.content
    
          publish_content_link {
            uri = "https://path.to.script/script.ps1"
          }
    }
    

    如果您使用的是 Powershell 工作流,则需要确保 Runbook 名称与脚本中的工作流名称匹配。

    在开始使用 Runbook 之前要记住的最后一件事是通过从 Azure Automation team 创建“模块更新”Runbook 并按计划运行,每月一次来更新模块。

    【讨论】:

      猜你喜欢
      • 2019-03-10
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      相关资源
      最近更新 更多