Отправка журналов докеров в AWS CloudWatch через Terraform

Моя цель - отправить журналы контейнера докеров в CloudWatch через terraform. Это роль ECS, которую я использую для IAM:

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": ["ecs.amazonaws.com", "ec2.amazonaws.com"]
      },
      "Effect": "Allow"
    }
  ]
}

А вот политика ролей службы ECS:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticloadbalancing:Describe*",
        "elasticloadbalancing:DeregisterInstancesFromLoadBalancer",
        "elasticloadbalancing:RegisterInstancesWithLoadBalancer",
        "ec2:Describe*",
        "ec2:AuthorizeSecurityGroupIngress",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

В моем определении задачи для контейнера докеров, среди прочего, у меня есть это для ведения журнала cloudwatch:

  "logConfiguration": {
    "logDriver": "awslogs",
    "options": {
        "awslogs-group": "awslog-mylogs",
        "awslogs-region": "eu-west-1",
        "awslogs-stream-prefix": "awslogs-mylogs-stream"
    }
  }

(У меня есть группа журналов awslog-mylogs, предварительно созданная через консоль AWS).

Проблема в том, что если я разверну экземпляр AWS (через Terraform apply) без указанной выше конфигурации ведения журнала для контейнера, все будет работать нормально, и мой контейнер запущен и работает (за исключением, конечно, журналов, которые не отправляются в Cloudwatch). Как только у меня есть эта информация о конфигурации ведения журнала, экземпляр EC2 запускается, но контейнер не запускается должным образом. После ssh-подключения к экземпляру EC2 я обнаружил, что контейнер докера вышел из строя.

Есть идеи, что здесь не так? Что мне может не хватать при настройке отправки журналов в Cloudwatch через terraform?


person Asif Iqbal    schedule 07.07.2017    source источник


Ответы (1)


Не могли бы вы проверить, все ли вы установили разрешения и включили ли Cloudwatch в политику ролей службы ECS?

  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudwatch:GetMetricStatistics",
        "cloudwatch:ListMetrics",
        "cloudwatch:PutMetricData",
        "ec2:DescribeTags",
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:DescribeLogStreams",
        "logs:PutSubscriptionFilter",
        "logs:PutLogEvents"
      ],
      "Resource": [
        "arn:aws:logs:*:*:*"
      ]
    }
  ]
}
EOF
person BMW    schedule 07.07.2017
comment
Спасибо. Как включить CloudWatch в сервис ECS? - person Asif Iqbal; 07.07.2017
comment
скопируйте и вставьте в существующую политику обслуживания ECS (вторую часть ваших кодов) - person BMW; 08.07.2017