首页 > 解决方案 > 使用 Terraform 通过 EC2 创建时,如何向 AWS EBS 添加标签?

问题描述

我正在尝试为使用 PROD 的 AMI 的 TEST 环境创建 EC2 实例。一切都正确创建,但我无法弄清楚如何将标签添加到随之创建的 EBS 卷中?

标签在 EC2 上工作,但不会应用于 EBS 或根卷。我也尝试在它们上添加标签映射,但这是无效的。有任何想法吗?

provider "aws" {
  region = "us-east-1"
}

data "aws_ami" "existing_sft_ami" {
  most_recent = true

  filter {
    name   = "name"
    values = [var.prod_name]
  }
  owners = [
    var.aws_account_id]
}

data "aws_subnet" "subnet" {
  id = var.aws_subnet_id
}

resource "aws_instance" "sftp" {
  ami           = data.aws_ami.existing_sft_ami.id
  instance_type = "t2.micro"
  availability_zone = var.availability_zone
  subnet_id = data.aws_subnet.subnet.id
  key_name = var.ssh_key_name
  vpc_security_group_ids = [var.aws_security_group_id]
  root_block_device {
    delete_on_termination = true
  }
  ebs_block_device {
    device_name = "/dev/sdb"
    delete_on_termination = true
  }
  tags = {
    Name = var.name
    Owner = var.owner
    Created = formatdate("DD MMM YYYY hh:mm ZZZ", timestamp())
    Environment = "TEST"
  }
}

标签: amazon-ec2terraform

解决方案


您需要使用附加volume_tags参数来标记卷。另外,为了让你的代码更干一点,你可以用一个locals块来做到这一点。

locals {
    tags = {
        Name = var.name
        Owner = var.owner
        Created = formatdate("DD MMM YYYY hh:mm ZZZ", timestamp())
        Environment = var.environment
    }
}

resource "aws_instance" "sftp" {
  ami           = data.aws_ami.existing_sft_ami.id
  instance_type = "t2.micro"
  availability_zone = var.availability_zone
  subnet_id = data.aws_subnet.subnet.id
  key_name = var.ssh_key_name
  vpc_security_group_ids = [var.aws_security_group_id]
  root_block_device {
    delete_on_termination = true
  }
  ebs_block_device {
    device_name = "/dev/sdb"
    delete_on_termination = true
  }
  tags = local.tags
  volume_tags = local.tags
}


推荐阅读