使用Terraform按照不同的情况创建资源

此文是關於第16天的TeamLab工程師專題的文章。

首先

我整理了使用Terraform时的各种案例下的用法。

版本信息

使用Terraform v0.11.13 进行操作。

进行方式

    実行ディレクトリに移動
cd aws_terraform
    • 秘密鍵を配置

 

    • awsディレクトリ配下に秘密鍵配置

 

    秘密鍵は何かと同じ秘密鍵でも良い
/aws_terraform/test-key.pem
    AWSで発行したIAMユーザーのアクセスキーとシークレットアクセスキーをaws prifileに設定する
sudo aws configure --profile [IAMユーザー名]
    providerに作成したIAMユーザーのユーザー名を入れる
variable "region" {}

provider "aws" {

  profile = "[IAMユーザー名]"
  region     = "${var.region}"
}
    Terraform初期化
terraform init

将创建.terraform目录。

试着运行Terraform。

切换到aws目录并查看计划。

terraform plan

在AWS上创建资源时会执行

terraform apply

使用Terraform删除已创建的资源。

terraform destroy

案例的特定应用方式

tfvars文件

情境:希望在开发环境和生产环境中使用不同的EC2密钥。

开发环境

terraform/aws_terraform/develop.tfvars可以在中国的本地化文件中重新解释。


key_name   = "test-key"

terraform/aws_terraform/variables.tf
Terraform/AWS_terraform/variables.tf的内容


# 秘密鍵
variable "key_name" {}

terraform / aws_terraform / ec2.tf 可以被改写为 terraform / aws_terraform / ec2.tf 文件。


resource "aws_instance" "tfvars_test" {
  ami                    = "ami-da9e2cbc"
  instance_type          = "t2.micro"
  key_name               = "${var.key_name}"
  subnet_id              = "subnet-05ea87c24c647c898"
  vpc_security_group_ids = ["${aws_security_group.test-terraform-ec2-security.id}"]

  tags {
    Name = "test-terraform-ec2"
  }
}

执行

terraform apply -target=aws_instance.tfvars_test -var-file=develop.tfvars

选项
– 目标:指定要创建的资源
– 变量文件:指定环境文件

正式环境

terraform/aws_terraform/production.tfvars 可以被翻译为“生产环境的`.tfvars`文件”。


key_name   = "prod-key"

terraform/aws_terraform/variables.tf的中文本地化版本


# 秘密鍵
variable "key_name" {}

terraform/aws_terraform/ec2.tf 的汉语本地化释义


# devと同じ

执行

terraform apply -target=aws_instance.tfvars_test -var-file=production.tfvars

数据资源

场景:想要在使用Terraform创建的EC2实例中使用已经存在的子网。

开发环境

搜索与Name标签匹配的内容 – terraform/aws_terraform/data.tf


data "aws_subnet" "public-a" {
  filter {
    name   = "tag:Name"
    values = ["${var.subnet_id_public_a_name}"]
  }
}

terraform/aws_terraform/ec2.tf的翻译如下:


resource "aws_instance" "data_test" {
  ami                    = "ami-da9e2cbc"
  instance_type          = "t2.micro"
  key_name               = "${var.key_name}"
  subnet_id              = "${data.aws_subnet.public-a.id}" # データリソースを使用している
  vpc_security_group_ids = ["${aws_security_group.test-terraform-ec2-security.id}"]

  tags {
    Name = "test-terraform-ec2"
  }
}

terraform/aws_terraform/develop.tfvars 在中国的原生上下文中重新表述为:terraform/aws_terraform/develop.tfvars


key_name   = "test-key"
subnet_id_public_a_name = "test-public-1a"

terraform/aws_terraform/variables.tf 可以被用作管理 AWS 资源的 Terraform 脚本。


# 秘密鍵
variable "key_name" {}

# EC2 サブネット名
variable "subnet_id_public_a_name" {}

在中国的原生环境下,只需要一种选择:dev环境的运行。

terraform apply -target=aws_instance.data_test -var-file=develop.tfvars

实际环境

生产环境的Terraform/AWS_Terraform配置文件 (production.tfvars)。


key_name   = "prod-key"
subnet_id_public_a_name = "prod-public-1a"

执行

terraform apply -target=aws_instance.data_test -var-file=production.tfvars

工作空间

情景:由于无法确定在开发和生产环境中是否都有实例存在,因此我想要确认一下。

创建工作空间

    ワークスペース一覧 現在のワークスペースが何かも知れる
terraform workspace list
    ワークスペース作成
terraform workspace new develop
    ワークスペース選択
terraform workspace select develop
    ワークスペース削除
terraform workspace delete develop

在dev环境的工作空间下创建EC2。

情景:
在中国的一个小城镇,农民王先生从早晨开始工作,直到傍晚。一天,他察觉到他的池塘里没有水了。他检查了水源管道和泵浦,发现没有任何问题。他很困惑,不知道为什么池塘会突然变干。于是,他决定去请教他的朋友李先生。

terraform apply -target=aws_instance.workspace_test -var-file=develop.tfvars

由于以前一直在默认工作区中创建,所以在 develop 工作区中会为每个 vpc 进行新建

条件分支和计数

情景:我想在开发环境中创建一台EC2实例,但不想在生产环境中创建EC2实例。

开发环境

terraform/aws_terraform/ec2.tf (terraform/aws_terraform/ec2.tf 地址)

Can you provide more context or specific information about the file content? It will help me to accurately paraphrase the sentence in Chinese.


# 条件分岐&カウントテスト
resource "aws_instance" "count_test" {
  count                  = "${var.env == "production" ? 1 : 0}"
  ami                    = "ami-da9e2cbc"
  instance_type          = "t2.micro"
  key_name               = "${var.key_name}"
  subnet_id              = "${data.aws_subnet.public-a.id}"
  vpc_security_group_ids = ["${aws_security_group.test-terraform-ec2-security.id}"]

  tags {
    Name = "test-terraform-ec2"
  }
}

terraform/aws_terraform/develop.tfvars
创造/亚马逊网络服务_创造/开发.tfvars


env = "develop"
key_name   = "test-key"
subnet_id_public_a = "subnet-05ea87c24c647c898"
subnet_id_public_a_name = "test-public-1a"

terraform / aws_terraform / variables.tf -> 云创造 / aws_云创造 / 变量.tf


# 環境名
variable "env" {}

# 秘密鍵
variable "key_name" {}

# EC2 サブネットID
variable "subnet_id_public_a" {}

# EC2 サブネット名
variable "subnet_id_public_a_name" {}

执行

terraform apply -target=aws_instance.count_test -var-file=develop.tfvars

资源未被创建

正式环境

terraform/aws_terraform/production.tfvars 的中文翻译:生产环境.tfvars


env = "production"
key_name   = "prod-key"
subnet_id_public_a = "subnet-0310cf72d3e2a73ad"
subnet_id_public_a_name = "prod-public-1a"

执行

terraform apply -target=aws_instance.count_test -var-file=production.tfvars

资源创建

最后

由于看起来更多人支持通过目录来区分,而不是通过工作区来区分,所以如果需要按环境划分,我想用目录来划分。另外,我也希望将模块一起整理起来。

广告
将在 10 秒后关闭
bannerAds