EC2 인스턴스는 기본적으로 하나의 가용 영역에서만 실행되므로 가용성이 그리 높지 않지만 가용성을 높일 수 있음
웹 서버를 가동하고 있는 공용 EC2 인스턴스가 있고 웹 서버에 액세스하려고 한다면 EC2 인스턴스에 탄력적 IP를 연결하고 사용자가 탄력적 IP를 통해 웹사이트에 곧장 액세스하게 해야 함 그러면 사용자는 EC2 인스턴스에서 직접 작업할 수 있고 웹 서버에서 결과를 받게 됨
고가용성 EC2 인스턴스를 만드는 방법 1) 대기 인스턴스 + CloudWatch Events or 경보 이 경우, 만약 일이 잘못된 경우를 대비해 대기 인스턴스를 만들어 EC2 인스턴스의 가용성을 높일 수 있음 뭔가 잘못됐다는 것을 알려면 모니터링이 필수이므로 이벤트에 기반해 CloudWatch Eventes나 경보를 만든 후 인스턴스가 종료되고 있는지 확인할 수 있으며, 또한 웹 서버가 있으면 CPU가 100%까지 올라갈 경우를 대비해 CPU를 모니터링하는 CloudWatch 경보를 설정해야 하며 만약 100%까지 도달한다면 EC2 인스턴스에 문제가 생긴 것이므로 그에 관한 경보를 발동해야 함 인스턴스를 모니터링 하는 방법은 여러 개가 있고 요구 사항에 따라 달라지며 경보나 CloudWatch Events에서 람다 함수를 발동해 원하는 작업을 할 수 있게 할 수 있음 그 후 대기 인스턴스에 탄력적 IP를 연결하는 API를 호출해 연결되면 이 IP는 한 인스턴스에만 연결될 수 있으므로 다른 인스턴스에서는 분리되고 이전의 다른 EC2 인스턴스는 종료되거나 사라지게 되어 새 대기 EC2 인스턴스는 장애 조치가 취해지게 되는 것 이 때 사용자는 탄력적 IP를 통해 아키텍처와 소통하기 때문에 백엔드에서 모두 진행되므로 무슨 일이 일어나는지 알 수 없음
대기 인스턴스가 없는 경우도, 람다 함수는 API를 호출해 인스턴스가 실행되지 않았을 경우 실행할 수 있음
Creating a highly available EC2 instance With an Auto Scaling Group
고가용성 EC2 인스턴스를 만드는 방법 2) ASG + 새 EC2 인스턴스 두 가용 영역에 ASG이 있을 때 사용자가 탄력적 IP를 통해 애플리케이션과 소통할 경우 어떻게 ASG를 구성해야 할까 인스턴스의 최솟값과 최댓값을 1로 설정하고 적정 값도 1로 설정해 두 개의 가용 영역에 지정하며 EC2 인스턴스를 하나만 가져오게 하여 그 인스턴스를 첫 번째 가용 영역에 들어가게 설정하여 EC2 인스턴스의 사용자 데이터가 나타나게 되면 탄력적 IP 주소를 태그에 기반해 연결하게 됨 그 후 사용자 데이터가 API 호출을 발행하고 탄력적 IP가 공용 EC2 인스턴스에 연결되게 되므로 사용자가 웹서버와 소통 가능 이 경우 인스턴스가 종료될 경우 ASG는 첫 인스턴스를 종료하고 다른 가용 영역에 대체 E2를 생성하여 첫 번째 인스턴스가 종료되고 두 번째 인스턴스가 EC2 사용자 데이터 스크립트 실행 후 탄력적 IP를 연결해 장애 조치가 이뤄짐 그러므로 CloudWatch Events나 경보가 필요하지 않음 즉, 한 인스턴스가 종료되는 것을 ASG가 보자마자 다른 가용 영역에 새 EC2 인스턴스를 생성 이 때, EC2 인스턴스가 탄력적 IP 주소를 연결하기 위해 API를 직접 호출할 때 해당 인스턴스가 탄력적 IP 주소를 연결하기 위해 API를 호출할 수 있는 인스턴스 역할이 있는지 확인해야 함 그러므로 탄력적 IP 주소를 연결하고 API 호출이 성공할 수 있도록 EC2 인스턴스 역할 설정을 해두어야 함
최소, 최대, 적정 값을 1로 설정한 이유는 ASG 전체에서 동시에 여러 개의 인스턴스를 실행할 수 없기 때문임
Creating a highly available EC2 instance With ASG + EBS
고가용성 EC2 인스턴스를 만드는 방법 3) ASG + EBS 볼륨 + 새 EC2 인스턴스 위의 경우에 EC2 인스턴스를 상태 유지하게 하고 EBS 볼륨을 줄 수 있음 ASG와 두 가용 영역 공용 EC2 인스턴스, 탄력적 IP가 있을 때 EC2 인스턴스에 EBS 볼륨까지 연결 EC2 인스턴스가 데이터베이스일 때 이를 고가용성으로 만들려면 모든 데이터가 EBS 볼륨에 있고 EBS 볼륨은 특정 가용 영역에만 고정되어 있음 EC2 인스턴스가 종료될 경우 ASG는 수명 주기 후크를 사용해 EBS 볼륨에서 스냅샷을 얻을 수 있는 스크립트를 생성할 수 있음 EC2 인스턴스가 종료되자마자 스냅샷이 발동되기 때문에 EBS 볼륨에 문제가 생겼다는 것을 알 수 있으며 그러므로 EBS 스냅샷을 올바르게 태그하면 ASG는 대체 EC2 인스턴스를 실행할 수 있음 그 후 위와 동일하게 API 호출이 제대로 됐는지 확인하기 위해 EC2 인스턴스 역할이 있어야 하며 대체 EC2 인스턴스에 탄력적 IP를 직접 연결하면 됨 즉, EBS 볼륨이 스냅샷을 만들고 스냅샷에서 다른 가용 영역으로의 복구 확인을 위해 EC2 사용자 데이터 및 수명 주기 후크 이용