web-dev-qa-db-ja.com

InstanceAgent :: Plugins :: CodeDeployPlugin :: CommandPoller:資格情報がありません

AWSCodeDeployを使用してGitHubプロジェクトをEC2インスタンスにデプロイしようとしています。 2つのビデオチュートリアルとGoogleの回答をたどった後も、次のエラーが発生します。

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

私は2つのIAMを持っています:

  • CodeDeployInstanceRole
  • CodeDeployServiceRole

EC2インスタンスのCodeDeployInstanceRole

ポリシー名:AmazonEC2RoleforAWSCodeDeploy

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

ポリシー名:AutoScalingNotificationAccessRole

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

信頼関係

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

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": "*"
    }
  ]
}

信頼関係

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

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

デバッグ

作成したEC2インスタンスにログインし、次のコマンドを実行した場合:

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

次の応答がありますCodeDeployInstanceRole

その後実行すると

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

次のような応答があります

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

GitHubで、GitHubを使用してデプロイを選択し、正しいリポジトリ名とコミットIDを設定しても、CodeDeployがリポジトリにアクセスしないことがわかります。

enter image description here

質問

何が足りないのですか?

14
David Gatti

デフォルトでは、Debianにはcurlがインストールされていないことがわかりました。サーバーが実行されているリージョンを取得するためにcurlリクエストを行う前にcurlをインストールすることは、Bashスクリプトに欠けていた部分でした。

2
David Gatti

私は同じ問題に遭遇しました。問題の原因を簡単に説明します。

  • ロールがアタッチされていないインスタンスを起動します
  • 次に、そのマシンにcodedeploy-agentをインストールします
  • 最後にのみIAMロールをマシンにアタッチします

結果:エラーが発生します:Missing credentials - please check if this instance was started with an IAM instance profile

解決策:codedeployエージェントを再起動します。使用する:

Sudo service codedeploy-agent restart

エラーはもうなくなっているはずです!

20
MMagician

インスタンスロールの権限は私にはよく見えます。ただし、IAMインスタンスプロファイルは、インスタンスが最初に起動されたときにのみ追加されました。インスタンスを起動する前に、インスタンスの役割に適切な権限があることを確認できますか?

0
binbinlu