前言
AWS 的官方课程有提到这些基础结构即代码工具,恰巧部署博客评论代码 Twikoo 时也需要用到,于是在这里记录下配置过程。
关于 Terraform 的介绍:什么是 Terraform?
一言以蔽之,它可以让你通过写代码和配置来部署云服务提供商的资源,你也可以直接拷贝开源项目推荐的云服务部署模板,这对自动化和迁移来说极为便利。
方案概述
AWS 官方提供的文档:开始使用 Terraform 产品
- 安装 Terraform(MacOS 平台)
- 前往 AWS 控制台获取 Access Key 和 Secret Key
- 配置 AWS 云服务提供商
- 测试部署一个 VPC 网络资源
操作步骤
一、安装 Terraform(MacOS 平台)
参考:Install Terraform
我这里是 Mac,使用 brew 安装:
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
如果出现了
Error: Your Command Line Tools are too outdated.错误:Error: Your Command Line Tools are too outdated. Update them from Software Update in System Settings.则需要更新
Xcode Command Line Tools,前往https://developer.apple.com/download/more/下载最新的对应自己 Xcode 版本的Command Line Tools安装即可,我这里是Command Line Tools for Xcode 16。
确认安装成功:
terraform -v

二、前往 AWS 控制台获取 Access Key 和 Secret Key
AWS IAM 控制台(us-west-2 区域):IAM 控制台
这里不为根用户生产密钥,而是为 Terraform 创建一个新的用户 terraform,并给予 AdministratorAccess 权限。
1、创建新的用户



2、为 terraform 用户创建 Access Key 和 Secret Key
点击用户信息,可以看到右侧有 创建访问密钥 的链接:

选择 其他:

之后创建访问密钥即可,密钥大概是这样的:
AKIA5J2Z5J2Z5J2Z5J2Z
cpt_jqc7TUG6mtg1avjzce*quq4BXQ8gec
三、配置 AWS 云服务提供商
参考:AWS Provider
Terraform 是以目录(项目)为单位的。我们需要新建一个项目专用的目录,之后在其中创建配置文件。在初始化后,云服务提供商的资源将会存在于这个目录下。
这里新建一个目录 terraform_aws_test,并在其中创建一个 main.tf 文件,用于配置 AWS 云服务提供商:
mkdir terraform_aws_test
cd terraform_aws_test
touch main.tf
main.tf 文件内容如下,不填入真实的 Access Key 和 Secret Key 暂时也没有关系:
provider "aws" {
region = "us-west-2"
access_key = "my-access-key"
secret_key = "my-secret-key"
}
之后初始化一下,Terraform 默认会记载当前目录下的配置文件:
terraform init

之后在目录中,可以看到下载了 AWS Provider 相关的资源:

四、测试部署一个 VPC 网络资源
在刚刚我们创建的目录中,稍微修改下 main.tf 文件,添加上 Access Key 和 Secret Key,然后再创建一个 VPC 网络资源:
# Configure the AWS Provider
provider "aws" {
region = "us-west-2"
access_key = "AKIA5J2Z5J2Z5J2Z5J2Z"
secret_key = "cpt_jqc7TUG6mtg1avjzce*quq4BXQ8gec"
}
# Create a VPC
resource "aws_vpc" "example" {
cidr_block = "10.0.0.0/16"
}
之后执行 terraform apply,会提示你输入 yes 确认,然后就会开始部署资源了:
terraform apply

回到 AWS 控制台,可以看到我们刚刚创建的 VPC 网络资源:

当然这种将 Access Key 和 Secret Key 直接写入配置文件的方式绝对不是最佳实践,更多的时候我们会使用环境变量或者其他方式来配置这些敏感信息,详细可以参考:Input Variables
参考资料:
