0

我知道您可以在 Azure 中创建 VHD 图像,但我想做的是创建一个模板化环境。这个环境可能有 2 个 Web 服务器、3 个业务逻辑盒、一些 CentOS 机器和一个 DB 盒。

我知道这是雄心勃勃的,但有人知道这是否可能。最终目标是能够从模板中创建相同的环境,而不必费力地将新盒子联网在一起。

4

1 回答 1

0

是的,你现在完全可以了,我过去一周左右一直在这样做。

使用 Visual Studio(安装 Azure SDK),您现在可以创建一个Azure Resource Group项目来管理您的资源。

创造

网上有一些关于 Visual Studio 如何使用 Json 模板的优秀指南,我从Eliot Mansfield 的这个视频和GitHub 上的源代码开始,因为我想确保我以模块化方法开始我自己的资源和任何其他资源客户可能需要。

我正在构建我的项目的一半:

项目

但是我已经可以在我的资源组中部署、、、、、等所有组织key-vaults、参数化和维护storage accounts,只需单击几下:virtual networksvnet gatewaysvirtual machines

部署

如果有人想从事这样的项目,这里有一些技巧可以为您节省一些时间:

  • 确保模板是模块化的,适当地命名资源是必须的,我采用了 Eliot 的方法,并在所有内容前加上资源类型,记住重新部署模板时不会删除资源,您可以通过修改模板并重新运行来保持基础架构最新在大多数情况下(我认为,尚未测试所有场景,但希望如此!)
  • 尽可能使用链接模板,但请记住这些模板需要发布到在线位置。如果不公开存储模板,请使用 Azure 中的存储帐户。
  • 如果您在模板中使用_artifactsLocation_artifactsLocationSasToken参数,则在通过 Visual Studio 部署时,它会询问将Artifact storage accountDeploy-AzureResourceGroup.ps1项目文件属性中上传所有模板和设置为内容的任何文件的位置(在解决方案资源管理器中选择文件时按 F4)并替换参数值。但是永远不要在参数文件中手动包含这些参数值,因为部署脚本在尝试用生成的值替换这些参数值时会失败。
  • 我没有测试链接模板也链接到另一个模板,对我来说似乎很不整洁,必须将生成的工件存储密钥传递给链接模板,所以我一直在避免这种情况。
  • 在变量中构建模板链接,下面是我的一个模板的示例,它使用部署脚本生成的存储帐户位置和 SasToken 参数来访问容器,单击此处了解有关 SasToken 的更多信息。

    {
        "variables": {
            "templates": {
              "vm": {
                "folder": "nestedtemplates",
                "fileName": "vm.json"
              },
              "deploy": {
                "folder": "rg-lab-superadmin",
                "fileName": "deploy.sh"
              }
            },
            "templateLinks": {
              "vm": "[concat(parameters('_artifactsLocation'), '/', variables('templates').vm.folder, '/', variables('templates').vm.fileName, parameters('_artifactsLocationSasToken'))]",
              "deploy": "[concat(parameters('_artifactsLocation'),  '/', variables('templates').deploy.folder, '/', variables('templates').deploy.fileName, parameters('_artifactsLocationSasToken'))]"
            }
        }
    }
    
  • 您可以将上述工件位置的相同主体用于要在具有自定义脚本扩展名的目标 VM 上执行的脚本。
  • VM 上的自定义脚本应该可以一遍又一遍地重新部署到同一个 VM,因为您可能需要重新部署包括 VM 的整个资源组,并且这些脚本需要考虑这一点。
  • VNet 资源必须位于同一位置,但不一定位于同一资源组,您可以在模板中对此进行规划,例如,每当我需要 vnet 资源时,我也会询问它所在的资源组,以便您可以创建适当的resourceId( )在您的模板上。一个常见的场景是,当您创建 VM 时,我的模板还创建了 NIC,这需要正确引用到可能位于另一个资源组上的 vnet。
于 2018-02-21T22:18:14.900 回答