🀄
Terraformに入門する
Terraformとは
TL;DR
- AWS|Azure|GCPとマルチクラウド対応
- オープンソースでコミュニティが熱い
- 抽象化されたレイヤーが少なく、コードが冗長になりがち
Terraformのインストール
公式ドキュメントを参考にインストールする
当方はMacでHomebrewを利用するため、以下のコマンドを実行した。
terminal
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
エディタVSCodeを利用している場合、以下の拡張機能も入れておく。
Terraformのチュートリアルを試す準備
公式チュートリアルを参考に進める。
まずはGitHubリポジトリを用意しておく。
当方は、GitHub CLIを利用してリポジトリを作成する。
terminal
gh repo create terraform-sandbox --public
gh repo clone terraform-sandbox
Dockerを起動しておく
terminal
open -a Docker
次に main.tf というファイルを作成する。
terminal
touch main.tf
main.tf にコードを記述する
main.tf
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.0.1"
}
}
}
provider "docker" {}
resource "docker_image" "nginx" {
name = "nginx"
keep_locally = false
}
resource "docker_container" "nginx" {
image = docker_image.nginx.image_id
name = "tutorial"
ports {
internal = 80
external = 8000
}
}
基本コマンドをチュートリアルを通して理解する
公式ドキュメントを参考に手を動かします。
terraform init
作業ディレクトリにてTerraformを使えるように準備するコマンド。
terminal
terraform init
なんやらディレクトリやファイルが作られることを確認できます。
terraform plan
リソースを作成する前にどんなリソースが作られるか確認するコマンド
terminal
terraform plan
なんかエラーが・・・
terminal
Planning failed. Terraform encountered an error while generating this plan.
╷
│ Error: Error pinging Docker server: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
│
│ with provider["registry.terraform.io/kreuzwerker/docker"],
│ on main.tf line 10, in provider "docker":
│ 10: provider "docker" {}
│
こちらの記事を参考にmain.tfを修正
main.tf(修正後)
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.0.1"
}
}
}
provider "docker" {
host = "unix:///Users/<ユーザ名>/.docker/run/docker.sock"
}
resource "docker_image" "nginx" {
name = "nginx"
keep_locally = false
}
resource "docker_container" "nginx" {
image = docker_image.nginx.image_id
name = "tutorial"
ports {
internal = 80
external = 8000
}
}
再び、 terraform plan を実行するとTerraformによって生成されるリソースの一覧が出てきます。
terraform apply
Terraformによるリソース作成を実行するコマンド
terminal
terraform apply
実行してよいか聞かれるので、yesと入力する
1分ほどかかって無事に完了。
Dockerコンテナが立ち上がっています。
一応ブラウザで確認するとNginxの初期ページが表示されている。
terraform destroy
リソースを削除するコマンド
terminal
terraform destory
実行してよいか聞かれるので、yesと入力する
先程つくったリソース(Dockerコンテナ)が一瞬で消えた。
おわりに
確かにAWS CDKでリソースを作成するよりもコード冗長にはなります。
が、将来マルチクラウドを視野にいれるならTerraformいいですね。
Terafformは難しそうで食わず嫌いしていましたが、なんだかできそうな気がする〜〜(?)
以上です。
Discussion