LoginSignup
2
0

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

Last updated at Posted at 2023-09-18

変数(概要)

変数にはローカル変数と外部変数の2種類があります。

  1. ローカル変数 ローカル変数は、TerraformのHCLコード内で定義され、同じファイル内でのみ使用される変数です。ローカル変数を使用することで、HCLコード内で再利用可能な値を定義できます。ローカル変数は locals ブロック内で定義されます。

ローカル変数の例

locals {
  region  = "us-west-2"
  vpc_id  = "vpc-1234567890abcdefg"
  subnet_ids = [
    "subnet-1234567890abcdefg",
    "subnet-0987654321hgfedcba"
  ]
}
  1. 外部変数 外部変数は、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インスタンスを作成します。

変数(詳細)

  1. String Variables: 文字列を表す変数
variable "region" {
  type    = string
  default = "us-east-1"
}
  1. Number Variables: 数値を表す変数
variable "instance_count" {
  type    = number
  default = 1
}
  1. Boolean Variables: 真偽値を表す変数
variable "is_production" {
  type    = bool
  default = false
}
  1. List Variables: 複数の値を持つ変数
variable "availability_zones" {
  type    = list(string)
  default = ["us-east-1a", "us-east-1b"]
}
  1. Map Variables: キーと値のペアを持つ変数
variable "instance_tags" {
  type    = map(string)
  default = {
    environment = "dev"
    owner       = "John Doe"
  }
}
  1. 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_idinstance_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

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