IT 기술/AWS

[AWS] CodeDeploy 에러 수정

to,min 2024. 10. 10. 16:27

CodeDeploy agent was not able to receive the lifecycle event. Check the CodeDeploy agent logs on your host and make sure the agent is running and can connect to the CodeDeploy server.

 

CodeDeploy 에서 아래와 같이 초기부터 실행이 안되는 에러를 마주했다.

 

관련 로그는 CodeDeploy가 배포하는 서버에 접속하여 아래 커맨드로 조회 가능하다.

less /var/log/aws/codedeploy-agent/codedeploy-agent.log

 

 

내 경우엔 아래와 같이 IAM 에러가 나왔다.

2024-10-10T05:33:56 ERROR [codedeploy-agent(123974)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please check if this instance was started with an IAM instance profile
2024-10-10T05:34:06 INFO  [codedeploy-agent(123974)]: Version file found in /opt/codedeploy-agent/.version with agent version OFFICIAL_1.7.0-92_rpm.
2024-10-10T05:34:06 ERROR [codedeploy-agent(123974)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Error polling for host commands: Aws::Errors::MissingCredentialsError - unable to sign request without credentials set - /opt/codedeploy-agent/vendor/gems/aws-sdk-core-3.121.1

 

 

EC2에 IAM 역할을 기입한걸 빼먹었었다

EC2에 부여할 역할 생성 하였다

 

 

ec2 들어가서 대상 인스턴스의 

작업 -> 보안 -> IAM 역할 수정에서 생성한 IAM 역할을 연결해줬다.

 

 

 

환경변수 or args 전달 안되는 문제.

appspec.yml 에서 아래 부분에 location 뒤에 arg 를 주던, env 를 주던 적용이 안되는 이슈가 있었다.

내부 스크립트 내 기본 환경변수 참고하여 해결했다.

hooks:
  AfterInstall:
    - location: scripts/deploy.sh
      timeout: 300
      runas: ec2-user

 

 

docker-compose: command not found

CodeDeploy 로 실행되는 환경에선 /usr/local/bin 파일의 경로를 Path 로 안잡아서 따로 추가했다.

 

deploy.sh

# docker-compose 경로를 PATH에 추가
export PATH=$PATH:/usr/local/bin

 

 

 

디버깅 방법

AWS Console 에서 확인이 안된다면, 배포 대상 서버에서 log를 확인하며 진행하면 편하다.

tail -f /var/log/aws/codedeploy-agent/codedeploy-agent.log

 

 

그리고 appspec.yml 에서 설정한 destination 경로에 파일 자체가 압축이 풀려 존재하지 않는다면

appspec.yml 자체를 잘못 작성한 것이다.