nodejs서버를 code Deploy를 활용하여 배포하려고 했으나 이 오류를 마주했다.
2023-05-21 01:58:44 INFO [codedeploy-agent(731)]:
[Aws::CodeDeployCommand::Client 400 0.034523 0 retries]
poll_host_command(host_identifier:"arn:aws:ec2:ap-northeast-2:634327468890:instance/i-123812e")
Aws::CodeDeployCommand::Errors::AccessDeniedException
이 오류를 맞이했을때 체크해봐야 할 건 두가지다.
IAM 권한 확인하기
EC2 IAM : S3, CodeDeploy에 대한 권한들
AmazonEC2RoleforAWSCodeDeploy, S3FullAccess/ ReadOnly등
CodeDeploy IAM :
AWSCodeDeployRole
사용자 IAM :
S3, EC2관련 권한들
CodeDeploy의 실행권한 확인하기
당신의 계정.. root가 아닐수도 있습니다..
root가 아닌 경우, code deploy가 권한에 제약이 걸려서 Access Deined가 발생할 수 있다.
내경우는 이경우였는데, 이건 확인안하고 괜히 IAM 권한설정만 들여다 보고 있으니 고쳐질리 만무하다...
ps aux로 확인하기
ps aux는모든 프로세스를 확인할 수 있는 명령어다.
여기서 codedeploy-agent를 찾고 가장 왼쪽을 보면 어떤 프로파일로 실행되는지 확인할 수 있다.
이게 root가 아니다?
아래 링크에서 시키는대로 하면된다.
https://repost.aws/ko/knowledge-center/codedeploy-agent-non-root-profile
runas관련
appspec.yml에 hooks 에 runas가 있고, 이것이 agent를 동작시키는 권한과 같은 경우 이런 오류를 보게 될 것이다.
Script at specified location: scripts/after-deploy.sh run as user ubuntu failed with exit code 1
LifecycleEvent - AfterInstall
Script - scripts/after-deploy.sh
[stderr]Password: su: Authentication failure
runas는 sh파일을 실행시킬 사용자를 지정하는데 사용된다. 그냥 없애면 배포 에이전트를 실행하는 사용자의 권한을 가지게 되어 잘 실행된다.
삽질...
일단 구글에 있는 cannot reach instance service관련 사이트는 다들어가봤다...
어디 물어볼 곳이 없어서 정말 힘들었다.
AWS스터디에서 해결해서 정말 다행이다.
스터디 최고...!
처음으로 AWS repost에 글을써봤다..ㅎㅎ
대시보드 1등, 2등에 있는 분들이 ec2 재시작이나 code deploy 재시작을 해보라고했지만...
전혀 도움이 되지않았다.