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を持っています:
ポリシー名: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"
}
]
}
ポリシー名: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"
}
]
}
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がリポジトリにアクセスしないことがわかります。
何が足りないのですか?
デフォルトでは、Debianにはcurl
がインストールされていないことがわかりました。サーバーが実行されているリージョンを取得するためにcurlリクエストを行う前にcurl
をインストールすることは、Bashスクリプトに欠けていた部分でした。
私は同じ問題に遭遇しました。問題の原因を簡単に説明します。
結果:エラーが発生します:Missing credentials - please check if this instance was started with an IAM instance profile
解決策:codedeployエージェントを再起動します。使用する:
Sudo service codedeploy-agent restart
エラーはもうなくなっているはずです!
インスタンスロールの権限は私にはよく見えます。ただし、IAMインスタンスプロファイルは、インスタンスが最初に起動されたときにのみ追加されました。インスタンスを起動する前に、インスタンスの役割に適切な権限があることを確認できますか?