1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

次にTerafformを組むなら

Last updated at Posted at 2023-02-27

概要

業務でTerraformを組む機会があったため、
今回使いやすかったルール、次回terraformを組む際に適用したいルール
を備忘として記載する

ディレクトリ構成

  • 環境差分パラメータはすべてenv配下のvariables.tfで定義する
  • 環境固有のリソースはenv配下に定義する(例:ec2_fumidai.tf)
  • 各環境共通となるリソースはmodules配下に定義する
  • 使い回すリソースはterraform registry(すでに検証済みのモジュール)をコピペしてmodules配下に定義する
terraform/
    ├── docs/
    │   ├── naming.md
    │   └── doc.md
    ├── env/
    │   ├── dev/
    │   │   ├── main.tf
    │   │   ├── providers.tf
    │   │   ├── variables.tf
    │   │   ├── ec2_fumidai.tf //dev環境でのみ使用するリソース
    │   │   └── README.md
    │   └── stg/
    │       ├── main.tf
    │       ├── providers.tf
    │       ├── variables.tf
    │       └── README.md
    ├── modules/
    │   ├── main/
    │   │   ├── network.tf
    │   │   ├── elb.tf
    │   │   ├── acm.tf
    │   │   ├── ssm.tf
    │   │   ├── route53.tf
    │   │   ├── ecs.tf
    │   │   ├── ecr.tf
    │   │   ├── rds.tf
    │   │   ├── s3.tf
    │   │   ├── variables.tf
    │   │   ├── outputs.tf
    │   │   └── README.md
    │   └── moduleA/
    │       ├── main.tf
    │       ├── variables.tf
    │       ├── outputs.tf
    │       └── README.md
    ├── .gitignore
    └── README.md

命名規則

//各パーツの定義
resource "リソースタイプ" "ローカル名" {
  name      = リソース名

  tags = {
    Name    = リソース名
  }
}
  • 全体ルール
    • 小文字を使用する
    • セパレータにアンダースコア(_)を使用する
    • AWSリソース名(nameやnameTag)はセパレータに(-)を使用する
  • ローカル名
    • モジュール内で単一となるリソースは「main」で統一する
    • モジュール内に複数作成されるリソースは、直感的に意味のわかる名称とする
    • リソースタイプを繰り返さない
    • プロジェクト名、サービス名を使用しない
  • リソース名
    • prefixを使用する
    • prefix-リソースタイプ形式で定義する
sample.tf
locals {
    prefix = "${var.project}-${var.environment}"
}

resource "aws_route53_zone" "main" {
    name = "${local.prefix}-route53"
}

resource "aws_subnet" "private_1a" {
  tags = {
    Name    = "${local.prefix}-subnet-private-1a"
  }
}

デフォルトタグ

リソースごとに定義するとtag付けが漏れるため、
デフォルトタグを指定する

provider "aws" {
  region = "ap-northeast-1"
  default_tags {
    tags = {
      env = "dev"
      project = "sample_project"
    }
  }
}

variablesは型チェックし、使用するリソースごとにまとめる

変数は各所に散らばりやすいため、variables.tfで一元管理し、かつ使用する用途ごとにまとめて管理する

variable "ecs" {
    type = list(
        object({
            name = string
            cpu = number
            memory = number
        })
    )
}

参考ページ

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?