【准备・导入篇】Terraform官方教程【翻译】

這是Terraform公式教學的日文翻譯版。
這是一個可以在實際操作中學習的教學。
【導入和準備章節】將主要介紹Terraform是什麼,以及Terraform的安裝方法。
【AWS章節】在這裡。

 

非常感谢HashiCorp的教育团队同意转载翻译。

Get Started – AWS | Terraform – HashiCorp Learn1

Install Terraform | Terraform | HashiCorp Developer

此外,当您注册HashiCorp Learn后,您将可以在仪表板上查看教程的进度等信息。
点击此处注册。登录 – HashiCorp Learn
请注意,HashiCorp目前没有计划进行文档本地化。

通过Terraform实现的基础设施即代码(IaC)是什么?2

Terraform Video

使用IaC工具,可以使用配置文件而非GUI来管理基础设施。通过使用IaC设置资源,可以以安全、一致性和可重复性的方式构建、更改和管理基础设施。此外,可以对这些资源的配置进行版本控制,并且可以重新使用和共享。

Terraform是HashiCorp开发的基础设施即代码(IaC)工具。通过使用Terraform,您可以使用易于阅读和声明性的配置文件来定义资源和基础设施。此外,还可以管理基础设施的生命周期。相比手动管理基础设施,Terraform具有优势。

    • Terraformは複数のクラウド・プラットフォームで利用可能です。

 

    • 設定言語は可読性が高いく、コードを手早く編集するのに便利です。

 

    • Terraformの状態管理システムによって、開発中にリソースの変更を追跡することができます。

 

    バージョン・コントロール・システムに構成をコミットして、安全に共同でインフラを管理することができます。

所有基础设施的管理

使用名为Terraform的插件,即所谓的提供者,可以通过应用程序编程接口(API)与云平台和其他服务进行互动。HashiCorp和Terraform社区已经创建了1000多个提供者,使得可以在各种平台上管理资源。例如,支持的平台包括AWS(亚马逊网络服务)、Azure、GCP(谷歌云平台)、Kubernetes、Helm、GitHub、Splunk和DataDog等。如果要查找当前正在使用的平台或服务的提供者,请尝试在Terraform注册表中查找。如果找不到,也可以自己创建。

标准化开发工作流程

供应商定义了基础设施的各个单元,例如计算实例或私有网络作为资源。您可以从不同的供应商创建资源,并将其转换为可重复使用的Terraform配置。这个配置被称为模块,可以通过一致的配置语言和工作流程进行管理。

assets.png

在 Terraform 中,我们将按照以下步骤部署基础设施。

    • Scope – プロジェクトで使用するインフラを決めます。

 

    • Author – インフラの構成を書きます。

 

    • Initialize – Terraformがインフラを管理するのに必要なプラグインをインストールします。

 

    • Plan – 作成した構成に則ってTerraformが加える変更を確認します。

 

    Apply – 変更を適用します。

基础设施追踪

Terraform使用状态文件跟踪实际基础架构。状态文件扮演一个记录建立环境准确信息的角色。Terraform利用状态文件来确定对基础架构进行哪些更改,并使得建立的配置与基础架构保持一致。

共同開發 fā)

在Terraform中,您可以使用远程后端共同管理基础设施。通过使用免费的Terraform Cloud,最多可容纳5人,您可以在团队中安全地共享状态,提供一个稳定可靠的Terraform启动环境,并避免多人同时编辑配置时的冲突。

此外,还可以将Terraform Cloud与诸如GitHub或GitLab等版本控制系统(VCS)连接起来。这样一来,当提交配置更改时,就可以自动通知基础架构的变更点。这样一来,我们就能够像我们通常在应用程序开发中所做的那样,对基础架构的变更进行版本管理。

快速入门

让我们在托管的终端上使用Terraform创建和删除Docker容器。

启动终端

在这个教程中,你可以在命令行上以交互式的方式免费尝试操作。这样可以帮助你理解实际的云基础设施。

可以在原来的页面上,通过浏览器启动终端并实际运行来确认本章的内容。

