我试着用简单易懂的方式总结了一下 Terraform 对于基础设施不熟悉的人来说
我试着简单地概括给那些完全不了解基础设施和Terraform的人。这里将以云基础设施(特别是GCP)为例进行解释。
概述
-
- AWSやGCPのようなクラウドインフラはコンソール画面からボタンをポチポチして扱うサービスを管理したり設定値を変更することができます
-
- しかしそれだと下記のような問題点があります
「いつ、誰が、どのような設定を変更したのか」が把握できない
新しい環境(ステージング環境など)を作成する際に、コンソール画面から手動で同じ手順を踏まないといけない
ドキュメントが更新されていないと既存のインフラの環境を把握が困難
terraform を使えばインフラの設定をコードで管理することができます。それにより下記のようなメリットがあります。
コードで管理できるので変更の履歴を確認できる
1つ環境を作ってしまえば他の環境にも設定を使いまわせる(手動でポチポチしなくてもいい)
コードが読めれば既存のインフラの環境を把握できる
“terraform是什么”
-
- HashiCorp社によって開発されたOSSで、IaCツールの1つである。
-
- IaCツールとは、Infrastructure as Codeの1つで、AWSやGCPなどクラウドなどシステム開発に必要なインフラを、コードを記述することにより自動で構築できる。
- つまりインフラも開発と同様にコードで管理することができます
用代码来管理基础设施是什么意思?
因为我觉得很难形成一个清晰的印象,所以让我们来看一下如何进行管理。Terraform 使用一种名为HashiCorp Configuration Language (HCL) 的专门语言来编写配置文件。
可以通过以下步骤来使用terraform管理GCP项目的配置。
1. 供应商配置(选择使用哪个云服务提供商)
首先告知使用Terraform来使用GCP,并指定认证信息。
provider "google" {
credentials = file("<PATH_TO_YOUR_SERVICE_ACCOUNT_KEY_JSON>")
project = "<YOUR_PROJECT_ID>"
region = "us-central1"
}
2. 资源的定义及使用
接下来我们将编写使用的资源定义。在这里,我们将创建GCE虚拟机实例。
resource "google_compute_instance" "default" {
name = "terraform-instance"
machine_type = "n1-standard-1"
boot_disk {
initialize_params {
image = "debian-cloud/debian-9"
}
}
network_interface {
network = "default"
access_config {
// 外部IPを持つように設定
}
}
}
在上述代码中,使用n1-standard-1机型和debian-9镜像,创建了一个名为terraform-instance的虚拟机实例。
3. 基础设施的应用 de
执行以下命令,计划并实际创建资源来更改基础设施。
terraform init # プロジェクトの初期化
terraform plan # 変更の確認
terraform apply # インフラの変更の適用
使用Terraform的好处
以下是我个人尝试使用Terraform后感受到的好处:
1. 我感觉到基础设施变得越来越贴近生活。
日常工作中,我经常写代码进行开发,对于基础架构方面并不太了解。对于AWS和GCP,我以为只需在控制台上点点鼠标就能进行构建,但实际上通过代码管理,我才能理解“当前项目的基础架构是这样的”。虽然通过基础架构图可以直观地了解,但若图表过时或者无法理解具体的设置值,仅仅依靠图表无法深入理解,因此通过追踪代码,我能够更详细地理解。
2. 可以立即准备新的环境
当我们在开发新功能时,我觉得如果能够使用另一个项目作为演示环境的话,会非常方便。这样我们就可以根据已定义的代码一致地部署基础设施,从而简化了新环境的设置、测试环境和演示环境的准备。
3. 管理基础设施的改变更容易掌控。
只使用控制台界面来管理基础设施的话,就无法了解“谁在何时进行了什么样的更改”。Terraform的代码可以像Git一样使用版本控制系统进行管理,因此可以追踪变更历史。这使得我们能够确认每个变更是在何时由谁进行的。此外,通过使用Terraform的plan命令,我们可以在应用变更之前预测这些变更将带来什么影响。
请提供更多上下文信息