Добавление тегов в службу ECS - InvalidParameterException - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть полностью работающее приложение Fargate, запущенное в AWS.Я вернулся, чтобы добавить теги ко всем моим ресурсам, чтобы лучше отслеживать затраты в микросервисной архитектуре.После добавления тегов в мой ресурс aws_ecs_service при запуске terraform apply я получил следующее исключение:

aws_ecs_service.main: error tagging ECS Cluster (arn:aws:ecs:*region*:*account_number*:service/*service_name*): InvalidParameterException: Long arn format must be used for tagging operations

После некоторых исследований я обнаружил, что 15 ноября AWS представил новый формат ARN и ID: https://aws.amazon.com/ecs/faqs/#Transition_to_new_ARN_and_ID_format

Я знаю, что мне нужно применить настройки к роли IAM, назначенной моей службе, но я не могу понять, как это сделать.Вот ссылка на документацию AWS для настроек учетной записи: https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_Setting.html

Ниже приведен фрагмент ресурса службы ecs, а также определение задачи:

resource "aws_ecs_task_definition" "app" {
  family                   = "${var.app_name}"
  network_mode             = "awsvpc"
  requires_compatibilities = ["FARGATE"]
  cpu                      = "${var.app_cpu}"
  memory                   = "${var.app_memory}"
  execution_role_arn       = "${var.execution_role_arn}"
  task_role_arn            = "${var.task_role_arn}"

  tags {
    Name        = "${var.app_name}-ecs-task-definition-${var.environment}"
    Service     = "${var.app_name}"
    Environment = "${var.environment}"
    Cost_Center = "${var.tag_cost_center}"
    Cost_Code   = "${var.tag_cost_code}"
  }

  container_definitions = <<DEFINITION
[
  {
    "cpu": ${var.app_cpu},
    "image": "${var.app_image}",
    "memory": ${var.app_memory},
    "name": "${var.app_name}",
    "networkMode": "awsvpc",
    "logConfiguration": {
      "logDriver": "awslogs",
      "options": {
        "awslogs-group": "stash-${var.app_name}",
        "awslogs-region": "${var.aws_region}",
        "awslogs-stream-prefix": "${var.app_name}"
      }
    },
    "portMappings": [
      {
        "containerPort": ${var.app_port},
        "hostPort": ${var.app_port}
      }
    ]
  }
]
DEFINITION
}

resource "aws_ecs_service" "main" {
  name            = "${var.app_name}-service"
  cluster         = "${var.cluster_id}"
  task_definition = "${aws_ecs_task_definition.app.arn}"
  desired_count   = "1"
  launch_type     = "FARGATE"

  network_configuration {
    security_groups = ["${var.security_groups}"]
    subnets         = ["${var.subnets}"]
  }

  load_balancer {
    target_group_arn = "${var.target_group_arn}"
    container_name   = "${var.app_name}"
    container_port   = "${var.app_port}"
  }

  lifecycle {
    ignore_changes = ["desired_count"]
  }

  tags {
    Name        = "${var.app_name}-ecs-service-${var.environment}"
    Service     = "${var.app_name}"
    Environment = "${var.environment}"
    Cost_Center = "${var.tag_cost_center}"
    Cost_Code   = "${var.tag_cost_code}"
  }
}

Вот взглядв мой ресурс безопасности:

resource "aws_iam_role" "task_role" {
  name = "${var.app_name}-task-${var.environment}"

  assume_role_policy = <<END
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
END
}

Я использую версию Terraform 0.11.8.

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Поскольку вы упомянули terraform, позвольте мне добавить это (я также использую terraform и столкнулся с очень похожей проблемой).Вы можете использовать AWS CLI с подкомандой ECS put-account-setting, чтобы установить три LongArnFormat

aws ecs put-account-setting --name containerInstanceLongArnFormat --value enabled --region _yourRegion_
aws ecs put-account-setting --name serviceLongArnFormat           --value enabled --region _yourRegion_
aws ecs put-account-setting --name taskLongArnFormat              --value enabled --region _yourRegion_

Ссылка: AWS Doc

0 голосов
/ 05 декабря 2018

В соответствии с онлайн-документацией для выбора в новом формате ARN вам понадобится доступ учетной записи root для участия в определенной роли IAM.

Шаги, подробно описанные в разделеПри указанном выше статусе ссылки вы должны

  • Создать роль IAM для своего кластера (вы сделали это)
  • Войдите в систему как пользователь root
  • Отправляйтесь в optна странице и выберите эту роль IAM для выбора в
  • Надеюсь, что вы получите прибыль!

Обратите внимание, что вы также можете подписаться на весь свой аккаунт до января 2020 года, после чегоэто изменение станет обязательным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...