LoginSignup
5
1

AWSで、Terraformを利用する方法をまとめてみた(2/10)

Last updated at Posted at 2023-09-07

基本的な使い方

Terraformの主要なファイルは、以下の3つです。

1. main.tf
Terraformのコードが記述される主要なファイルです。このファイルには、リソースの定義や変数の設定などが含まれます。main.tfファイルを使用して、Terraformが管理するインフラストラクチャを定義します。

2. variables.tf
変数を定義するためのファイルです。このファイルには、Terraformコード内で使用する変数の名前、型、既定値などが定義されています。変数を使用することで、Terraformコードを柔軟にすることができます。たとえば、同じコードを異なる環境で使用する場合、変数を使用して環境ごとの値を指定することができます。

3. terraform.tfvars
変数の値を設定するためのファイルです。このファイルには、Terraformコード内で定義された変数の値を指定します。terraform.tfvarsファイルを使用することで、変数の値を直接指定することができます。また、terraform.tfvarsファイルは、.tfファイルと同じディレクトリに配置することで、Terraformが自動的に読み込みます。

main.tf

Terraformのコードを記述するファイルです。ここでは、リソース、プロバイダー、変数などが定義されます。

variables.tf: Terraformの変数を定義するファイルです。変数には、アクセスキー、シークレットキーなどの機密情報が含まれることがあります。変数は、main.tfで使用される値を定義するために使用されます。

terraform.tfvars: Terraform変数の値を設定するファイルです。このファイルに値を定義することで、変数の値をmain.tfに渡すことができます。

main.tfファイルの記載方法(基本)

required_version、required_providers、およびproviderブロックを使用することにより、
Terraformコードを実行するために必要なTerraformバージョンとプロバイダーを指定できます。

1.required_version
required_versionブロックは、実行に必要なTerraformバージョンを指定します。Terraformが提供するリソースや機能はバージョンごとに異なるため、必要なバージョンを指定することで、バージョンの不一致による問題を回避することができます。

terraform {
  required_version = ">= 0.14.0"
}

この例では、Terraformのバージョンが0.14.0以上である必要があります。

2.required_providers
required_providersブロックは、使用するプロバイダーを指定します。プロバイダーは、Terraformがリソースを作成、更新、削除するために使用するAPIを提供します。required_providersブロックを使用することで、Terraformは指定されたバージョンのプロバイダーが存在することを確認し、必要な場合には自動的にダウンロードします。

terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = ">= 3.0.0"
    }
  }
}

この例では、AWSプロバイダーのバージョン3.0.0以上が必要であり、hashicorp/awsから提供されます。

3.provider
providerブロックは、使用するプロバイダーを定義します。required_providersとは異なり、providerブロックはTerraformが使用するプロバイダーを明示的に指定します。複数のプロバイダーを使用する場合、providerブロックを複数定義することができます。

provider "aws" {
  region = "us-west-2"
}

この例では、AWSプロバイダーを使用し、リージョンをus-west-2に設定しています。

これらのブロックを使用することで、Terraformは必要なバージョンのTerraformを使用し、必要なバージョンのプロバイダーを使用して、リソースの作成、更新、削除を行うことができます。

AWSプロバイダを設定し、aws_instanceリソースを定義する例

terraform {
  required_version = ">= 0.14.0"
  
  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = ">= 3.0.0"
    }
  }
}

provider "aws" {
  region = var.region
}

resource "aws_instance" "example" {
  ami           = var.ami_id
  instance_type = var.instance_type
}

この例では、main.tfにaws_instanceリソースを定義し、variables.tfにregion、ami_id、instance_typeの3つの変数を定義しています。そして、terraform.tfvarsで定義した値をこれらの変数に渡しています。また、required_version、required_providers、providerブロックを使用して、使用するTerraformバージョンとプロバイダーを指定しています。

variables.tfは、Terraformの変数を定義するためのファイルです。このファイルで定義した変数は、main.tfで使用することができます。以下は、variables.tfでregion、ami_id、instance_typeの3つの変数を定義した例です。

variable "region" {
  type        = string
  description = "The AWS region in which to launch the instance."
}

variable "ami_id" {
  type        = string
  description = "The ID of the Amazon Machine Image (AMI) to use for the instance."
}

variable "instance_type" {
  type        = string
  description = "The instance type to use for the instance."
}

これらの変数にはそれぞれ、typeとdescriptionが設定されています。typeは変数の型を指定し、descriptionは変数の説明を記述するために使用されます。

terraform.tfvarsは、変数の実際の値を設定するためのファイルです。このファイルに値を定義することで、main.tfに渡すことができます。以下は、terraform.tfvarsでregion、ami_id、instance_typeの3つの変数に値を渡す例です。

region = "us-west-2"
ami_id = "ami-0123456789abcdef"
instance_type = "t2.micro"

この例では、regionには"us-west-2"、ami_idには"ami-0123456789abcdef"、instance_typeには"t2.micro"という値が渡されます。これらの値は、main.tfで使用される変数の値として参照されます。

Terraformで使用される変数は、環境変数、変数ファイル、コマンドライン引数のいずれかで定義できます。

Terraformでは、以下の方法で変数を渡すことができます。

環境変数

環境変数を使用して、Terraformの変数を渡すことができます。以下は、環境変数を使用してTerraform変数を設定する例です。

$ export TF_VAR_region=us-west-1
$ terraform apply

上記の例では、TF_VAR_regionという環境変数を使用して、regionという名前のTerraform変数を設定しています。

変数ファイル

変数をファイルに保存して、Terraformに渡すこともできます。以下は、変数ファイルを使用してTerraform変数を設定する例です。

# vars.tfvars
region = "us-west-1"
instance_type = "t2.micro"
$ terraform apply -var-file=vars.tfvars

上記の例では、vars.tfvarsという名前のファイルに、Terraformの変数を設定しています。-var-fileオプションを使用して、Terraformに変数ファイルを渡します。

コマンド引数

Terraformコマンドの引数として、直接変数を渡すこともできます。以下は、コマンド引数を使用してTerraform変数を設定する例です。

$ terraform apply -var region=us-west-1

上記の例では、-varオプションを使用して、regionという名前のTerraform変数を設定しています。

これらの方法を組み合わせて、複数の変数を渡すこともできます。ただし、環境変数、変数ファイル、およびコマンド引数で同じ変数を設定すると、コマンド引数が優先されます。

terraform consoleとは?

terraform console は、Terraformコードの評価や変数の値をテストするために使用される補助ツールです。コマンドラインインターフェース(CLI)を介して利用できます。

terraform console コマンドを実行すると、Terraformが読み込むすべてのモジュール、リソース、および変数が利用可能になります。この環境で、Terraformの組み込み関数や自分で定義した関数を使って、評価を行うことができます。

例えば、以下のようなTerraformコードがあるとします。

variable "region" {
  default = "us-west-2"
}

output "instance_type" {
  value = "t2.micro"
}

このコードを terraform console で評価すると、以下のようになります。

> var.region
"us-west-2"

> output.instance_type
"t2.micro"

このように、Terraformコードの評価を行うことで、様々な変数の値をテストすることができます。また、リソースやデータソースの定義や、Terraformの組み込み関数の動作を評価することもできます。terraform console は、Terraformコードの開発やテストに役立つ強力なツールです。

TerraformのtfstateファイルからインスタンスのIDを取得する

  1. Terraformのtfstateファイルをテキストエディタで開きます。
  2. 検索機能を使用して、インスタンスのIDを含むリソースのセクションを見つけます。例えば、AWSのEC2インスタンスの場合、"aws_instance"リソースが該当します。
  3. 該当する"aws_instance"リソースのセクション内で、"id"というフィールドがあることを確認します。このフィールドには、インスタンスのIDが格納されています。
  4. インスタンスのIDをコピーして、必要に応じて別の場所で使用することができます。
    例えば、以下のようなtfstateファイルの"aws_instance"リソースセクションを見ることができます。
"aws_instance": { "instance-1": { "type": "aws_instance", "depends_on": [], 
"primary": { "id": "i-0123456789abcdef", 
"attributes": { "ami": "ami-0123456789abcdef", 
"instance_type": "t2.micro", ... } } } } 

上記の例では、"id"フィールドにインスタンスのID "i-0123456789abcdef" が格納されています。

※tfstateファイルはTerraformによって生成され、直接変更しないようにしてください。tfstateファイルを変更すると、Terraformが正しく機能しなくなる可能性があります。

AWSで、Terraformを利用する方法をまとめてみた(1/10)
https://qiita.com/kimuni-i/items/ffde2f8df96fe5d9513f
AWSで、Terraformを利用する方法をまとめてみた(3/10)
https://qiita.com/kimuni-i/items/4d2f90506eb2dd4ee702
AWSで、Terraformを利用する方法をまとめてみた(4/10)
https://qiita.com/kimuni-i/items/b97089a820cc06ed2d9c
AWSで、Terraformを利用する方法をまとめてみた(5/10)
https://qiita.com/kimuni-i/items/11efb60b9a731d212211
AWSで、Terraformを利用する方法をまとめてみた(6/10)
https://qiita.com/kimuni-i/items/943daf8f4e80af12b70e
AWSで、Terraformを利用する方法をまとめてみた(7/10)
https://qiita.com/kimuni-i/items/b2cc6e1e4b5d5c1a92cb
AWSで、Terraformを利用する方法をまとめてみた(8/10)
https://qiita.com/kimuni-i/items/2934372c385ba0561425
AWSで、Terraformを利用する方法をまとめてみた(9/10)
https://qiita.com/kimuni-i/items/edbdc88f0bca9c0354d2
AWSで、Terraformを利用する方法をまとめてみた(10/10)
https://qiita.com/kimuni-i/items/2f900d792c38ad93979c

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