
# Terraform配置指南
#### 什么是Terraform
[Terraform](https://www.terraform.io/)是一个开源的IT基础设施编排管理工具，通过Terraform您可以轻松的创建、管理、删除云容器实例资源，并对其进行版本控制。
#### 安装Terraform
Terraform是以二进制可执行文件发布，您只需下载Terraform，然后将Terraform可执行文件所在目录添加到系统环境变量PATH中即可。
![](https://support.huaweicloud.com/devg-cci2/public_sys-resources/caution_3.0-zh-cn.png)
Terraform支持多个操作系统，如Linux、macOS、Windows等，您可以登录[Terraform官网](https://www.terraform.io/downloads.html)，下载对应操作系统的安装包，并将可执行Terraform文件添加至对应系统的环境变量中。
下文示例以Linux环境为例，进行Terraform安装说明。
1. 登录[Terraform官网](https://www.terraform.io/downloads.html)，下载对应的Linux操作系统安装包。
2. 在命令行中执行如下命令，解压安装包，赋予Terraform可执行权限，并放到PATH目录下。其中，*$PATH* 为PATH路径（如/usr/local/bin），请替换为实际的值。
   ```
   unzip terraform_1.xx.x_
   chmod +x ./terraform
   mv ./terraform $PATH
   ```
   
3. 在命令行中执行如下命令验证配置路径是否正确。
   ```
   terraform -version
   ```
   如果回显如下则说明配置正确，Terraform可以运行。
   ![](https://support.huaweicloud.com/devg-cci2/zh-cn_image_0000002484567561.png "点击放大")
   
 
 #### 认证与鉴权
使用Terraform管理云容器实例资源前，您需要获取AK（Access Key）/SK（Secret Key），并在Terraform上进行配置，从而认证鉴权。
您可以使用静态凭据或环境变量两种方式配置Terraform。
使用静态凭据的认证方式比较简单，但需要将AK/SK以明文的形式存储在配置文件中，存在密钥泄露的安全隐患。推荐您使用环境变量的方式进行认证。
- 静态凭据（Static credentials）
  ```
  provider "huaweicloud" {
    region      = "cn-north-4"
    access_key  = "my-access-key"
    secret_key = "my-secret-key"
  }
  ```
  region：区域，急需要创建管理那个区域的资源。您可以[单击此处](https://console.huaweicloud.com/apiexplorer/#/endpoint)查询华为云支持的区域。
  access_key：密钥ID，即AK。查询方法请参见[访问密钥](https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html)。
  secret_key：访问密钥，即SK。查询方法请参见[访问密钥](https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html)。
  
- 环境变量（Environment variables） 将region、AK/SK等参数设置为环境变量的方式进行认证。
  ```
  export HW_REGION_NAME="cn-north-4"
  export HW_ACCESS_KEY="my-access-key"
  export HW_SECRET_KEY="my-secret-key"
  ```
  HW_REGION_NAME：区域，即需要创建管理那个区域的资源。您可以[单击此处](https://console.huaweicloud.com/apiexplorer/#/endpoint)查询华为云支持的区域。
  HW_ACCESS_KEY：密钥ID，即AK。查询方法请参见[访问密钥](https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html)。
  HW_SECRET_KEY：访问密钥，即SK。查询方法请参见[访问密钥](https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html)。
  
 
#### 初始化工作目录
1. 创建一个工作目录。
   ```
   mkdir test
   ```
   

2. 在工作目录下创建"versions.tf"文件，指定华为云Provider的registry源和版本，文件内容如下：
   ```
   terraform {
     required_providers {
       huaweicloud = {
         source = "huaweicloud/huaweicloud"
         version = ">=1.xx.xx" # 待加载provider的版本，可通过`=`指定需要加载的版本，通过`>=`指定需要加载的最小provider版本，优先加载最新版本。
       }
     }
   }
   ```
   ![](https://support.huaweicloud.com/devg-cci2/public_sys-resources/note_3.0-zh-cn.png)
   华为云Provider版本信息查询请参考【[华为云 provider](https://github.com/huaweicloud/terraform-provider-huaweicloud/releases)】。
   

3. 创建"main.tf"文件，配置华为云Provider，文件内容如下：
   ```
   # Configure the HuaweiCloud Provider
   provider "huaweicloud" {
     region      = "cn-north-4"
     access_key  = "my-access-key"
     secret_key  = "my-secret-key"
   }
   ```
   示例内容为HuaweiCloud Provider的配置，包含认证鉴权的内容，请根据[认证与鉴权]配置相关参数；如果使用环境变量方式认证鉴权，可以省略该部分内容。
   
4. 执行如下命令初始化。
   ```
   terraform init
   ```
   回显如下，首次执行时会下载HuaweiCloud Provider并安装。
   ![](https://support.huaweicloud.com/devg-cci2/zh-cn_image_0000002368406388.png "点击放大")
   后续若需修改文件"versions.tf"或者"main.tf"文件配置信息，可通过如下命令进行升级。
   ```
   terraform init -upgrade
   ```
   ![](https://support.huaweicloud.com/devg-cci2/public_sys-resources/caution_3.0-zh-cn.png)
   正常情况下，通过terraform init命令将华为云provider下载到工作目录下。对于国内用户来说，该命令会消耗较长时间甚至失败。
   您可以手工下载华为云provider至本地目录，然后搭建本地registry并修改terraform块中的required_providers配置，详情请参考：[常见问题]
   
 
 #### 常见问题
**如何加速下载华为云provider**？
正常情况下，通过terraform init命令将华为云provider下载到工作目录下。对于国内用户来说，该命令会消耗较长时间甚至失败。
可以手工下载华为云provider至本地目录，然后搭建本地registry并修改 terraform块中的required_providers配置。操作步骤如下：
1. 下载[华为云 provider](https://github.com/huaweicloud/terraform-provider-huaweicloud/releases)至本地目录，选择对应的版本号和操作系统进行下载。
2. 搭建本地registry，将下载后的华为云provider解压至如下目录： 
   - Linux：\~/.terraform.d/plugins/\<local-registry\>/\<organization\>/huaweicloud/\<version\>/\<os_arch\>
   
   - Windows：%APPDATA%\\terraform.d\\plugins\\\<local registry\>\\\<organization\>\\huaweicloud\\\<version\>\\\<os_arch\>
   
   
   示例：
   ```
   # Linux
   ~/.terraform.d/plugins/local-registry/huaweicloud/huaweicloud/1.20.0/linux_amd64  
   # Windows
   C:\Users\Administrator\AppData\Roaming\terraform.d\plugins\local-registry\huaweicloud\huaweicloud\1.20.0\windows_amd64
   ```
   
   
3. 修改 terraform.required_providers.huaweicloud.source，取值为： 
   ```
   terraform {
       required_version = ">= 0.13"
       required_providers {
        huaweicloud = {
          source  = "local-registry/huaweicloud/huaweicloud"
          version = ">= 1.20.0"
      }
     }
    }
   ```
   
   
4. 在工作目录下执行 terraform init 命令。
 
