【準備・導入編】Terraform公式チュートリアル【翻訳】

Terraform公式チュートリアルの日本語訳です。
実際に動作を確認しながら学習できるチュートリアルです。
【導入・準備編】では、Terraformとは何か、および、Terraformのインストール方法をメインにお伝えします。
【AWS編】はこちら

https://qiita.com/NI57721/items/9c686647863a4d93cbde


翻訳の掲載をご快諾くださった[HashiCorp](https://www.hashicorp.com/)のEducation Teamのみなさんありがとうございました。
原文はこちらです。
- [Get Started - AWS | Terraform - HashiCorp Learn](https://learn.hashicorp.com/collections/terraform/aws-get-started)[^1]
- [Install Terraform | Terraform | HashiCorp Developer](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)

また、HashiCorp Learnに登録するとチュートリアルの進捗などがダッシュボードで確認できるようになります。
登録はこちら。[Sign in - HashiCorp Learn](https://learn.hashicorp.com/sign-in)
※なお、HashiCorpでは当面の間ドキュメントのローカライゼーションの予定はないとのことです。

# TerraformによるIaCとは？[^2]
[![Terraform Video](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726727/6417422d-f48f-8067-c271-2ff7c0e5d9d6.png)](https://learn.hashicorp.com/tutorials/terraform/infrastructure-as-code?in=terraform%2Faws-get-started&amp;wvideo=mo76ckwvz4)

IaC(Infrastructure as Code)ツールを使うと、GUIではなく設定ファイルを用いてインフラ[^3]が管理できます。IaCでリソースを設定することで安全で一貫性があり再現可能な手順でインフラの構築・変更・管理ができるようになります。また、そのリソースの構成[^4]はバージョン管理したり、再利用、共有したりすることができます。

TerraformはHashiCorpのIaCツールです。Terraformを使えば、人に読みやすく、宣言的な設定ファイルによってリソースやインフラを定義できます。また、インフラのライフサイクルを管理することも可能です。Terraformには、手動でのインフラの管理に比べて優れている点があります。
- Terraformは複数のクラウド・プラットフォームで利用可能です。
- 設定言語は可読性が高いく、コードを手早く編集するのに便利です。
- Terraformの状態管理システムによって、開発中にリソースの変更を追跡することができます。
- バージョン・コントロール・システムに構成をコミットして、安全に共同でインフラを管理することができます。

## あらゆるインフラの管理
プロバイダーと呼ばれるTerraformのプラグインを使うと、API(Application Programming Interface)を通じてクラウドプラットフォームや他のサービスとインタラクティブにやりとりすることができます。HashiCorpとTerraformコミュニティーは今までに1,000以上のプロバイダーを作ってきました。そのお陰で様々なプラットフォームでリソースが管理できるようになりました。例えばプラットフォームには、AWS(Amazon Web Services)、Azure、GCP(Google Cloud Platform)、Kubernetes、Helm、GitHub、Splunk、DataDogなどがあります。現在利用しているプラットフォームやサービスのプロバイダーは[Terraform Registry](https://registry.terraform.io/browse/providers)で探してみてください。見つからなければ、自分で作ることもできます。

## 開発ワークフローの標準化
プロバイダーはインフラのそれぞれのユニットを定義します。例えば、リソースとしてのコンピュート・インスタンスやプライベート・ネットワークなどです。異なるプロバイダーからリソースを作成し、それを再利用可能なTerraformの構成にすることができます。この構成はモジュールと呼ばれ、一貫性のある設定言語とワークフローで管理することができます。

Terraformの設定言語は宣言的です。つまり、インフラの希望の最終状態を記述していきます。手続き型プログラミング言語が手順ごとにタスクを実行する命令を必要とするのとは対照的です。Terraformのプロバイダーは自動的にリソース間の依存関係を計算し、正しい順序でリソースの作成・削除をします。
![assets.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726727/fa6f7b30-d85e-92a6-b4af-844bfc5e8aee.png)

Terraformでは以下の手順でインフラをデプロイします。
- Scope - プロジェクトで使用するインフラを決めます。
- Author - インフラの構成を書きます。
- Initialize - Terraformがインフラを管理するのに必要なプラグインをインストールします。
- Plan - 作成した構成に則ってTerraformが加える変更を確認します。
- Apply - 変更を適用します。

## インフラの追跡
Terraformは実際のインフラを状態ファイルで追跡します。状態ファイルには、構築した環境の正確な情報であるという役割があります。Terraformは状態ファイルを使って、インフラにどのような変更を加えれば良いのかを決め、作成した構成とインフラを一致させます。

## 共同開発
Terraformでは、リモート・バックエンドでインフラを共同で管理することができます。5人まで無料のTerraform Cloudを使うと、チーム内でのセキュアな状態の共有や、Terraformが安定して起動する環境の提供、複数人で設定を編集する際の競合の回避ができます。

また、Terraform CloudをGitHubやGitLabといったVCS(Version Control System)に接続することもできます。そうすることで、構成の変更をコミットした時に自動でインフラの変更点を知らせることができます。これにより、我々が普段アプリケーション開発で行っているのと同じ具合で、インフラの変更をバージョン管理することができます。

## クイック・スタート
ホストされたターミナルでTerraformを使って、Dockerコンテナの構築と削除をしてみましょう。

### ターミナルの起動
このチュートリアルでは、無料で、インタラクティブにコマンドライン上で動作を試すことができます。それにより、実際のクラウドのインフラについて理解していくことができます。

:::note
訳注
この章の内容については、[元のページ](https://learn.hashicorp.com/tutorials/terraform/infrastructure-as-code?in=terraform/aws-get-started#quick-start)でブラウザからターミナルを起動し実際に動作を確認することができます。
:::

### TerraformでDockerの構築
"Coder Editor"タブにある`main.tf`を開きましょう。
以下の設定をコピー&ペーストします。エディター上部のファイル名の横にあるアイコンをクリックして変更を保存しましょう。

```terraform: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
  }
}
```

"Terminal"タブでプロジェクトを初期化します。初期化すると、TerraformがDockerとやりとりできるようにするためのプラグインがダウンロードされます。
```shell
$ terraform init
```

`apply`でNGINXサーバーのコンテナをセットアップしましょう。確認メッセージが出たら`yes`と入力しエンターキーを押下します。
```shell
$ terraform apply
```

### NGINXインスタンスを確認
`docker ps`を実行して、Terraformを使用しDockerでNGINXコンテナが起動していることを確認します。
```shell
$ docker ps
```

### リソースの削除
コンテナを停止しこのチュートリアルで作られたリソースを削除するために、`terraform destroy`を実行します。確認メッセージが出たら`yes`と入力しエンターキーを押下しましょう。
```shell
$ terraform destroy
```

これでNGINXウェブサーバーをTerraformでセットアップし削除することができました。

## 次のステップ
IaCとTerraformの中心的な概念について説明してきました。これで、インフラの構成を自分で書くことができようになったことでしょう。

次のチュートリアルに進んで、ローカルマシンにTerraformをインストールしてDockerコンテナをデプロイしてみましょう。

---

---

# Terraformのインストール

[![Terraform Video](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726727/a674e033-27f2-63ef-fce6-c94983cc0e55.png)](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli?wvideo=r3yytnk1pr)
Terraformを使うにはTerraformをインストールする必要があります。HashiCorpでは[バイナリ・パッケージ](https://developer.hashicorp.com/terraform/downloads)を配布していますし、主要なパッケージ・マネージャーでインストールすることもできます。

## Terraformのインストール
<details><summary>手動でインストール</summary>

コンパイル済みのバイナリをダウンロードするかソースからコンパイルして、`terraform`バイナリを取得します。

<details><summary>コンパイル済みのバイナリ</summary>

Terraformをインストールするには、使っているシステムに[適したパッケージ](https://developer.hashicorp.com/terraform/downloads)を見付け、ZIPファイルでダウンロードしましょう。

ダウンロードが終わったらパッケージを解凍します。Terraformは`terraform`というファイル名で、シングル・バイナリで起動します。パッケージ内の他のファイルは削除しても問題ありません。これらのファイルが無くてもTerraformは正常に機能します。
</details>

<details><summary>ソースからコンパイル</summary>

ソースからTerraformバイナリをコンパイルするには、[HashiCorpのTerraformリポジトリ](https://github.com/hashicorp/terraform)をcloneしましょう。
```shell
$ git clone https://github.com/hashicorp/terraform.git
```

クローンしてできたディレクトリに移動します。
```shell
$ cd terraform
```

次に、バイナリにコンパイルします。このコマンドはコンパイル後にバイナリを`$GOPATH/bin/terraform`に保存します。
```shell
$ go install
```
</details>

`terraform`に`PATH`が通っているか確認しましょう。`PATH`を通す手順はOSごとに異なります。

<details><summary>Mac/Linux</summary>

`:`で区切られたパスのリストを表示しましょう。
```shell
$ echo $PATH
```

Terraformバイナリを上のパスのどこかに移動します。以下のコマンドは作成したバイナリがダウンロード・フォルダーにあり、`PATH`に`/usr/local/bin`が含まれることを想定しています。実際の状況と異なる場合はコマンドを適宜修正しましょう。
```shell
$ mv ~/Downloads/terraform /usr/local/bin/
```

バイナリに`PATH`を通す方法について詳しくは[このStack Overflowの記事](https://stackoverflow.com/questions/14637979/how-to-permanently-set-path-on-linux)をご参照ください。
</details>

<details><summary>Windows</summary>

[このStack Overflowの記事](https://stackoverflow.com/questions/1618280/where-can-i-set-path-to-make-exe-on-windows)に、WindowsでUIからPATHを設定する方法が書いてあります。
</details>
</details>

---

<details><summary>Homebrew on OS Xでインストール</summary>

[Homebrew](https://brew.sh/)はMac OS X用のフリーかつオープンソースのパッケージ・マネージメント・システムです。ターミナルから公式の[Terraform formula](https://github.com/hashicorp/homebrew-tap)をインストールしましょう。

まず、HashiCorpの全てのHomebrewパッケージを含む、HashiCorp tapをインストールします。
```shell
$ brew tap hashicorp/tap
```

次に`hashicorp/tap/terraform`でTerraformをインストールします。
```shell
$ brew install hashicorp/tap/terraform
```

:::note warn
これにより署名済みバイナリがインストールされ、公式のリリースが作成されるごとに自動でアップデートされます。
:::

最新のバージョンのTerraformにアップデートするには、まずHomebrewをアップデートします。
```shell
$ brew update
```

次に`upgrade`コマンドを実行し、最新のバージョンのTerraformをダウンロードし使用します。
```
$ brew upgrade hashicorp/tap/terraform
==> Upgrading 1 outdated package:
hashicorp/tap/terraform 0.15.3 -> 1.0.0
==> Upgrading hashicorp/tap/terraform 0.15.3 -> 1.0.0
```
</details>

---

<details><summary>Chocolatey on Windowsでインストール</summary>

[Chocolatey](https://chocolatey.org/)はWindows用のフリーかつオープンソースのパッケージ・マネージメント・システムです。コマンドラインから[Terraformパッケージ](https://chocolatey.org/packages/terraform)をインストールしましょう。
```shell
$ choco install terraform
```

:::note warn
ChocolateyとChocolateyのTerraformパッケージはHashiCorpによって直接管理されているわけでありません。最新のバージョンのTerraformは常に手動でインストールすることにより利用可能です。
:::
</details>

---

<details><summary>Linuxでインストール</summary>

HashiCorpは次のLinuxディストリビューションに対して公式に署名し管理しています。

<details><summary>Ubuntu/Debian</summary>

システムが最新であるか確認し、更にgnupg、software-properties-common、curlがインストールされていることを確認してください。これらのパッケージはHashiCorpのGPGの署名を検証し、HashiCorpのDebianパッケージをインストールするのに使用します。
```shell
$ sudo apt-get update && sudo apt-get install -y gnupg software-properties-common
```

HashiCorpの[GPGキー](https://apt.releases.hashicorp.com/gpg)をインストールします。
```shell
$ wget -O- https://apt.releases.hashicorp.com/gpg | \
    gpg --dearmor | \
    sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
```

キーのフィンガープリントを検証します。
```shell
$ 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](https://www.hashicorp.com/security)で**Linux Package Checksum Verification**に則ってGPGキーを検証することもできます。

HashiCorpの公式リポジトリをシステムに追加しましょう。`lsb_release -cs`を実行すると、`buster`や`groovy`、`sid`といった、現在使っているシステムのディストリビューションのリリース・コードネームが出力されます。
```shell
$ 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
```

HashiCorpからパッケージ情報をダウンロードします。
```shell
$ sudo apt update
```

新しいリポジトリからTerraformをインストールしましょう。
```shell
$ sudo apt-get install terraform
```

:::note
HashiCorpのリポジトリが追加できたので、[Vault](https://learn.hashicorp.com/tutorials/vault/getting-started-install)や[Consul](https://learn.hashicorp.com/tutorials/consul/virtual-machine-gs-deploy)、[Nomad](https://learn.hashicorp.com/tutorials/nomad/get-started-install)、[Packer](https://learn.hashicorp.com/tutorials/packer/get-started-install-cli)も同じコマンドでインストールすることができるようになりました。
:::
</details>

<details><summary>CentOS/RHEL</summary>

リポジトリを管理するために`yum-config-manager`をインストールしましょう。
```shell
$ sudo yum install -y yum-utils
```

`yum-config-manager`を使い、HashiCorpの公式Linuxリポジトリを追加します。
```shell
$ sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
```

新しいリポジトリからTerraformをインストールしましょう。
```shell
$ sudo yum -y install terraform
```

:::note
HashiCorpのリポジトリが追加できたので、[Vault](https://learn.hashicorp.com/tutorials/vault/getting-started-install)や[Consul](https://learn.hashicorp.com/tutorials/consul/virtual-machine-gs-deploy)、[Nomad](https://learn.hashicorp.com/tutorials/nomad/get-started-install)、[Packer](https://learn.hashicorp.com/tutorials/packer/get-started-install-cli)も同じコマンドでインストールすることができるようになりました。
:::
</details>

<details><summary>Fedora</summary>

リポジトリを管理するために`dnf config-manager`をインストールしましょう。
```shell
$ sudo dnf install -y dnf-plugins-core
```

`dnf config-manager`を使い、HashiCorpの公式Linuxリポジトリを追加します。
```shell
$ sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/fedora/hashicorp.repo
```

新しいリポジトリからTerraformをインストールしましょう。
```shell
$ sudo dnf -y install terraform
```

:::note
HashiCorpのリポジトリが追加できたので、[Vault](https://learn.hashicorp.com/tutorials/vault/getting-started-install)や[Consul](https://learn.hashicorp.com/tutorials/consul/virtual-machine-gs-deploy)、[Nomad](https://learn.hashicorp.com/tutorials/nomad/get-started-install)、[Packer](https://learn.hashicorp.com/tutorials/packer/get-started-install-cli)も同じコマンドでインストールすることができるようになりました。
:::
</details>

<details><summary>Amazon Linux</summary>

リポジトリを管理するために`yum-config-manager`をインストールしましょう。
```shell
$ sudo yum install -y yum-utils
```

`yum-config-manager`を使い、HashiCorpの公式Linuxリポジトリを追加します。
```shell
$ sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
```

新しいリポジトリからTerraformをインストールしましょう。
```shell
$ sudo yum -y install terraform
```

:::note
HashiCorpのリポジトリが追加できたので、[Vault](https://learn.hashicorp.com/tutorials/vault/getting-started-install)や[Consul](https://learn.hashicorp.com/tutorials/consul/virtual-machine-gs-deploy)、[Nomad](https://learn.hashicorp.com/tutorials/nomad/get-started-install)、[Packer](https://learn.hashicorp.com/tutorials/packer/get-started-install-cli)も同じコマンドでインストールすることができるようになりました。
:::
</details>
</details>

## インストールの確認
新しくターミナルを開き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`の後にサブコマンドを入力すると、そのサブコマンドの詳細とオプションを調べることができます。
```shell
$ terraform -help plan
```

### トラブルシューティング
`terraform`が見付からないというエラーが発生した場合は、環境変数`PATH`の設定に失敗しています。Terraformがインストールされているディレクトリが`PATH`に含まれていることを確認してください。

### タブ補完の有効化
BashとZshではTerraformのコマンドをタブ補完することができます。オートコンプリートを有効化するには、まず設定ファイルが作成されていることを確認します。
```shell
# Bash
$ touch ~/.bashrc

# Zsh
$ touch ~/.zshrc
```

次にオートコンプリート・パッケージをインストールしましょう。
```shell
$ terraform -install-autocomplete
```

インストール後はシェルを再起動する必要があります。

## クイック・スタート
Terraformがインストールできたので、MacやWindows、Linux上で[Docker](https://www.docker.com/products/docker-desktop)を使用し、1分も掛からずにNGINXサーバーをセットアップすることができます。また、以降のチュートリアルはブラウザからも実行することができます。

<details><summary>Docker Desktop for Mac</summary>

[Docker Desktop for Mac](https://docs.docker.com/docker-for-mac/install/)をダウンロードします。

TerraformとDockerをローカルにインストールしたら、Docker Desktopを起動します。
```shell
$ open -a Docker
```
</details>

<details><summary>Docker Desktop for Windows</summary>

Windows 10でDockerを起動するにはWSL2(Windows Subsystem for Linux)を使用してください。次に進む前に[WSL2をダウンロードしインストール](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10)[^5]しましょう。

[Docker Desktop for Windows](https://docs.docker.com/docker-for-windows/install)をインストールします。

TerraformとDockerをローカルにインストールしたら、スタート・メニューからDockerを検索します。検索結果からDocker Desktopを選択し、Docker Desktopを起動します。クジラのアイコンがステータス・バーに表示されたら、Docker Desktopが稼働中でありターミナルからアクセス可能であるということです。

WindowsでのDocker Desktopの要件について詳しくは[Dockerのドキュメント](https://docs.docker.com/docker-for-windows/install/#start-docker-desktop)をご参照ください。
</details>

<details><summary>Docker Desktop for Linux</summary>

チュートリアルに従って、まずディストリビューションに[Dockerエンジンをインストール](https://docs.docker.com/engine/install/)しましょう。
</details>

<details><summary>ブラウザから</summary>

もしTerraformのインストールがうまくいかなかったりDockerがインストールできなかったりした場合は、ブラウザからこのクイック・スタートを実行することができます。

:::note
訳注
ブラウザからの実行に関する文章は、[前のチュートリアル](#TerraformでDockerの構築)と完全に同一であるため省略します。
:::
</details>

---

`learn-terraform-docker-container`という名前のディレクトリを作りましょう。
```shell
$ mkdir learn-terraform-docker-container
```

次に、今作ったディレクトリに移動します。
```shell
$ cd learn-terraform-docker-container
```

以下のTerraformの設定を`main.tf`という名前で保存しましょう。
```terraform:main.tf(Mac/Linuxの場合)
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:main.tf(Windowsの場合)
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とやりとりできるようにするためのプラグインがダウンロードされます。
```shell
$ terraform init
```

`apply`でNGINXサーバーのコンテナをセットアップします。確認メッセージが出たら`yes`と入力しエンターキーを押下しましょう。
```shell
$ terraform apply
```

NGINXコンテナができているか確認するために、ブラウザから[localhost:8000](http://localhost:8000/)にアクセスするか、`docker ps`を実行してNGINXコンテナを見てみましょう。
![assets.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726727/da07787e-511a-e33f-3902-c4f38caf448c.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`を実行します。
```shell
$ terraform destroy
```

これでNGINXウェブサーバーをTerraformでセットアップし削除することができました。

## 次のステップ
次は、クラウド上で実際にインフラを作ってみます。

:::note
訳注
2022年12月10日時点で、続くチュートリアルとして以下のものがあります。(※英語のページです)
[Amazon Web Services(AWS)](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/aws-build)、[Azure](https://developer.hashicorp.com/terraform/tutorials/azure-get-started/azure-build)、[Google Cloud Platform(GCP)](https://developer.hashicorp.com/terraform/tutorials/gcp-get-started/google-cloud-platform-build)、[Oracle Cloud Platform(OCI)](https://developer.hashicorp.com/terraform/tutorials/oci-get-started/oci-build)。
:::

続きの翻訳はこちらから。(順次増えていく予定です)
- AWS

https://qiita.com/NI57721/items/9c686647863a4d93cbde


[^1]: 原文のタイトルに「AWS」とありますが、【導入・準備編】はAWS以外のチュートリアルにも共通のものです(後述)。なお、元サイトとのUIの違いにより、どうしても元サイト通りに再現できていない箇所があります。ご了承ください。また、一連の記事のタイトルにある【○○編】は便宜上訳者が付けたものです。
[^2]: このチャプターは以下のチュートリアルに共通です。[AWS](https://developer.hashicorp.com/terraform/tutorials/aws-get-started)、[Associate Tutorials (003)](https://learn.hashicorp.com/collections/terraform/certification-associate-tutorials-003)、[OCI](https://learn.hashicorp.com/collections/terraform/oci-get-started)、[GCP](https://learn.hashicorp.com/collections/terraform/gcp-get-started)、[Docker](https://learn.hashicorp.com/collections/terraform/docker-get-started)、[Associate Tutorials (002)](https://learn.hashicorp.com/collections/terraform/certification-associate-tutorials)、[Azure](https://learn.hashicorp.com/collections/terraform/azure-get-started)。
[^3]: "infrastructure"は特別な文脈を除き全て「インフラ」と訳しています。
[^4]: "configuration"は、設定した内容を意味する時は「構成」、設定それ自体を指す時は「設定」と訳しています。
[^5]: リンク先を日本語のページに変更しました。元のリンク先は https://docs.microsoft.com/en-us/windows/wsl/install-win10