[AWS] CodeDeploy EC2에 배포 파일이 제대로 전달되지 않는 버그

이명범·2023년 3월 13일
0

트러블슈팅

목록 보기
8/8
post-thumbnail

문제

젠킨스와 CodeDeploy를 이용해 S3까지는 배포 파일을 올바르게 전달했지만, S3에서 인스턴스로 배포 파일이 제대로 전달되지 않았다.

The overall deployment failed because too many individual instances failed deployment, too few healthy instances are available for deployment, or some instances in your deployment group are experiencing problems.
너무 많은 개별 인스턴스가 배포에 실패했거나 배포에 사용할 수 있는 정상 인스턴스가 너무 적거나 배포 그룹의 일부 인스턴스에 문제가 발생하여 전체 배포에 실패했습니다.

Ubuntu에 설치해둔 CodeDeploy Agent의 로그를 확인해보았다. 로그는 /var/log/aws/codedeploy-agent/codedeploy-agent.log에서 확인할 수 있다.

Missing credentials - please check if this instance was started with an IAM instance profile

에러는 위와 같았다.

원인

문제의 원인은 EC2 인스턴스에 적절한 권한이 설정되어있지 않았기 때문이었다.

EC2에 S3에 저장된 배포 파일을 전송하기 위해서는 CodeDeployInstanceRole이라는 권한이 필요한데, 나의 경우에는 오토 스케일링을 하기 위한 launch template에 IAM 권한 등록을 설정해놓지 않았기 때문에 권한이 없었던 것이다.

참고로 CodeDeployInstanceRole가 제공하는 권한은 다음과 같다.

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

즉, S3에서 객체를 가져오는 권한이 없었기 때문에 발생한 에러이다.

해결

launch template 생성고급 세부 정보IAM 인스턴스 프로파일에서 CodeDeployInstanceRole이 포함된 권한을 설정해준다.

profile
백엔드 개발자가 될거야

0개의 댓글