用Terraform构建Docker

让我们打开 “Code Editor” 选项卡中的 main.tf 文件。
复制并粘贴以下设置。点击编辑器顶部文件名旁边的图标以保存更改。

terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = "~> 2.15.0"
    }
  }
}

provider "docker" {}

resource "docker_image" "nginx" {
  name         = "nginx:latest"
  keep_locally = false
}

resource "docker_container" "nginx" {
  image = docker_image.nginx.latest
  name  = "tutorial"
  ports {
    internal = 80
    external = 8000
  }
}

在”终端”标签页中初始化项目。一旦初始化,Terraform将会下载与Docker交互所需插件,以使其能够与Docker进行通信。

$ terraform init

让我们使用apply来设置NGINX服务器容器。如果出现确认消息,请输入”yes”并按下回车键。

$ terraform apply

确认NGINX实例

运行 “docker ps” 命令,使用 Terraform 确认 NGINX 容器正在 Docker 中启动。

$ docker ps

删除资源

为了停止容器并删除在本教程中创建的资源,请执行terraform destroy。当确认消息出现时,请输入“yes”并按下回车键。

$ terraform destroy

我們已經成功地使用Terraform設定和刪除了NGINX網頁伺服器。

下一步 (xià yí bù)

我已经解释了IaC和Terraform的核心概念。现在你应该能够自己编写基础设施的配置了。

让我们继续下一个教程,在本地机器上安装Terraform并部署Docker容器。



Terraform的安装

Terraform Video

Terraform的安装

手動安装
可以通过下载编译好的二进制文件或从源代码编译来获取Terraform二进制文件。
编译好的二进制文件
要安装Terraform,找到适合您系统的软件包,并以ZIP文件形式下载。
下载完成后,解压软件包。Terraform以terraform文件名作为单一二进制文件运行。可以删除软件包中的其他文件,对Terraform的功能没有影响。即使没有这些文件,Terraform仍然能正常运行。从源代码编译
要从源代码编译Terraform二进制文件,需要克隆HashiCorp的Terraform存储库。
$ git clone https://github.com/hashicorp/terraform.git

进入克隆生成的目录。
$ cd terraform

然后开始编译二进制文件。该命令会将编译后的二进制文件保存在$GOPATH/bin/terraform中。
$ go install

检查是否已将terraform添加到了PATH环境变量中。不同的操作系统有不同的路径设置方法。
Mac/Linux
显示由冒号分隔的路径列表。
$ echo $PATH

将Terraform二进制文件移动到上述路径中的某个位置。以下命令假设您的下载文件夹中有已创建的二进制文件,并且/usr/local/bin已包含在PATH中。如果实际情况不同,请相应地修改命令。
$ mv ~/Downloads/terraform /usr/local/bin/

有关如何将二进制文件添加到PATH的详细信息,请参考这篇Stack Overflow文章。

Windows
这篇Stack Overflow文章描述了在Windows上通过图形用户界面设置PATH的方法。


在OS X上自制安装
Homebrew是Mac OS X的免费且开源的软件包管理系统。让我们从终端安装官方的Terraform公式。
首先,安装包含HashiCorp所有Homebrew软件包的HashiCorp源。
$ brew tap hashicorp/tap然后在hashicorp/tap/terraform中安装Terraform。
$ brew install hashicorp/tap/terraform

这样就安装了签名的二进制文件,并且将自动更新到每个官方发布的最新版本。

要升级到最新版本的Terraform,首先更新Homebrew。
$ brew update

然后执行upgrade命令,下载并使用最新版本的Terraform。
$ brew upgrade hashicorp/tap/terraform
==> 正在升级1个过时的软件包:
hashicorp/tap/terraform 0.15.3 -> 1.0.0
==> 升级hashicorp/tap/terraform 0.15.3 -> 1.0.0


在Windows上安装Chocolatey
Chocolatey是Windows的免费开源软件包管理系统。让我们通过命令行安装Terraform软件包。
$ choco install terraformChocolatey和Chocolatey的Terraform软件包并非由HashiCorp直接管理。您可以随时手动安装最新版本的Terraform。


