LoginSignup
9
7

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-12-12

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

翻訳の掲載をご快諾くださったHashiCorpのEducation Teamのみなさんありがとうございました。
原文はこちらです。

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

TerraformによるIaCとは?2

Terraform Video

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のプロバイダーは自動的にリソース間の依存関係を計算し、正しい順序でリソースの作成・削除をします。
assets.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コンテナの構築と削除をしてみましょう。

ターミナルの起動

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

訳注
この章の内容については、元のページでブラウザからターミナルを起動し実際に動作を確認することができます。

TerraformでDockerの構築

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

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 Video
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

terraformPATHが通っているか確認しましょう。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 HashiCorpLinux Package Checksum Verificationに則ってGPGキーを検証することもできます。

HashiCorpの公式リポジトリをシステムに追加しましょう。lsb_release -csを実行すると、bustergroovysidといった、現在使っているシステムのディストリビューションのリリース・コードネームが出力されます。

$ 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

HashiCorpのリポジトリが追加できたので、VaultConsulNomadPackerも同じコマンドでインストールすることができるようになりました。

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のリポジトリが追加できたので、VaultConsulNomadPackerも同じコマンドでインストールすることができるようになりました。

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のリポジトリが追加できたので、VaultConsulNomadPackerも同じコマンドでインストールすることができるようになりました。

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のリポジトリが追加できたので、VaultConsulNomadPackerも同じコマンドでインストールすることができるようになりました。

インストールの確認

新しくターミナルを開き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という名前で保存しましょう。

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
  }
}
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とやりとりできるようにするためのプラグインがダウンロードされます。

$ terraform init

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

$ terraform apply

NGINXコンテナができているか確認するために、ブラウザからlocalhost:8000にアクセスするか、docker psを実行してNGINXコンテナを見てみましょう。
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

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

次のステップ

次は、クラウド上で実際にインフラを作ってみます。

訳注
2022年12月10日時点で、続くチュートリアルとして以下のものがあります。(※英語のページです)
Amazon Web Services(AWS)AzureGoogle Cloud Platform(GCP)Oracle Cloud Platform(OCI)

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

  • AWS

  1. 原文のタイトルに「AWS」とありますが、【導入・準備編】はAWS以外のチュートリアルにも共通のものです(後述)。なお、元サイトとのUIの違いにより、どうしても元サイト通りに再現できていない箇所があります。ご了承ください。また、一連の記事のタイトルにある【○○編】は便宜上訳者が付けたものです。

  2. このチャプターは以下のチュートリアルに共通です。AWSAssociate Tutorials (003)OCIGCPDockerAssociate Tutorials (002)Azure

  3. "infrastructure"は特別な文脈を除き全て「インフラ」と訳しています。

  4. "configuration"は、設定した内容を意味する時は「構成」、設定それ自体を指す時は「設定」と訳しています。

  5. リンク先を日本語のページに変更しました。元のリンク先は https://docs.microsoft.com/en-us/windows/wsl/install-win10

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7