InstanceAgent :: Plugins :: CodeDeployPlugin :: CommandPoller: cnetworkingenciales faltantes

Estoy intentando implementar un proyecto GitHub en una instancia EC2 utilizando AWS CodeDeploy. Después de seguir 2 videos tutoriales y un montón de respuestas de Google, sigo recibiendo el siguiente error:

2017-02-01 12:20:08 INFO [codedeploy-agent(1379)]: master 1379: Spawned child 1/1 2017-02-01 12:20:09 INFO [codedeploy-agent(1383)]: On Premises config file does not exist or not readable 2017-02-01 12:20:09 INFO [codedeploy-agent(1383)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandExecutor: Archives to retain is: 5} 2017-02-01 12:20:09 INFO [codedeploy-agent(1383)]: Version file found in /opt/codedeploy-agent/.version. 2017-02-01 12:20:09 ERROR [codedeploy-agent(1383)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing cnetworkingentials - please check if this instance was started with an IAM instance profile 

Tengo dos IAM:

  • CodeDeployInstanceRole
  • CodeDeployServiceRole

CodeDeployInstanceRole para la instancia de EC2

Nombre de la política : AmazonEC2RoleforAWSCodeDeploy

 { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:ListObjects" ], "Effect": "Allow", "Resource": "*" } ] } 

Nombre de la política : AutoScalingNotificationAccessRole

 { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Resource": "*", "Action": [ "sqs:SendMessage", "sqs:GetQueueUrl", "sns:Publish" ] } ] } 

Relación de confianza

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

CodeDeployServiceRole para CodeDeploy

Nombre de la política : AWSCodeDeployRole

 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CompleteLifecycleAction", "autoscaling:DeleteLifecycleHook", "autoscaling:DescribeAutoScalingGroups", "autoscaling:DescribeLifecycleHooks", "autoscaling:PutLifecycleHook", "autoscaling:RecordLifecycleActionHeartbeat", "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup", "autoscaling:EnableMetricsCollection", "autoscaling:DescribeAutoScalingGroups", "autoscaling:DescribePolicies", "autoscaling:DescribeScheduledActions", "autoscaling:DescribeNotificationConfigurations", "autoscaling:DescribeLifecycleHooks", "autoscaling:SuspendProcesses", "autoscaling:ResumeProcesses", "autoscaling:AttachLoadBalancers", "autoscaling:PutScalingPolicy", "autoscaling:PutScheduledUpdateGroupAction", "autoscaling:PutNotificationConfiguration", "autoscaling:PutLifecycleHook", "autoscaling:DescribeScalingActivities", "autoscaling:DeleteAutoScalingGroup", "ec2:DescribeInstances", "ec2:DescribeInstanceStatus", "ec2:TerminateInstances", "tag:GetTags", "tag:GetResources", "sns:Publish", "cloudwatch:DescribeAlarms", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeInstanceHealth", "elasticloadbalancing:RegisterInstancesWithLoadBalancer", "elasticloadbalancing:DeregisterInstancesFromLoadBalancer" ], "Resource": "*" } ] } 

Relación de confianza

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

Instancia EC2

Hizo girar mi propia image que he creado basado en Debian entonces tengo NodeJS ya instalado. Cuando hago girar la nueva instancia, también pego el siguiente código en el área de text User data para asegurarme de que CodeDeploy está instalado.

 #!/bin/bash -x REGION=$(curl 169.254.169.254/latest/meta-data/placement/availability-zone/ | sed 's/[az]$//') && sudo apt-get update -y && sudo apt-get install -y python-pip && sudo apt-get install -y ruby && sudo apt-get install -y wget && cd /home/admin && wget https://aws-codedeploy-$REGION.s3.amazonaws.com/latest/install && chmod +x ./install && sudo ./install auto && sudo apt-get remove -y wget && sudo service codedeploy-agent start 

Depuración

Si inicio session en la instancia de EC2 que tengo crear, y ejecuto el siguiente command:

 echo $(curl http://169.254.169.254/latest/meta-data/iam/security-cnetworkingentials/) 

Obtengo la siguiente respuesta CodeDeployInstanceRole

Cuando luego ejecuto

 curl http://169.254.169.254/latest/meta-data/iam/security-cnetworkingentials/CodeDeployInstanceRole 

Recibo la siguiente respuesta

 { "Code" : "Success", "LastUpdated" : "2017-02-01T12:38:07Z", "Type" : "AWS-HMAC", "AccessKeyId" : "THE_KEY", "SecretAccessKey" : "SECRET", "Token" : "TOKEN", "Expiration" : "2017-02-01T19:08:43Z" } 

En GitHub veo que CodeDeploy nunca accede a mi repository, incluso cuando selecciono la implementación usando GitHub, configuro el nombre de repository correcto y confirmo el ID.

enter image description here

Pregunta

¿Qué me estoy perdiendo?

Los permissions de function de instancia me parecen buenos. Pero el perfil de instancia de IAM se agregó solo la primera vez que se lanzó la instancia. ¿Podría asegurarse de que la function de instancias tuviera los permissions adecuados antes de iniciar las instancias?

Resulta que por defecto Debian no tiene curl instalado. La installation de curl antes de realizar la request curl para get la región en la que se ejecuta el server era la parte faltante en el script Bash.