Skip to content

refactor: 인스턴스 교체가 DNS 레코드에 영향을 주지 않도록 EIP 를 도입한다 #84

Description

@Hexeong

어떤 부분을 리팩터링하려 하나요?

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)

교체 시 무슨 일이 일어나는가

  1. 새 인스턴스가 다른 public IP 를 받는다
  2. Cloudflare A 레코드는 여전히 옛 IP 를 가리킨다 → 서비스 중단
  3. 새 인스턴스에는 /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 설치·설정이 자동으로 재구성되도록 트리거를 걸 수 있다

작업 상세 내용

  • modules/app_stackaws_eipaws_eip_association 을 추가한다 (prod·stage)
  • EIP 를 붙이는 시점에 public IP 가 1회 바뀌므로, Cloudflare A 레코드 갱신과 TTL 300초 전파를 포함한 적용 순서를 정한다
  • associate_public_ip_address 와 EIP 를 함께 두었을 때의 동작을 확인한다
  • 교체 경로가 완결되면 null_resource.install_nginxlifecycle.replace_triggered_by = [aws_instance.api_server.id] 를 다시 검토한다
  • DB EC2 는 private 이라 대상이 아님을 확인한다

참고할만한 자료(선택)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions