IT

terraformを作ってみる

2023年8月25日

terraformは、
アプリケーションはもちろんコードを書いて動かすわけですが、
インフラの設定もコードで管理できるようにするものになります。

さまざまなインフラをコードを書いてそれを実行するだけで、インフラの構築をしてくれるので、管理しやすいのと
バックアップという意味合いでも復旧がしやすいなどのメリットがあります。

GCPではterraformでインフラの構築ができるので、
イメージとしては
サーバをコードを書いて作ったり、もちろんメモリやOS指定なども。
あとはVPCの構築などでIPアドレス制限をコードで書くことも可能です。
何かと便利になりそうです!

tfこまんとで実行でき、パッチファイルみたいなものです。
tf terraformファイル
で実行可能。
https://qiita.com/Chanmoro/items/55bf0da3aaf37dc26f73

terraform initでまず初期化。これでサンプルファイル生成してくれないかなー。

まずmacに入れてみます。
tfコマンドなので、おそらくbrew install tfでインストールできるであろうと思い、実行。
入りました!

画像

そしてterraformコマンドを打ってみると、実行されてオプションが見れる状態になってます!
これでインストール完了です。

実際にファイルを作ってみます。
terraformでは以下3つのファイルを作成する必要があります。

  • Provider.tf
  • Variable.tf
  • main.tf

Privider

これは、どのクラウドサービスを使うかを定義します。

gcpなら、
provider "google" {
project = "acme-app" // プロジェクト名
region = "us-central1" // リージョン名(GCPは各サービスごとにリージョンやゾーンを決めれるのでここで指定する必要はないのかも)
}

awsなら、
# The default provider configuration; resources that begin with `aws_` will use
# it as the default, and it can be referenced as `aws`.
provider "aws" {
region = "us-east-1"
}

# Additional provider configuration for west coast region; resources can
# reference this as `aws.west`.
provider "aws" {
alias = "west"
region = "us-west-2"
}

https://cloud.google.com/docs/terraform/best-practices-for-terraform

ファイルを作成したらあとは実行。パッチを適用する

terraformファイルを作成したら、以下の手順で実行です。
$ terraform init # BackendとプロバイダのInitialize
$ terraform plan # 実行内容の確認、チェック
$ terraform apply # 実行

簡単に以下を実行してみましょう!

以下のコードをmain.tfとして作成します。
そしてサービスアカウントのjsonキーはこのmain.tfがあるディレクトリに置きます。

ローカルからGCPプロジェクトへCompute Engineのインスタンスを作成する処理を実行します。
なので、ローカルからGCPへアクセスするためにはまずサービスアカウントの認証情報をmain.tfに記載する必要がありますね。
さらに、インスタンスを作成するにはインスタンス名とどこに作成するかのゾーン情報、マシンタイプやOSなどの情報を記載します。
そうすれば以下のファイルを実行すれば指定したGCPプロジェクトにVMインスタンスを作成するようになります。

provider "google" {
  project = ""
  credentials = "<サービスアカウントのjsonキーのファイル名>"
}

resource "google_compute_instance" "vm_instance" {
  name         = "terraform-instance"
  zone         = "us-central1-a"
  machine_type = "e2-micro"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  network_interface {
    # A default network is created for all GCP projects
    network = "default"
    access_config {
    }
  }
}

 

そして、実際にterraformのコマンドを打って実行してみましょう!
上記のmain.tfとjsonキーがあるディレクトリまで移動して、コマンドを打って実行します。
まずterraform init
途中で確認のためyesを入力する部分があります。(もしyesを打つのもめんどい場合は、-yをオプションにつけて実行しましょう!)
 


 

次に、terraform plan
途中で確認のためyesを入力する部分があります。(もしyesを打つのもめんどい場合は、-yをオプションにつけて実行しましょう!)
 


 


 

終わりの箇所に親切にterraform applyと打つように指示されてますね!
なので最後に、terraform apply
途中で確認のためyesを入力する部分があります。(もしyesを打つのもめんどい場合は、-yをオプションにつけて実行しましょう!)

 


 


 

そうすると、以下のように実際にVMインスタンスが作成されたのが確認できます!
 


 

これでterraformによるGCPの各サービスのセットアップ方法を学びました。
この手順を踏めばセットアップができるので、あとはファイルの中身の内容や、3種類あるファイルの作成方法について学べば一人でさまざまなセットアップができるようになります!

https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/getting_started

メリット

GCPの設定をコードで管理できる
開発環境や本番環境を同一コードで変更することが可能。(main.tfにgcpプロジェクト名を入れるけど、variables.tfの方に記載することで、さすがにmainの処理をするmain.tfを変更することなく、variables.tfの方でのみ修正することになる。)
誰がやっても同じことが実現できる。(ミスった設定などもない)
プログラムなので、バージョン管理ができる
インフラの設定を文書化できる(設計書に落とすなどしやすい)
マルチプラットフォームに対応。terraformを勉強してしまえば、awsやazure、gcpなどさまざまなものに簡単に適用ができてしまうのでかなりメリット。

guiでの設定は禁止にして、あくまでterraformのみの設定にすれば、誰かが勝手にGUIで設定した内容によってエラーが発生したりなどを防げる。要はterraformで設定しているもの全て把握できる状態にする

-IT

© 2024 Yosshi Labo. Powered by AFFINGER5