[初心者必見] Terraformer になるための第一歩の設定について

AWS

こんにちは!今日は珍しくTerraform について書いていきます。以前にTerraform でtest してみたの記事は書きましたので、良かったら閲覧してみてください。

今回はTerraform を使う上で便利だなと思った設定方法などについて書いていきたいと思います。

今回の環境

特段決まった構成というのはないので、使用したレポジトリのみこちらに置いておきます。練習用に使用していただけます!

GitHub - kentaindeed/terraform-for-blog: blog用に作成しているTerraform レポジトリ
blog用に作成しているTerraform レポジトリ. Contribute to kentaindeed/terraform-for-blog development by creating an account on GitHub.

知っておくべき設定紹介

ここから便利な設定の紹介について書いていきます!(AWS の設定としての便利な設定ももしかしたらはいるかもしれません。ご了承ください)

module・変数定義の方法

これはTerraform を使う人にとってはこれは便利というか、使用しない選択肢はないかも?くらいの方法です。この場合は、設定というよりもディレクトリ構成を決めるにあたって使用するものになります。

Module のディレクトリ構成について

下記のようなディレクトリ構成をmodule を使うとできるようになります。ポイントは再利用が可能ということです。今はenv の下にdev ディレクトリしかないですが、複数の環境を作成しようと思ったときに、module を作成しているので、設定を合わせて作成することができます。

.
├── README.md
├── env
│   └── dev
│       ├── main.tf
│       ├── terraform.tfstate
│       ├── terraform.tfstate.backup
│       ├── terraform.tfvars
│       └── variable.tf
├── local.tf
└── modules
    ├── ec2
    │   ├── main.tf
    │   ├── output.tf
    │   └── variable.tf
    └── network
        ├── main.tf
        ├── output.tf
        └── variable.tf

変数はどうするのかということについても次に書いていきます!

変数について

変数はdev のディレクトリに記載していきます。devディレクトリのvariable.tf の中身です。ここで変数を定義していきます。ここでvariable を定義することでdev 環境で使用することができます。

variable "ami" {
  description = "AMI ID for EC2 instance"
  type        = string
}

variable "instance_type" {
  description = "EC2 instance type"
  type        = string
}

variable "instance_count" {
  description = "Number of instances to create"
  type        = number
}

variable "aws_region" {
    type = string
    default = "ap-southeast-1"
}

variable "aws_profile" {
    type = string
    default = "default"
}

variable "env" {
    type = string
    default = "dev"
}

ここでは、中身については定義していないので、次は中身を定義するファイルも紹介します。

terraform.tfvars について

変数については、パスワードであったり、API key などを持たせる可能性があることから、terraform.tfvars というファイルで別途管理していきます。これは基本的にはローカルで使用するファイルになります。github にはterraform.tfvars.example などの名前でpush するのがよくあるセオリーです。

後は、tfvars で変数を定義しておくと、再定義の必要がなくなります。なので、DRY の原則に沿っている書き方が可能になります。あちこちに変数を定義するとどの変数が適用されるのか懸念事項にもなるので、安心です。

今回は特段秘密の情報を記載していなかったので、repository にpush していますが、個別の情報を持っている場合は.gitignore に入れておくことをお勧めします。

# EC2 Configuration
ami           = "ami-0228232d282f16465"  # Amazon Linux 2 AMI for ap-southeast-1
instance_type = "t3.small"
instance_count = 1

Terraform.tfstate の管理方法について

tfstate の管理のお話です。tfstate はTerraform が管理しているインフラをJson 形式で定義されているファイルです。なので、デプロイや変更などをする時にtfstate を参照して、差分などが表示される形になっています。

つまり、二人以上で開発していると、tfstate が各個人それぞれ作成されてしまう可能性があるということです。なので、AWS 上などで管理しましょうということになります。

# Terraform backend configuration (temporarily commented out)
terraform {
  backend "s3" {
    bucket = "terraform-state-bucket-dev-kentaindeed"
    key    = "terraform.tfstate"
    region = "ap-northeast-1"
    encrypt = true
    use_lockfile  = true
  }
}

僕はmain.tf でbackend を管理していますが、backend.tf で管理するのも一手だと思います。恐らくTerraform の公式でも推奨されている書き方になると思います。

バージョニング設定

tfstate の履歴を追うことができるようにバージョニングをしていると便利です。

# S3 bucket versioning
resource "aws_s3_bucket_versioning" "terraform_state" {
  bucket = aws_s3_bucket.terraform_state.id
  versioning_configuration {
    status = "Enabled"
  }
}

これでバケット自体のバージョニングはしていませんが、tfstate のみがバージョニングされる状態になります。バージョニングは誤って削除などしてしまったときに、切り戻しも可能になるので、Terraform でも推奨されています。

まとめ

今回、Terraform の便利で知っておくべき設定について紹介してみました。この設定のみならず、推奨の設定であったり、保守する上で必要な設定などもあると思いますので、それも後々紹介していきます。

参考サイト

Terraform v1.10 からは S3 Backend の State Lock に DynamoDB が必要なくなる
Terraform Backend用のS3バケットのバージョニング設定を考えてみる | DevelopersIO

\ 最新情報をチェック /

コメント

PAGE TOP
タイトルとURLをコピーしました