ITPub博客

首页 > 数据库 > 数据库开发技术 > terraform踩坑记之一terraform init

terraform踩坑记之一terraform init

原创 数据库开发技术 作者:招牌鸡蛋面 时间:2020-07-15 18:22:37 0 删除 编辑

最近项目支持的时候,需要用到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;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
干过测试,做过运维,还兼职过售前+投标+实施+售后+客户培训。前两年入坑大数据开发,熟悉Azure + Databricks大数据相关产品。 喜欢研究技术,所以搞了一个公众号:BPShare,分享一些经验和心得。欢迎骚扰~~~

注册时间:2020-02-17

  • 博文量
    90
  • 访问量
    44238