운영중인 서비스의 Blue/Green 배포 중 신규 배포를 위한 Replacement의 Auto Scaling Group 내부에서 인스턴스가 제대로 생성되지 않는 문제가 발생했습니다. 인스턴스가 생성되지 않으니 배포를 위한 준비를 할 수 없어 배포 자체를 진행할 수 없는 상황이었습니다.
AWS Auto Scaling Group에서 인스턴스가 제대로 생성되지 않은 이유와 해결할 수 있는 방법을 정리합니다.
원인
현재 운영중인 서비스에서 어플리케이션 배포를 위해 AWS의 CodeDeploy 서비스를 사용하고 있습니다. CodeDeploy 사용 시 신규로 올라온 인스턴스의 프로비저닝을 위해 Auto Scaling Group에 Lifecycle Hook이 자동으로 추가됩니다. 해당 Hook은 Scale out 시 새로 추가된 장비에 LifeCycle Hook을 통해 기존 배포된 버전을 프로비저닝 하는 역할을 수행합니다.
Blue/Green 배포가 정상적으로 종료되면 Original Auto Scaling Group의 Lifecycle Hook을 제거하는 과정이 수행되는데
네트워크 이슈 등으로 ASG에서 Lifecycle Hook이 정상적으로 제거되지 않아 Instance failed to complete user's Lifecycle Action
와 같은 에러 메세지와 함께 Pending이 발생된 것 으로 생각됩니다.
해결
아래 Auto ScalingGroup의 Lifecycle Hook 탭에서 해당 Lifecycle Hook을 수동으로 제거하면 정상적으로 인스턴스 생성이 이루어집니다.
어떤 이유인지는 모르겠으나 CodeDeploy agent가 위의 Lifecycle Hook을 제거해주는 작업을 정상적으로 수행해주지 못한것으로 보입니다.
CodeDeploy가 관리하는 Auto Scaling Group의 경우 Lifecycle Hook을 제거하면 Scale out 진행 시 프로비저닝이 정상적으로 동작하지 않으니 유의해서 제거하셔야 합니다.