如何在 Terraform 中标记 ECS 生成的 EC2 实例?

如何在 Terraform 中标记 ECS 生成的 EC2 实例?

我有一个 ECS 服务,它生成一些容器:

resource "aws_ecs_service" "rocketchat" {
  name            = "rocketchat-ecs-service"
  cluster         = "${aws_ecs_cluster.rocketchat.id}"
  task_definition = "${aws_ecs_task_definition.rocketchat.arn}"
  desired_count   = 2
  iam_role        = "${aws_iam_role.ecs_service.name}"
...

但是它创建的 EC2 实例没有“名称”标签。我以为这name_prefix就是我要找的,但它不起作用:

resource "aws_launch_configuration" "rocketchat" {
  security_groups             = ["${aws_security_group.instance_sg.id}"]
  name_prefix                 = "${var.project_prefix}-rocketchat-"
  key_name                    = "${aws_key_pair.circles_rocketchat.key_name}"
...

该容器的任务定义也有一个名称字段,它也不起作用:

[
  {
    "name": "rocketchat",
    "cpu": 256,
    "essential": true,
...

亚马逊文档在这里说“创建时标记”不支持“启动模板”,但我不确定这是否完全相关;尤其是当您在同一个集群上使用我的其他 ECS 服务时,该集群没有负载均衡器,因此没有启动配置。

编辑:

@B.Miller 下面的建议没有标记实际实例,但它确实显示在 EC2 > Auto Scaling Groups > Tags 下的控制台中

+-------------+---------------------+-------------------+ | Key | Value | Tag New Instances | +-------------+---------------------+-------------------+ | Environment | dev | Yes | +-------------+---------------------+-------------------+ | Name | rocketchat-instance | Yes | +-------------+---------------------+-------------------+

答案1

name_prefix使用前缀为启动配置创建一个随机的唯一名称,而不是为其启动的内容添加前缀。name任务定义中的是任务定义本身的名称。由于您使用的是启动配置,因此我假设您使用的是自动缩放组. 自动缩放组允许您设置标签然后传播这些标签

例如你可以指定单独的标签并让它们传播

resource "aws_autoscaling_group" "default" {
  ...
  tags = [
    {
      key                 = "explicit1"
      value               = "value1"
      propagate_at_launch = true
    },
    {
      key                 = "explicit2"
      value               = "value2"
      propagate_at_launch = true
    },
  ]
  ...
}

编辑:请注意,这适用于 ECS-Optimised Amazon AMI,但不适用于 CoreOS。

相关内容