我总结了使用AWS的Terraform的方法(4/10)

变量(概述)

变量分为两种类型:局部变量和外部变量。

    本地变量是在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"
}

接下来,我们将创建一个名为main.tf的文件,以便在Terraform代码中使用这些变量。

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实例。

变量(详细)

    字符串变量:用于表示字符串的变量
variable "region" {
  type    = string
  default = "us-east-1"
}
    数字变量:表示数字的变量
variable "instance_count" {
  type    = number
  default = 1
}
    布尔变量: 表示真假值的变量
variable "is_production" {
  type    = bool
  default = false
}
    列出变量:具有多个值的变量
variable "availability_zones" {
  type    = list(string)
  default = ["us-east-1a", "us-east-1b"]
}
    地图变量:具有键和值对的变量
variable "instance_tags" {
  type    = map(string)
  default = {
    environment = "dev"
    owner       = "John Doe"
  }
}
    对象变量:表示对象的变量。
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资源。在创建过程中,使用了Terraform变量来指定AMI ID和实例类型。具体来说,有两个变量,分别是ami_id和instance_type。

在这种情况下,您可以通过执行terraform apply命令来使用传递给Terraform变量的值来创建EC2实例。

terraform apply -var="ami_id=ami-0c55b159cbfafe1f0" -var="instance_type=t2.micro"

创建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代码,并在运行时灵活指定值。

bannerAds