在Linux上安装
HashiCorp官方签名和管理了以下Linux发行版。
Ubuntu/Debian
请确保系统已更新,并检查是否已安装gnupg、software-properties-common和curl。这些软件包用于验证HashiCorp的GPG签名并安装HashiCorp的Debian软件包。
$ sudo apt-get update && sudo apt-get install -y gnupg software-properties-common安装HashiCorp的GPG密钥。
$ wget -O- https://apt.releases.hashicorp.com/gpg | \
gpg –dearmor | \
sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg

验证密钥的指纹。
$ gpg –no-default-keyring \
–keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg \
–fingerprint

gpg命令将输出GPG密钥的指纹。
/usr/share/keyrings/hashicorp-archive-keyring.gpg
————————————————-
pub rsa4096 2020-05-07 [SC]
E8A0 32E0 94D8 EB4E A189 D270 DA41 8C88 A321 9F7B
uid [ unknown] HashiCorp Security (HashiCorp Package Signing) <security+packaging@hashicorp.com>
sub rsa4096 2020-05-07 [E]

请务必确保指纹为E8A0 32E0 94D8 EB4E A189 D270 DA41 8C88 A321 9F7B。您还可以根据Security at HashiCorp的Linux Package Checksum Verification验证GPG密钥。
添加HashiCorp的官方存储库到系统中。运行lsb_release -cs,将输出您当前系统使用的发行版发布代码名称,例如buster、groovy或sid。
$ echo “deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
https://apt.releases.hashicorp.com $(lsb_release -cs) main” | \
sudo tee /etc/apt/sources.list.d/hashicorp.list

下载软件包信息 from HashiCorp。
$ sudo apt update

从新的存储库中安装Terraform。
$ sudo apt-get install terraform

由于已添加了HashiCorp的存储库,因此您现在可以使用相同的命令安装Vault、Consul、Nomad和Packer。

CentOS/RHEL
安装yum-config-manager以管理存储库。
$ sudo yum install -y yum-utils

使用yum-config-manager添加HashiCorp的官方Linux存储库。
$ sudo yum-config-manager –add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo

从新的存储库中安装Terraform。
$ sudo yum -y install terraform

由于已添加了HashiCorp的存储库,因此您现在可以使用相同的命令安装Vault、Consul、Nomad和Packer。

Fedora
安装dnf config-manager以管理存储库。
$ sudo dnf install -y dnf-plugins-core

使用dnf config-manager添加HashiCorp的官方Linux存储库。
$ sudo dnf config-manager –add-repo https://rpm.releases.hashicorp.com/fedora/hashicorp.repo

从新的存储库中安装Terraform。
$ sudo dnf -y install terraform

由于已添加了HashiCorp的存储库,因此您现在可以使用相同的命令安装Vault、Consul、Nomad和Packer。

Amazon Linux
安装yum-config-manager以管理存储库。
$ sudo yum install -y yum-utils

使用yum-config-manager添加HashiCorp的官方Linux存储库。
$ sudo yum-config-manager –add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo

从新的存储库中安装Terraform。
$ sudo yum -y install terraform

由于已添加了HashiCorp的存储库,因此您现在可以使用相同的命令安装Vault、Consul、Nomad和Packer。

确认安装

我们打开一个新的终端,尝试显示Terraform子命令的列表,以确认安装是否成功。

$ terraform -help
Usage: terraform [-version] [-help] <command> [args]

The available commands for execution are listed below.
The most common, useful commands are shown first, followed by
less common or more advanced commands. If you're just getting
started with Terraform, stick with the common commands. For the
other commands, please read the help and docs before usage.
##...

在输入 terraform -help 后,您可以输入子命令来查看该子命令的详细信息和选项。

$ terraform -help plan

故障排除

如果遇到“找不到terraform”错误,请确认环境变量PATH的设置是否失败。请确保terraform安装目录已经包含在PATH中。

启用标签补完

