暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

terraform踩坑记之一terraform init

BPShare 2020-07-15
3093

最近项目支持的时候,需要用到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.location
    resource_group_name = azurerm_resource_group.main.name
    }


    resource "azurerm_subnet" "internal" {
    name = "internal"
    resource_group_name = azurerm_resource_group.main.name
    virtual_network_name = azurerm_virtual_network.main.name
    address_prefix = "10.0.2.0/24"
    }


    resource "azurerm_network_interface" "main" {
    name = "${var.prefix}-nic"
    location = azurerm_resource_group.main.location
    resource_group_name = azurerm_resource_group.main.name


    ip_configuration {
    name = "testconfiguration1"
    subnet_id = azurerm_subnet.internal.id
    private_ip_address_allocation = "Dynamic"
    }
    }


    resource "azurerm_virtual_machine" "main" {
    name = "${var.prefix}-vm"
    location = azurerm_resource_group.main.location
    resource_group_name = azurerm_resource_group.main.name
    network_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 VM
    delete_data_disks_on_termination = true


    storage_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!点个赞,点个在看呗!~

    文章转载自BPShare,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论