让我们首次尝试使用Terraform进行基础架构建设
这篇文章的目标
在这篇文章中,我们将使用Terraform在AWS上创建VPC资源。
本文的目标读者
-
- インフラのコード化(Infrastructure as Code)がどんなものか体験したい方
-
- Terraformをはじめて触る方
-
- AWSを触ったことがある方
- コンソールの操作ができる方
Terraform是什么?
Terraform是HashiCorp所提供的工具,用于自动化云端基础设施的构建。
使用Terraform,可以通过编写代码来进行以前需要在屏幕上手动点击的云基础设施构建工作。
由于Terraform不是特定云厂商的产品,因此可以在多个云服务上使用。
有什么好处? ?)
使用Terraform可以获得以下优点。
-
- インフラの構築作業が自動化され、効率的に行うことができる。
-
- インフラ構築手順書の作成・更新作業が低減される。
- Gitを利用することでインフラ構成のバージョン管理が行えるようになる。
环境
-
- macOS: v11.2.3
-
- Python: v3.9.5
-
- terraform: v1.0.0
- aws-cli: v2.2.16
安装设置
AWS IAM是亚马逊云服务中的身份和访问管理工具。
创建用户组
访问AWS IAM,并创建一个组。
请输入组名为hello_terraform_group,并向权限中添加AmazonEC2FullAccess和AmazonS3FullAccess,然后点击创建组。
创建用户
点击下一步。
用户已创建。
请记下显示在屏幕上的访问ID和秘密访问密钥的值,以备后续AWS CLI的设置使用。
亚马逊网路服务命令行工具 (AWS CLI)
安装AWS CLI
使用以下命令安装AWS CLI。
$ pip3 install awscli --upgrade
安装完成后,请使用以下命令确认版本。
$ aws --version
在AWS CLI中进行访问ID和密钥的设置。
执行以下命令,并添加先前获取的IAM用户的访问ID和秘密访问密钥。
$ aws configure
AWS Access Key ID [None]: # AWSのアクセスIDを入力
AWS Secret Access Key [None]: # AWSのシークレットアクセスキーを入力
Default region name [None]: ap-northeast-1
Default output format [None]: json
如需确认AWS CLI的配置内容,请运行aws configure list命令。执行该命令后,将显示配置值。
$ aws configure list
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ******************** shared-credentials-file
secret_key ******************** shared-credentials-file
region ap-northeast-1 config-file ~/.aws/config
Git秘密信息检查
为了防止AWS密钥泄露,我们将安装git-secrets。
$ brew install git-secrets
我要在Git中添加设置。
$ git secrets --register-aws --global
$ git secrets --install - /.git-templates/git-secrets
$ git config --global init.templatedir '~/.git-templates/git-secrets'
逆转地貌
tfenv(Terraform环境管理工具)
tfenv是一个用于管理terraform版本的软件。
通过安装tfenv,可以实现多个版本之间的切换。
请执行以下命令并进行安装。
$brew install tfenv
$ tfenv --version
tfenv 2.2.2
演进
进行Terraform安装。
执行list-remote命令,确认可安装的Terraform版本。
$ tfenv list-remote
1.1.0-alpha20210630
1.1.0-alpha20210616
1.0.2
1.0.1
1.0.0
0.15.5
#...
请从列表中选择要安装的版本并进行安装。
$ tfenv install 1.0.2
切换至所需版本的方法是使用“use”命令。
$ tfenv use 1.0.2
您可以使用list指令来确认当前选择的版本。
$ tfenv list
* 1.0.0 (set by /tfenv/2.2.2/version)
以上是设置工作的完成。
创建资源
创建tf文件
请创建一个适当的工作文件夹,并在文件夹下方创建一个名为 “main.tf” 的文件。
resource "aws_vpc" "hello" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
tags = {
Name = "hello"
}
}
Terraform使用HCL(HashiCorp Configuration Language)语言编写。
上述代码表示将创建名为hello的VPC网络,其范围为10.0.0.0/16。
开始
如果能成功创建tf文件,可以使用init命令进行初始化。
如果显示为”成功初始化!”,则表示初始化成功。
$ terraform init
Initializing the backend...
Initializing provider plugins...
# ...
Terraform has been successfully initialized!
计划 (jì huà)
接下来执行plan命令。
通过执行plan命令,可以在向AWS添加资源之前确认其内容。
$ terraform plan
Enter a value: ap-northeast-1
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
# ...
请确认工作内容是否有问题。
申请
执行apply命令,并进行资源添加。
执行命令后,将在AWS上开始进行资源添加处理。
$ terraform apply
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
# ...
aws_vpc.hello: Creating...
aws_vpc.hello: Creation complete after 3s [id=vpc-***********************]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
如果显示为“申请完成”,则表示资源已成功添加。
确认
我们可以在AWS网站上确认指定的VPC资源是否已经添加。
请在浏览器中打开AWS的VPC选项。
您可以在屏幕上确认已添加了名为hello的VPC资源。
删除资源
摧毁
让我们尝试删除最新添加的VPC资源。
如果要删除资源,请执行destroy命令。
$ terraform destroy
# ...
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
# ...
aws_s3_bucket.test: Destroying... [id=test-dtakkiy]
aws_s3_bucket.test: Destruction complete after 0s
aws_vpc.hello: Destruction complete after 0s
Destroy complete! Resources: 2 destroyed.
如果显示为“Destroy complete!”,则表示删除成功。
请在AWS控制台上确认VPC资源是否已被删除。
最后
如果你想更加详细地了解Terraform,请参考Terraform的文档。