Terraform公式チュートリアルの日本語訳です。
実際に動作を確認しながら学習できるチュートリアルです。
【導入・準備編】では、Terraformとは何か、および、Terraformのインストール方法をメインにお伝えします。
【AWS編】はこちら
翻訳の掲載をご快諾くださったHashiCorpのEducation Teamのみなさんありがとうございました。
原文はこちらです。
- Get Started - AWS | Terraform - HashiCorp Learn1
- Install Terraform | Terraform | HashiCorp Developer
また、HashiCorp Learnに登録するとチュートリアルの進捗などがダッシュボードで確認できるようになります。
登録はこちら。Sign in - HashiCorp Learn
※なお、HashiCorpでは当面の間ドキュメントのローカライゼーションの予定はないとのことです。
TerraformによるIaCとは?2
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で探してみてください。見つからなければ、自分で作ることもできます。
開発ワークフローの標準化
プロバイダーはインフラのそれぞれのユニットを定義します。例えば、リソースとしてのコンピュート・インスタンスやプライベート・ネットワークなどです。異なるプロバイダーからリソースを作成し、それを再利用可能なTerraformの構成にすることができます。この構成はモジュールと呼ばれ、一貫性のある設定言語とワークフローで管理することができます。
Terraformの設定言語は宣言的です。つまり、インフラの希望の最終状態を記述していきます。手続き型プログラミング言語が手順ごとにタスクを実行する命令を必要とするのとは対照的です。Terraformのプロバイダーは自動的にリソース間の依存関係を計算し、正しい順序でリソースの作成・削除をします。
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コンテナの構築と削除をしてみましょう。
ターミナルの起動
このチュートリアルでは、無料で、インタラクティブにコマンドライン上で動作を試すことができます。それにより、実際のクラウドのインフラについて理解していくことができます。
訳注
この章の内容については、元のページでブラウザからターミナルを起動し実際に動作を確認することができます。
TerraformでDockerの構築
"Coder 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
}
}
"Terminal"タブでプロジェクトを初期化します。初期化すると、TerraformがDockerとやりとりできるようにするためのプラグインがダウンロードされます。
$ terraform init
apply
でNGINXサーバーのコンテナをセットアップしましょう。確認メッセージが出たらyes
と入力しエンターキーを押下します。
$ terraform apply
NGINXインスタンスを確認
docker ps
を実行して、Terraformを使用しDockerでNGINXコンテナが起動していることを確認します。
$ docker ps
リソースの削除
コンテナを停止しこのチュートリアルで作られたリソースを削除するために、terraform destroy
を実行します。確認メッセージが出たらyes
と入力しエンターキーを押下しましょう。
$ terraform destroy
これでNGINXウェブサーバーをTerraformでセットアップし削除することができました。
次のステップ
IaCとTerraformの中心的な概念について説明してきました。これで、インフラの構成を自分で書くことができようになったことでしょう。
次のチュートリアルに進んで、ローカルマシンにTerraformをインストールしてDockerコンテナをデプロイしてみましょう。
Terraformのインストール
Terraformを使うにはTerraformをインストールする必要があります。HashiCorpではバイナリ・パッケージを配布していますし、主要なパッケージ・マネージャーでインストールすることもできます。
Terraformのインストール
手動でインストール
コンパイル済みのバイナリをダウンロードするかソースからコンパイルして、terraform
バイナリを取得します。
コンパイル済みのバイナリ
Terraformをインストールするには、使っているシステムに適したパッケージを見付け、ZIPファイルでダウンロードしましょう。
ダウンロードが終わったらパッケージを解凍します。Terraformはterraform
というファイル名で、シングル・バイナリで起動します。パッケージ内の他のファイルは削除しても問題ありません。これらのファイルが無くてもTerraformは正常に機能します。
ソースからコンパイル
ソースからTerraformバイナリをコンパイルするには、HashiCorpのTerraformリポジトリをcloneしましょう。
$ git clone https://github.com/hashicorp/terraform.git
クローンしてできたディレクトリに移動します。
$ cd terraform
次に、バイナリにコンパイルします。このコマンドはコンパイル後にバイナリを$GOPATH/bin/terraform
に保存します。
$ go install
terraform
にPATH
が通っているか確認しましょう。PATH
を通す手順はOSごとに異なります。
Mac/Linux
:
で区切られたパスのリストを表示しましょう。
$ echo $PATH
Terraformバイナリを上のパスのどこかに移動します。以下のコマンドは作成したバイナリがダウンロード・フォルダーにあり、PATH
に/usr/local/bin
が含まれることを想定しています。実際の状況と異なる場合はコマンドを適宜修正しましょう。
$ mv ~/Downloads/terraform /usr/local/bin/
バイナリにPATH
を通す方法について詳しくはこのStack Overflowの記事をご参照ください。
Windows
このStack Overflowの記事に、WindowsでUIからPATHを設定する方法が書いてあります。
Homebrew on OS Xでインストール
HomebrewはMac OS X用のフリーかつオープンソースのパッケージ・マネージメント・システムです。ターミナルから公式のTerraform formulaをインストールしましょう。
まず、HashiCorpの全てのHomebrewパッケージを含む、HashiCorp tapをインストールします。
$ brew tap hashicorp/tap
次にhashicorp/tap/terraform
でTerraformをインストールします。
$ brew install hashicorp/tap/terraform
これにより署名済みバイナリがインストールされ、公式のリリースが作成されるごとに自動でアップデートされます。
最新のバージョンのTerraformにアップデートするには、まずHomebrewをアップデートします。
$ 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
Chocolatey on Windowsでインストール
ChocolateyはWindows用のフリーかつオープンソースのパッケージ・マネージメント・システムです。コマンドラインからTerraformパッケージをインストールしましょう。
$ choco install terraform
Chocolateyと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
HashiCorpからパッケージ情報をダウンロードします。
$ sudo apt update
新しいリポジトリからTerraformをインストールしましょう。
$ sudo apt-get install terraform
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
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
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
インストールの確認
新しくターミナルを開き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
インストール後はシェルを再起動する必要があります。
クイック・スタート
Terraformがインストールできたので、MacやWindows、Linux上でDockerを使用し、1分も掛からずにNGINXサーバーをセットアップすることができます。また、以降のチュートリアルはブラウザからも実行することができます。
Docker Desktop for Mac
Docker Desktop for Macをダウンロードします。
TerraformとDockerをローカルにインストールしたら、Docker Desktopを起動します。
$ open -a Docker
Docker Desktop for Windows
Windows 10でDockerを起動するにはWSL2(Windows Subsystem for Linux)を使用してください。次に進む前にWSL2をダウンロードしインストール5しましょう。
Docker Desktop for Windowsをインストールします。
TerraformとDockerをローカルにインストールしたら、スタート・メニューからDockerを検索します。検索結果からDocker Desktopを選択し、Docker Desktopを起動します。クジラのアイコンがステータス・バーに表示されたら、Docker Desktopが稼働中でありターミナルからアクセス可能であるということです。
WindowsでのDocker Desktopの要件について詳しくはDockerのドキュメントをご参照ください。
Docker Desktop for 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
apply
でNGINXサーバーのコンテナをセットアップします。確認メッセージが出たらyes
と入力しエンターキーを押下しましょう。
$ terraform apply
NGINXコンテナができているか確認するために、ブラウザからlocalhost:8000にアクセスするか、docker ps
を実行してNGINXコンテナを見てみましょう。
$ 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
これでNGINXウェブサーバーをTerraformでセットアップし削除することができました。
次のステップ
次は、クラウド上で実際にインフラを作ってみます。
訳注
2022年12月10日時点で、続くチュートリアルとして以下のものがあります。(※英語のページです)
Amazon Web Services(AWS)、Azure、Google Cloud Platform(GCP)、Oracle Cloud Platform(OCI)。
続きの翻訳はこちらから。(順次増えていく予定です)
- AWS
-
原文のタイトルに「AWS」とありますが、【導入・準備編】はAWS以外のチュートリアルにも共通のものです(後述)。なお、元サイトとのUIの違いにより、どうしても元サイト通りに再現できていない箇所があります。ご了承ください。また、一連の記事のタイトルにある【○○編】は便宜上訳者が付けたものです。 ↩
-
このチャプターは以下のチュートリアルに共通です。AWS、Associate Tutorials (003)、OCI、GCP、Docker、Associate Tutorials (002)、Azure。 ↩
-
"infrastructure"は特別な文脈を除き全て「インフラ」と訳しています。 ↩
-
"configuration"は、設定した内容を意味する時は「構成」、設定それ自体を指す時は「設定」と訳しています。 ↩
-
リンク先を日本語のページに変更しました。元のリンク先は https://docs.microsoft.com/en-us/windows/wsl/install-win10 ↩