InstanceAgent :: Plugins :: CodeDeployPlugin :: CommandPoller:缺少凭据

Dav*_*tti 13 github amazon-ec2 amazon-web-services amazon-iam aws-code-deploy

我正在尝试使用AWS CodeDeploy将GitHub项目部署到EC2实例.在关注了2个视频教程之后,我还是得到了以下错误:

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 credentials - please check if this instance was started with an IAM instance profile
Run Code Online (Sandbox Code Playgroud)

我有两个IAM:

  • CodeDeployInstanceRole
  • CodeDeployServiceRole

EC2实例的CodeDeployInstanceRole

策略名称:AmazonEC2RoleforAWSCodeDeploy

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion",
        "s3:ListObjects"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

策略名称:AutoScalingNotificationAccessRole

{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Resource": "*",
        "Action": [
            "sqs:SendMessage",
            "sqs:GetQueueUrl",
            "sns:Publish"
        ]
      }
    ]
}
Run Code Online (Sandbox Code Playgroud)

信任关系

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "codedeploy.amazonaws.com",
          "ec2.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

CodeDeploy的CodeDeployServiceRole

策略名称: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": "*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

信任关系

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "codedeploy.amazonaws.com",
          "ec2.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

EC2实例

我根据Debian创建自己的图像,所以我已经安装了NodeJS.当我旋转新实例时,我还在User data文本区域粘贴以下代码以确保安装了CodeDeploy.

#!/bin/bash -x

REGION=$(curl 169.254.169.254/latest/meta-data/placement/availability-zone/ | sed 's/[a-z]$//') &&

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
Run Code Online (Sandbox Code Playgroud)

调试

如果我登录我创建的EC2实例,并执行以下命令:

echo $(curl http://169.254.169.254/latest/meta-data/iam/security-credentials/)
Run Code Online (Sandbox Code Playgroud)

我收到以下回复 CodeDeployInstanceRole

当我然后执行

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/CodeDeployInstanceRole
Run Code Online (Sandbox Code Playgroud)

我收到以下回复

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

在GitHub上,我看到CodeDeploy永远不会访问我的repo,即使我使用GitHub选择部署,我设置了正确的repo名称和提交ID.

在此输入图像描述

题

我错过了什么?

MMa*_*ian 13

我遇到了同样的问题.简要说明导致问题的原因:

  • 启动实例,不附加任何角色
  • 然后在该计算机上安装codedeploy-agent
  • 最后只将IAM角色附加到计算机上

结果:我收到错误: Missing credentials - please check if this instance was started with an IAM instance profile

解决方案:重新启动codedeploy代理.使用:

sudo service codedeploy-agent restart
Run Code Online (Sandbox Code Playgroud)

错误现在应该消失了!

  • 我做了完全相同的事情并修复了它. (3认同)

Nik*_*dze 9

我收到“请检查此实例是否是使用 IAM 实例配置文件启动的”。要检查您的实例是否在没有 IAM 配置文件的情况下启动,请转到 AWS 控制台 -> 您的实例 -> 检查描述选项卡的“IAM 角色”值,如果它为空,则您已启动没有 IAM 的实例,以下是解决问题的方法:

  1. 转到 IAM 控制台 -> 角色 -> 创建新角色

    选择 AWS 服务 -> EC2 -> 下一步:权限(不要更改任何内容) -> 下一步:标签 -> 下一步:审查 -> 提供名称并单击创建角色。

  2. 转到 AWS EC2 控制台 -> 选择实例 -> 操作 -> 实例设置 -> 附加/替换 IAM 角色 -> 选择您刚刚创建的 IAM 角色

  3. 重启 codedeploy 代理: sudo service codedeploy-agent restart

  4. 尝试再次部署,它应该可以工作


Dav*_*tti 4

结果发现默认情况下 Debian 没有curl安装。curl在发出curl 请求以获取服务器正在运行的区域之前进行安装是Bash 脚本中缺失的部分。