
最近项目支持的时候,需要用到terraform在Azure China上部署所有基础架构资源,所以就在公司电脑上安装了下面的插件,对应版本信息见下:
- Azure CLI:2.8.0
- Terraform:v0.12.28
简单做了配置,参照官方文档想在Azure上面创建一个VM,想尝试一把,但是在terraform init时出现了问题。
terraform代码如下:
provider "azurerm" {}variable "prefix" {default = "tfvmex"}resource "azurerm_resource_group" "main" {name = "${var.prefix}-resources"location = "China East"}resource "azurerm_virtual_network" "main" {name = "${var.prefix}-network"address_space = ["10.0.0.0/16"]location = azurerm_resource_group.main.locationresource_group_name = azurerm_resource_group.main.name}resource "azurerm_subnet" "internal" {name = "internal"resource_group_name = azurerm_resource_group.main.namevirtual_network_name = azurerm_virtual_network.main.nameaddress_prefix = "10.0.2.0/24"}resource "azurerm_network_interface" "main" {name = "${var.prefix}-nic"location = azurerm_resource_group.main.locationresource_group_name = azurerm_resource_group.main.nameip_configuration {name = "testconfiguration1"subnet_id = azurerm_subnet.internal.idprivate_ip_address_allocation = "Dynamic"}}resource "azurerm_virtual_machine" "main" {name = "${var.prefix}-vm"location = azurerm_resource_group.main.locationresource_group_name = azurerm_resource_group.main.namenetwork_interface_ids = [azurerm_network_interface.main.id]vm_size = "Standard_DS1_v2"# Uncomment this line to delete the OS disk automatically when deleting the VM# delete_os_disk_on_termination = true# Uncomment this line to delete the data disks automatically when deleting the VMdelete_data_disks_on_termination = truestorage_image_reference {publisher = "Canonical"offer = "UbuntuServer"sku = "16.04-LTS"version = "latest"}storage_os_disk {name = "myosdisk1"caching = "ReadWrite"create_option = "FromImage"managed_disk_type = "Standard_LRS"}os_profile {computer_name = "hostname"admin_username = "testadmin"admin_password = "Password1234!"}os_profile_linux_config {disable_password_authentication = false}tags = {environment = "staging"}}
初始化上面的terraform,遇到错误如下:

错误就是:Registry service unreachable.上面也提示了应该是网络问题,公司有代理,不过我已经做过配置了,可还是出现这个问题,而且terraform的registry service是好的。
Google了一把,在terraform init这条命令执行的时候,除了会去找.tf配置文件,还会根据你在.tf配置文件里用的provider去下载对应的plugin,然后放到%APPDATA%\terraform.d\plugins这个文件夹里(Windows),其它OS路径应该在~/.terraform.d/plugins这个文件夹下。所以现在这个问题就清楚了,下载插件时候本机和提供插件的服务不能通信了,上图错误中有提示说是网络问题。所以应该就是我本地电脑的代理有点问题,具体什么问题不想再扒下去了,手动下载一下需要的插件吧!
详细可参考terraform官网:
https://www.terraform.io/docs/commands/init.html#plugin-installation
临时解决方案
1. 需要去官网下载对应的plugin,这里我用的是azurerm,所以直接下载azurerm的plugin,下面是下载地址:
https://releases.hashicorp.com/terraform-provider-azurerm/2.18.0/
注意:因为我的Azure CLI版本是2.18,所以这里我下载的azurerm也是2.18版本。
2. 将下载好的zip文件解压,把terraform-provider-azurerm_v2.18.0_x5.exe放到C:\Users\YourUserName\AppData\Roaming\terraform.d\plugins文件夹下,plugins这个文件夹如果没有,自己创建一个。
现在我们再运行一次terraform init,发现已经成功init:

本次就先分享到这里,以后有坑,继续分享!
扫码关注微信公众号,都是干货哦!

本人微信号,欢迎骚扰!


~daling!点个赞,点个在看呗!~




