【Terraform】初期構築手順

最近は Infrastructure as Code の手法を取り入れて Terraform を使用する機会が多くなりました。

インフラは Terraform で構築して OS の設定は Ansible で実施するという体制を取る企業が多い気がしています。

私も Terraform を使っています。とういことで今回は Terraform の初期構築手順について解説します。

 

 

 

Terraformインストール手順

まずは Terraform をインストールします。

Terraform のインストールは簡単です。

AWS Cloud9 を使うと、デフォルトで Terraform コマンドがインストールされているのですぐに使うことができます。

 

 

■Terraform インストール手順

$ sudo yum -y update

$ sudo yum install -y yum-utils

$ sudo yum-config-manager –add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo

$ sudo yum -y install terraform

 

 

 

■Terraform バージョン確認コマンド

$ terraform -v
Terraform v1.2.2
on linux_amd64

 

 

 

■Terraformのアップデートコマンド

$ sudo yum update terraform

 

 

 

tf ファイルの作成

terraform コマンドをインストールしたら tf ファイルを作成します。

 

 

■main.tfファイルを作成する

$ vi main.tf
provider “aws” {
region = “ap-northeast-1”
}

 

 

 

複数人で開発する場合はそのための設定をする

1人で Terraform を利用しているうちは問題は発生しませんが、複数人で Terraform でインフラを管理しようとすると不整合が発生する可能性があります。

デフォルトで Terraform をインストールして利用するとローカルに tfstate ファイルが作成されます。

この tfstate ファイルにインフラの構成情報が入っていて、terraform plan、terraform apply コマンドで作成や修正をして、その結果を tfstate ファイルに書き込みます。

しかしこの tfstate ファイルがローカルにあると他の人には最新の Terraform で管理されているインフラの構成情報が分からない状態になります。

 

A さんがローカル PC で terraform コマンドで S3 バケットを作成し tfstate ファイルに構成情報が載っている、しかし B さんのローカル PC には最新の tfstate ファイルがないので S3 バケットは存在していないことになります。

そうすると不整合が発生します。

 

このように複数人で Terraform でインフラを管理しようとすると不整合が発生する可能性があるので tfstate ファイルを S3 バケットに入れて共有してしまいます。

そうすれば A さんが S3 バケットを作成した場合でも B さんも同じ tfstate ファイルを見ているわけなので B さんから見ても  S3 バケットが存在していることになります。

 

■tfstate ファイルを S3 バケットに入れるようにバックエンドの設定をする

$ vi terraform.tf  
terraform { 
  backend “s3” { 
    bucket = “terra-tfstate-file-backet” 
    key    = “prod/terraform.tfstate” 
    region = “ap-northeast-1” 
  } 

 

 

 

 

初期化をする

環境の設定が完了したら Terraform の初期化をします。

 

■terraform initコマンドを実行して初期化する

$ terraform init

 

 

 

■初期化後に作成されるファイル一式

ls -la 
total 8 
drwxrwxr-x 3 ec2-user ec2-user   66 Jun 30 04:11 . 
drwxrwxr-x 3 ec2-user ec2-user   21 Jun 30 04:05 .. 
-rw-rw-r– 1 ec2-user ec2-user   47 Jun 30 04:11 main.tf 
drwxr-xr-x 3 ec2-user ec2-user   23 Jun 30 04:11 .terraform 
-rw-r–r– 1 ec2-user ec2-user 1152 Jun 30 04:11 .terraform.lock.hcl 

 

 

 

 

terraform.tfstateがS3バケットに作成されるタイミングについて

terraform init コマンドを実行すると以下のようにローカルに terraform.tfstate ファイルが作成され、S3バケットには何もできないので設定が間違えたのかと勘違いしてしまうかもしれませんが、terraform plan から terraform apply を実行すると S3 バケットに terraform.tfstate ファイルが作成されていることが確認できます。

 

 

 

 

 

 

 

必ず .gitignore ファイルを設定しておくこと

github で Terraform のコードを管理する場合は、.gitigonore ファイルの設定をしておきます。

 

一番シンプルに以下のファイルでも構いません。

 

■.gitignore ファイル 

$ vi .gitignore
.terraform

 

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください