
# 使用Terraform创建函数
Terraforms是一款开源工具，用于安全有效地构建、更改和版本控制基础设施。用户能够通过这些配置文件声明所需的基础设施最终状态，而不需要具体指定如何实现这个状态。
Terraform的优势：
- 提升架构一致性：减少手动配置过程中的错误和配置漂移。
- 降低运维成本：通过编程方式管理虚拟机，减少手动配置硬件及更新的需求。
- 提升操作效率：简化系统配置、维护和管理，加速软件开发和部署。
- 加快部署速度：将繁琐的配置工作转变为简单的脚本执行，缩短应用发布时间。
- 降低操作风险：支持版本控制，降低配置错误的风险。
本章节将指导开发者如何使用Terraform创建函数，方便开发者高效地创建函数资源。
#### 前提条件
**已获取访问密钥**
获取访问密钥方式请参考[访问密钥](https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html)。**建议使用安全性更高的临时访问密钥（Access Key ID、Secret Access Key、Token），详情请参考[临时访问密钥（企业联邦用户）](https://support.huaweicloud.com/usermanual-ca/ca_01_0005.html)，具体使用请参考[获取用户的临时访问密钥和securitytoken](https://support.huaweicloud.com/api-iam/iam_04_0002.html)。**
#### 准备Terraform环境
- 安装Terraform执行环境。 Terraform提供了多种环境的安装包，具体可以参考[Terraform官网](https://developer.hashicorp.com/terraform/downloads)。
  下面以Linux CentOS（系统需要有访问公网权限）为例指导安装Terraform。
  使用root用户登录系统，新建目录/home/Terraform，**在Terraform目录**执行如下命令：
  ```
  sudo yum install -y yum-utils
  sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
  sudo yum -y install terraform
  ```
  
- 了解基本Terraform命令。 执行Terraform后会显示Terraform命令详情，查看更多命令详情请参考[Terraform CLI](https://developer.hashicorp.com/terraform/cli)。
  
- 了解基础Terraform语法。 Terraform配置语言主要基于HCL语法，具有配置简单、可读性强等特点，并且兼容JSON语法。详情参见[Terraform官网](https://developer.hashicorp.com/terraform/language)介绍。
  
 
#### 编写函数资源脚本
华为云在Terraform已经注册了provider，函数作为资源挂在华为云的provider下，可参考文档[huaweicloud_fgs_function](https://registry.terraform.io/providers/huaweicloud/huaweicloud/latest/docs/resources/fgs_function)。
提供如下样例：
在服务器创建一个main.tf文件，将如下脚本拷贝到main.tf上并保存。
以下脚本用于在华为云函数工作流服务上创建一个空白的Python函数。
```
terraform {
  required_providers {
    huaweicloud = {
      source  = "huaweicloud/huaweicloud"
      version = ">= 1.40.0"
    }
  }
}
 
provider "huaweicloud" {
  region     = "cn-east-3" #实际的区域
  access_key = "*******"  #替换为获取的临时AK
  secret_key = "*******" #替换为获取的临时SK
  security_token = "*******" #替换为获取的临时Token
}
 
resource "huaweicloud_fgs_function" "fgs_function" {
  name        = "test_func_rf"
  app         = "default"
  agency      = "function-admin"
  description = "function test"
  handler     = "index.handler"
  memory_size = 128
  timeout     = 3
  runtime     = "Python3.6"
  code_type   = "inline"
  func_code   = "aW1wb3J0IGpzb24KZGVmIGhhbmRsZXIgKGV2ZW50LCBjb250ZXh0KToKICAgIG91dHB1dCA9ICdIZWxsbyBtZXNzYWdlOiAnICsganNvbi5kdW1wcyhldmVudCkKICAgIHJldHVybiBvdXRwdXQ="
}
```
#### 使用Terraform命令创建函数
1. 进入已创建的文件路径，执行以下命令初始化一个包含Terraform代码的工作目录。
   ```
   terraform init
   ```
   ![](https://support.huaweicloud.com/usermanual-functiongraph/zh-cn_image_0000002085360528.png "点击放大")
   
2. 执行以下命令，将基础设施配置应用到函数。在Enter a value: 处输入"yes"。
   ```
   terraform apply
   ```
   ![](https://support.huaweicloud.com/usermanual-functiongraph/zh-cn_image_0000002121119933.png "点击放大")
   
3. 执行成功代表函数创建完成。
 
