2017-07-07 5 views
0

Mon objectif est d'envoyer des journaux de conteneur de docker à CloudWatch via terraform. Tel est le rôle ECS que j'utilise pour IAM:Envoi de journaux de docker à AWS CloudWatch via Terraform

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

Et voici la politique de rôle de service ECS:

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

Dans ma définition de tâche pour conteneur docker, entre autres choses que j'ai ce pour l'enregistrement CloudWatch:

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

(Je le groupe awslog-mylogs journal pré-créé via la console AWS). Le problème est que si je lance l'instance AWS (via Terraform apply) sans la configuration de journalisation ci-dessus pour le conteneur, tout fonctionne correctement et mon conteneur est opérationnel (à l'exception bien sûr, les journaux ne sont pas envoyés à Cloudwatch). Dès que j'ai cette information de configuration de journalisation en place, l'instance EC2 se déroule mais le conteneur ne démarre pas correctement. Après ssh-ing dans l'instance EC2, je trouve que le conteneur docker renfloué.

Une idée de ce qui ne va pas ici? Que pourrais-je manquer en ce qui concerne la configuration de l'envoi de journaux à Cloudwatch via terraform?

Répondre

3

Pourriez-vous vérifier si vous avez défini toutes les autorisations et si vous incluez également Cloudwatch dans la stratégie de rôle de service 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 
+0

Merci. Comment inclure CloudWatch dans le service ECS? –

+1

copier et coller à votre politique de service ECS existant (la deuxième partie de vos codes) – BMW