在Bash和Zsh中,可以使用制表符来补全Terraform命令。要启用自动完成功能,请先确保配置文件已创建。

# Bash
$ touch ~/.bashrc

# Zsh
$ touch ~/.zshrc

接下来,让我们安装自动补全包。

$ terraform -install-autocomplete

安装后需要重新启动shell。

快速启动

既安裝 Terraform 後,在 Mac、Windows 或 Linux 上使用 Docker,您能夠在不到一分鐘的時間內設置 NGINX 伺服器。此外,您也可以從瀏覽器執行後續教程。

在Mac上下载Docker Desktop
在本地安装Terraform和Docker后,启动Docker Desktop
$ open -a Docker
请使用WSL2(Windows子系统Linux)来启动Windows 10上的Docker。在继续之前,请下载和安装WSL2。安装Docker Desktop for Windows。

在安装了Terraform和Docker之后,从开始菜单中搜索Docker。选择搜索结果中的Docker Desktop并启动它。当鲸鱼图标显示在状态栏中时,表示Docker Desktop正在运行,并可以通过终端访问。

有关在Windows上使用Docker Desktop的要求,请详细阅读Docker的文档。

在Linux上安装Docker引擎时,请按照教程的指示先进行发行版的安装。
如果在浏览器中无法成功安装Terraform或无法安装Docker,您可以通过浏览器运行此快速入门。

我们创建一个名为learn-terraform-docker-container的目录吧。

$ mkdir learn-terraform-docker-container

接下来,我们将进入刚创建的目录。

$ cd learn-terraform-docker-container

请将以下Terraform的设置保存为名为main.tf的文件。

terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = "~> 2.13.0"
    }
  }
}

provider "docker" {}

resource "docker_image" "nginx" {
  name         = "nginx:latest"
  keep_locally = false
}

resource "docker_container" "nginx" {
  image = docker_image.nginx.latest
  name  = "tutorial"
  ports {
    internal = 80
    external = 8000
  }
}
terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = ">= 2.13.0"
    }
  }
}

provider "docker" {
  host    = "npipe:////.//pipe//docker_engine"
}

resource "docker_image" "nginx" {
  name         = "nginx:latest"
  keep_locally = false
}

resource "docker_container" "nginx" {
  image = docker_image.nginx.latest
  name  = "tutorial"
  ports {
    internal = 80
    external = 8000
  }
}

初始化项目。一旦初始化,Terraform将会下载用于与Docker进行交互的插件。

$ terraform init

在应用程序上,设置NGINX服务器容器。当出现确认消息时,请输入”yes”并按下回车键。

$ terraform apply
assets.png
$ docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                    NAMES
425d5ee58619        e791337790a6              "nginx -g 'daemon of…"   20 seconds ago      Up 19 seconds       0.0.0.0:8000->80/tcp     tutorial

要停止容器,请执行terraform destroy命令。

$ terraform destroy

用Terraform可以设置并删除NGINX Web服务器。

下一步

接下来,我们将尝试在云端实际构建基础设施。

翻译注释:
截至2022年12月10日,以下是作为继续教程的选项(※为英文页面)。
亚马逊网络服务(AWS)、Azure、谷歌云平台(GCP)、甲骨文云平台(OCI)。

请点击这里查看后续的翻译。(将逐步增加)

    AWS

 

原始标题中提到了“AWS”,但【入门与准备篇】是适用于AWS以外的教程的(后面会提到)。另外,由于与原始网站界面的差异,某些部分无法完全按照原始网站的方式重现。请理解。此外,【○○篇】这个连载的标题是译者方便起见添加的。
本章适用于以下教程:AWS、Associate Tutorials(003)、OCI、GCP、Docker、Associate Tutorials(002)、Azure。除非特殊语境,否则将”infrastructure”全部翻译为”インフラ”。

当“configuration”表示设置的内容时,翻译为“構成”,表示设置本身时翻译为“設定”。

将链接更改为日语页面。原始链接为 https://docs.microsoft.com/en-us/windows/wsl/install-win10。

bannerAds