어떤 부분을 리팩터링하려 하나요?
API EC2 에 고정 IP 가 없어, 인스턴스가 교체되면 public IP 가 바뀌고 DNS 레코드를 사람이 직접 고쳐야 서비스가 복구됩니다. EIP 를 도입해 교체가 DNS 에 영향을 주지 않도록 합니다.
현황
항목
상태
EIP
없음 (describe-addresses 결과 없음). prod 15.165.41.85 / stage 3.38.130.79 는 인스턴스에 자동 할당된 임시 public IP
DNS
Cloudflare. Route53 호스팅 존 없음, 저장소에 aws_eip·route53 코드 없음
프록시
DNS only — 오리진 IP 가 A 레코드에 그대로 노출 (TTL 300)
교체 시 무슨 일이 일어나는가
새 인스턴스가 다른 public IP 를 받는다
Cloudflare A 레코드는 여전히 옛 IP 를 가리킨다 → 서비스 중단
새 인스턴스에는 /etc/letsencrypt 인증서가 없어 certbot --webroot HTTP-01 발급을 시도하는데, ACME 서버가 옛 IP 로 접속하므로 발급도 실패 한다
즉 교체는 현재 "사람이 Cloudflare 레코드를 고친 뒤에야 복구되는" 시나리오입니다. #82 리뷰에서 지적된 내용입니다.
비용은 늘지 않습니다
2024년 2월부터 모든 public IPv4 주소에 과금 됩니다. AWS 문서 원문입니다.
AWS charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses.
지금 붙어 있는 임시 public IP 도 이미 과금 대상이므로, 인스턴스에 연결된 EIP 로 바꿔도 추가 비용은 0 입니다. 연결하지 않고 방치하는 EIP 만 낭비가 됩니다.
AS-IS
인스턴스 교체 시 public IP 가 바뀌고, Cloudflare A 레코드를 수동으로 갱신해야 한다
DNS 가 옛 IP 를 가리키는 동안 certbot HTTP-01 발급이 실패해, 새 인스턴스에서 HTTPS 를 열 수 없다
교체 경로가 코드로 완결되지 않아 null_resource 에 교체 트리거를 걸 수 없다 (fix: 내부 전용 API 의 외부 노출 차단을 nginx 설정 코드에 반영 #82 에서 replace_triggered_by 를 제거한 이유)
TO-BE
인스턴스가 교체되어도 IP 가 유지되어 DNS 레코드를 건드릴 필요가 없다
새 인스턴스에서도 certbot 발급이 정상 동작한다
교체 시 nginx 설치·설정이 자동으로 재구성되도록 트리거를 걸 수 있다
작업 상세 내용
참고할만한 자료(선택)
어떤 부분을 리팩터링하려 하나요?
API EC2 에 고정 IP 가 없어, 인스턴스가 교체되면 public IP 가 바뀌고 DNS 레코드를 사람이 직접 고쳐야 서비스가 복구됩니다. EIP 를 도입해 교체가 DNS 에 영향을 주지 않도록 합니다.
현황
describe-addresses결과 없음). prod15.165.41.85/ stage3.38.130.79는 인스턴스에 자동 할당된 임시 public IPaws_eip·route53코드 없음교체 시 무슨 일이 일어나는가
/etc/letsencrypt인증서가 없어certbot --webrootHTTP-01 발급을 시도하는데, ACME 서버가 옛 IP 로 접속하므로 발급도 실패한다즉 교체는 현재 "사람이 Cloudflare 레코드를 고친 뒤에야 복구되는" 시나리오입니다. #82 리뷰에서 지적된 내용입니다.
비용은 늘지 않습니다
2024년 2월부터 모든 public IPv4 주소에 과금됩니다. AWS 문서 원문입니다.
지금 붙어 있는 임시 public IP 도 이미 과금 대상이므로, 인스턴스에 연결된 EIP 로 바꿔도 추가 비용은 0 입니다. 연결하지 않고 방치하는 EIP 만 낭비가 됩니다.
AS-IS
null_resource에 교체 트리거를 걸 수 없다 (fix: 내부 전용 API 의 외부 노출 차단을 nginx 설정 코드에 반영 #82 에서replace_triggered_by를 제거한 이유)TO-BE
작업 상세 내용
modules/app_stack에aws_eip와aws_eip_association을 추가한다 (prod·stage)associate_public_ip_address와 EIP 를 함께 두었을 때의 동작을 확인한다null_resource.install_nginx에lifecycle.replace_triggered_by = [aws_instance.api_server.id]를 다시 검토한다참고할만한 자료(선택)