Skip to content

feat: Custom AMI에 AWS CLI 설치 및 DB EC2 AMI 갱신 반영 #70

Description

@Hexeong

어떤 기능인가요?

현재 Prod DB EC2에는 S3 백업을 위해 Linux ARM64용 AWS CLI v2를 수동으로 설치했고, binlog 복구를 위해 ARM64 기반 solid-connection/mysql-recovery-tools:8.4.8 Docker 이미지를 수동으로 적재한 상태입니다. 이 설정들은 현재 인스턴스에만 존재하므로 DB EC2를 재생성하거나 Custom AMI를 갱신하면 유실될 수 있습니다.

다음 Custom AMI 갱신 시 AWS CLI와 MySQL 복구 도구 이미지를 AMI 구성에 포함하고, 새 AMI를 Terraform 운영 입력값에 반영하여 DB EC2가 재생성되어도 S3 백업 및 binlog 복구 실행 환경이 유지되도록 합니다.

관련 이슈: #66, #67, #68

작업 상세 내용

  • Custom AMI 생성 과정에 Linux ARM64용 AWS CLI v2 설치 단계를 추가합니다.
  • AWS CLI 설치 파일의 체크섬 또는 서명을 검증하고, AMI에 AWS Access Key 등 정적 자격 증명이 포함되지 않도록 확인합니다.
  • 생성된 AMI에서 /usr/local/bin/aws --version 실행을 검증합니다.
  • Linux ARM64 및 MySQL 8.4.8에 맞춘 solid-connection/mysql-recovery-tools:8.4.8 이미지 빌드 절차를 구성합니다.
  • MySQL 공식 client 패키지의 서명 검증을 유지하고 mysqlbinlogmysql 버전이 8.4.8인지 확인합니다.
  • Custom AMI 생성 전에 복구 도구 이미지를 docker load하여 로컬 Docker 이미지로 적재합니다.
  • 복구 도구 컨테이너는 상시 실행하지 않고 복구 시에만 일회성으로 실행되도록 합니다.
  • 생성된 AMI에서 docker run --rm solid-connection/mysql-recovery-tools:8.4.8 --version 실행을 검증합니다.
  • private subnet의 DB EC2가 복구 시점에 외부 레지스트리에서 이미지를 내려받지 않아도 되는지 확인합니다.
  • 복구 도구 이미지와 AMI에 DB 비밀번호, AWS 자격 증명, 백업 데이터가 포함되지 않았는지 확인합니다.
  • 새 Custom AMI ID를 Terraform 운영 입력값에 반영합니다.
  • Terraform plan에서 DB EC2 교체 범위와 기존 데이터 EBS의 보존 및 재연결 여부를 확인합니다.
  • PR 검토 후 정상적인 Terraform apply를 통해 새 AMI 사용 상태를 반영합니다.
  • 재생성된 DB EC2가 Instance Profile과 S3 Gateway Endpoint를 이용해 백업 버킷에 접근할 수 있는지 확인합니다.

완료 조건

  • DB EC2를 재생성해도 AWS CLI를 별도로 수동 설치하지 않아도 됩니다.
  • DB EC2를 재생성해도 MySQL 8.4.8용 mysqlbinlogmysql 복구 도구를 외부 다운로드 없이 실행할 수 있습니다.
  • AWS CLI가 Instance Profile의 임시 자격 증명만 사용하며 AMI에 정적 자격 증명이 포함되지 않습니다.
  • 복구 도구 이미지는 실행 중인 컨테이너가 아닌 로컬 Docker 이미지로만 AMI에 포함됩니다.
  • 기존 데이터 EBS가 보존되고 새 DB EC2에 정상적으로 연결됩니다.
  • Terraform state를 직접 수정하지 않고 plan/apply를 통해 새 AMI 사용 상태가 반영됩니다.
  • DB EC2에서 S3 백업 버킷 접근과 복구 도구 버전 검증이 성공합니다.

참고할만한 자료(선택)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions