変数(概要)
変数にはローカル変数と外部変数の2種類があります。
- ローカル変数 ローカル変数は、TerraformのHCLコード内で定義され、同じファイル内でのみ使用される変数です。ローカル変数を使用することで、HCLコード内で再利用可能な値を定義できます。ローカル変数は locals ブロック内で定義されます。
ローカル変数の例
locals {
region = "us-west-2"
vpc_id = "vpc-1234567890abcdefg"
subnet_ids = [
"subnet-1234567890abcdefg",
"subnet-0987654321hgfedcba"
]
}
- 外部変数 外部変数は、TerraformのHCLコード外から渡される変数であり、terraform.tfvars ファイル、コマンドラインフラグ、環境変数、またはリモートステートから取得されます。外部変数を使用することで、TerraformのHCLコードを実行するたびに変数の値を変更することができます。外部変数は variable ブロック内で定義されます。
外部変数の例
variable "region" {
description = "The region to deploy the infrastructure"
type = string
}
variable "vpc_id" {
description = "The ID of the VPC"
type = string
}
variable "subnet_ids" {
description = "The IDs of the subnets"
type = list(string)
}
外部変数は、terraform.tfvars ファイルで値を設定できます。例えば、以下のようにして外部変数 region に値を設定できます。
region = "us-west-2"
また、コマンドラインフラグや環境変数を使用して、Terraform実行時に外部変数を設定することもできます。例えば、以下のようにして region 外部変数に値を設定できます。
terraform plan -var="region=us-west-2"
この場合、Terraformは terraform.tfvars ファイルで定義された値ではなく、コマンドラインで渡された値を使用します。
Terraformで外部変数を使用するためのサンプルコード
まず、外部変数を定義するために、variables.tfというファイルを作成します。
variable "aws_access_key" {
description = "AWS access key"
}
variable "aws_secret_key" {
description = "AWS secret key"
}
variable "region" {
description = "AWS region"
}
次に、これらの変数をTerraformのコードで使用するために、main.tfというファイルを作成します。
provider "aws" {
access_key = var.aws_access_key
secret_key = var.aws_secret_key
region = var.region
}
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}
このコードでは、AWSプロバイダーを使用してEC2インスタンスを作成しています。AWSアクセスキー、シークレットキー、リージョンは、variables.tfで定義された外部変数を使用して渡されます。
最後に、外部変数の値を渡すためのファイルを作成します。ここでは、terraform.tfvarsというファイルを使用して、変数の値を渡します。
aws_access_key = "YOUR_AWS_ACCESS_KEY"
aws_secret_key = "YOUR_AWS_SECRET_KEY"
region = "us-west-2"
これで、Terraformのコードで外部変数を使用する準備が整いました。terraform applyコマンドを実行すると、terraform.tfvarsから変数の値を読み取り、EC2インスタンスを作成します。
変数(詳細)
- String Variables: 文字列を表す変数
variable "region" {
type = string
default = "us-east-1"
}
- Number Variables: 数値を表す変数
variable "instance_count" {
type = number
default = 1
}
- Boolean Variables: 真偽値を表す変数
variable "is_production" {
type = bool
default = false
}
- List Variables: 複数の値を持つ変数
variable "availability_zones" {
type = list(string)
default = ["us-east-1a", "us-east-1b"]
}
- Map Variables: キーと値のペアを持つ変数
variable "instance_tags" {
type = map(string)
default = {
environment = "dev"
owner = "John Doe"
}
}
- Object Variables: オブジェクトを表す変数
variable "instance_details" {
type = object({
instance_type = string
ami_id = string
subnet_id = string
})
default = {
instance_type = "t2.micro"
ami_id = "ami-0c55b159cbfafe1f0"
subnet_id = "subnet-1234567890abcdef0"
}
}
これらの変数を使用することで、Terraformコードを柔軟に構築し、パラメータを変更することなく、異なる環境で再利用できるようにすることができます。
terraform ${var.変数名}
を活用する例
例1: EC2インスタンスの作成
resource "aws_instance" "example" {
ami = var.ami_id
instance_type = var.instance_type
}
上記のTerraformコードでは、aws_instance
リソースを作成しています。その際に、AMI IDとインスタンスタイプはTerraform変数を使用して指定されています。具体的には、ami_id
とinstance_type
という2つの変数があるものとします。
この場合、以下のようにterraform apply
コマンドを実行することで、Terraform変数に渡した値を使用してEC2インスタンスが作成されます。
terraform apply -var="ami_id=ami-0c55b159cbfafe1f0" -var="instance_type=t2.micro"
例2: S3バケットの作成
resource "aws_s3_bucket" "example" {
bucket = var.bucket_name
}
上記のTerraformコードでは、aws_s3_bucket
リソースを作成しています。その際に、バケット名はTerraform変数を使用して指定されています。
この場合、以下のようにterraform apply
コマンドを実行することで、Terraform変数に渡した値を使用してS3バケットが作成されます。
terraform apply -var="bucket_name=my-example-bucket"
このように、terraform ${var.変数名}
を活用することで、Terraformコードを再利用しやすくしたり、実行時に柔軟に値を指定したりすることができます。
AWSで、Terraformを利用する方法をまとめてみた(1/10)
https://qiita.com/kimuni-i/items/ffde2f8df96fe5d9513f
AWSで、Terraformを利用する方法をまとめてみた(2/10)
https://qiita.com/kimuni-i/items/6298ed10adc6ad450488
AWSで、Terraformを利用する方法をまとめてみた(3/10)
https://qiita.com/kimuni-i/items/4d2f90506eb2dd4ee702
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