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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions