AWS RDS · 5 min read · Feb 04, 2026

AWS에서 RDS MySql 인스턴스를 생성하기 위한 Cloudformation 사용

AWS 관계형 데이터베이스 서비스(RDS AWS)는 클라우드에서 관계형 데이터베이스를 설정하고 운영하는 것을 쉽게 해주는 웹 서비스입니다. RDS에 대해 더 알고 싶다면 “AWS에서 RDS MySql(관계형 데이터베이스 MySql) 인스턴스를 설정하는 방법” 기사를 검색하세요.

AWS CloudFormation은 프로그래밍 언어(yaml/json) 또는 간단한 텍스트 파일을 사용하여 애플리케이션에 필요한 모든 리소스를 모델링하고 프로비저닝할 수 있게 해줍니다. 이를 통해 AWS 리소스에 대한 단일 진실 소스를 제공합니다.

이 기사에서는 Cloudformation Stack을 사용하여 RDS MySql 인스턴스를 생성하는 단계를 살펴보겠습니다.

전제 조건

  1. AWS 계정 (없다면 생성하세요).
  2. Cloudformation Stack에 대한 기본 이해.
  3. AWS에서 RDS MySql(관계형 데이터베이스 MySql) 인스턴스에 대한 기본 이해.

우리가 할 일

  1. AWS에 로그인합니다.
  2. Cloudformation Stack을 사용하여 RDS MySql 인스턴스를 생성합니다.

AWS에 로그인하기

  1. 여기를 클릭하여 AWS 로그인 페이지로 이동합니다.

위 링크를 클릭하면 로그인 세부정보를 사용하여 로그인해야 하는 웹 페이지가 표시됩니다.

AWS에 로그인

AWS에 성공적으로 로그인하면 모든 서비스가 나열된 기본 콘솔을 볼 수 있습니다.

AWS 관리 콘솔

Cloudformation을 사용하여 RDS MySql 인스턴스 생성하기.

Cloudformation Stack을 사용하여 인스턴스를 생성하기 전에 다음 블록에서 코드를 복사하거나 여기에서 템플릿을 다운로드하여 로컬 컴퓨터에 저장하세요.

---
AWSTemplateFormatVersion: '2010-09-09'
Description: 이 스택은 RDS MySql 5.7 인스턴스를 생성합니다.
Parameters:
  Owner:
    Description: 이 스택의 소유자 이름을 입력하세요.
    Type: String
    Default: Name
  VPC:
    Description: 계정에서 사용 가능한 VPC 중에서 VPC를 선택하세요.
    Type: AWS::EC2::VPC::Id
  PrivateSubnet1:
    Description: 프라이빗 서브넷 1을 선택하세요.
    Type: AWS::EC2::Subnet::Id
  PrivateSubnet2:
    Description: 프라이빗 서브넷 2를 선택하세요.
    Type: AWS::EC2::Subnet::Id
  PrivateSubnet3:
    Description: 프라이빗 서브넷 3을 선택하세요.
    Type: AWS::EC2::Subnet::Id
  MasterUsername:
    Description: 데이터베이스 관리 이름.
    Type: String
    Default: rdsroot
  MasterUserPassword:
    NoEcho: 'true'
    Description: 데이터베이스 관리 비밀번호.
    Type: String
    MinLength: '8'
    AllowedPattern: "[a-zA-Z0-9!?]*"
    ConstraintDescription: 대문자 및 소문자와 숫자만 포함해야 합니다.
  BackupRetentionPeriod:
    Description: 백업 보존 기간(일)을 입력하세요.
    Type: Number
    Default: '5'
  MultiAvailabilityZone:
    Description: 다중 가용 영역을 활성화하시겠습니까?
    Type: String
    Default: 'true'
    AllowedValues:
    - 'true'
    - 'false'
  TcpPort:
    Description: RDS 수신 TCP 포트 번호를 입력하세요.
    Type: Number
    Default: '3306'
  PreferredBackupWindow:
    Description: 선호하는 백업 창 시간을 입력하세요.
    Type: String
    Default: 15:00-17:00
  PreferredMaintenanceWindow:
    Description: 선호하는 유지 관리 창 시간을 입력하세요.
    Type: String
    Default: Sun:18:00-Sun:22:00
  AllocatedStorage:
    Default: '15'
    Description: 데이터베이스 크기(Gb)를 입력하세요.
    Type: Number
    MinValue: '5'
    MaxValue: '6144'
    ConstraintDescription: 5-6144 사이여야 합니다.
  SnapshotOnDelete:
    Description: 인스턴스 삭제 시 스냅샷을 생성하시겠습니까?
    Type: String
    Default: 'true'
    AllowedValues:
    - 'true'
    - 'false'
  AutoMinorVersionUpgrade:
    Description: 자동 소규모 버전 업그레이드를 허용하시겠습니까?
    Type: String
    Default: 'true'
    AllowedValues:
    - 'true'
    - 'false'
  InstanceType:
    Description: 인스턴스 유형을 선택하세요.
    Type: String
    Default: db.t2.micro
    ConstraintDescription: 유효한 EC2 인스턴스 유형이어야 합니다.
Mappings:
  Settings:
    MySQL:
      Engine: MySQL
      Version: '5.7'
Conditions:
  ConfigureSnapshotOnDelete:
    Fn::Equals:
    - Ref: SnapshotOnDelete
    - 'true'

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
    - Label:
        default: Ownership
      Parameters:
      - Owner
    - Label:
        default: Network Configuration
      Parameters:
      - VPC
      - PrivateSubnet1
      - PrivateSubnet2
      - PrivateSubnet3
    - Label:
        default: RDS Configuration
      Parameters:
      - InstanceType
      - MasterUsername
      - MasterUserPassword
      - BackupRetentionPeriod
      - PreferredBackupWindow
      - PreferredMaintenanceWindow
      - SnapshotOnDelete
      - AllocatedStorage
      - AutoMinorVersionUpgrade
      - TcpPort
      - MultiAvailabilityZone
    ParameterLabels:
      Owner:
        default: 팀 또는 개인 소유자
      InstanceType:
        default: 인스턴스 유형
      PrivateSubnet1:
        default: 프라이빗 서브넷 1
      PrivateSubnet2:
        default: 프라이빗 서브넷 2
      PrivateSubnet3:
        default: 프라이빗 서브넷 3
      MasterUsername:
        default: 마스터 사용자 이름
      MasterUserPassword:
        default: 마스터 사용자 비밀번호
      BackupRetentionPeriod:
        default: 백업 보존 기간
      PreferredBackupWindow:
        default: 선호하는 백업 창
      PreferredMaintenanceWindow:
        default: 선호하는 유지 관리 창
      AllocatedStorage:
        default: 할당된 저장소
      AutoMinorVersionUpgrade:
        default: 자동 소규모 버전 업그레이드
      TcpPort:
        default: TCP 포트
      MultiAvailabilityZone:
        default: 다중 가용 영역?
      SnapshotOnDelete:
        default: 삭제 시 스냅샷?

Resources:
  RDSAccessSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: 인스턴스에서 RDS 접근
      VpcId:
        Ref: VPC
      Tags:
      - Key: Name
        Value:
          Fn::Join:
          - ''
          - - Ref: AWS::StackName
            - "-rds"
      - Key: Owner
        Value:
          Ref: Owner
  AccessSecurityGroupIngress:
    Type: AWS::EC2::SecurityGroupIngress
    DependsOn: RDSAccessSecurityGroup
    Properties:
      GroupId:
        Ref: RDSAccessSecurityGroup
      IpProtocol: tcp
      FromPort:
        Ref: TcpPort
      ToPort:
        Ref: TcpPort
      SourceSecurityGroupId:
        Ref: RDSAccessSecurityGroup
  DbSubnetGroup:
    Type: AWS::RDS::DBSubnetGroup
    Properties:
      DBSubnetGroupDescription:
        Fn::Join:
        - ''
        - - 'RDS 서브넷 그룹 '
          - Ref: AWS::StackName
      SubnetIds:
      - Ref: PrivateSubnet1
      - Ref: PrivateSubnet2
      - Ref: PrivateSubnet3
      Tags:
      - Key: Name
        Value:
          Ref: AWS::StackName
      - Key: Owner
        Value:
          Ref: Owner
  DbInstance:
    Type: AWS::RDS::DBInstance
    DeletionPolicy: Snapshot
    DependsOn:
    - DbSubnetGroup
    - RDSAccessSecurityGroup
    Properties:
      AllocatedStorage:
        Ref: AllocatedStorage
      AllowMajorVersionUpgrade: 'false'
      AutoMinorVersionUpgrade:
        Ref: AutoMinorVersionUpgrade
      BackupRetentionPeriod:
        Ref: BackupRetentionPeriod
      DBInstanceClass:
        Ref: InstanceType
      DBInstanceIdentifier:
        Ref: AWS::StackName
      DBSubnetGroupName:
        Ref: DbSubnetGroup
      Engine:
        Fn::FindInMap:
        - Settings
        - MySQL
        - Engine
      EngineVersion:
        Fn::FindInMap:
        - Settings
        - MySQL
        - Version
      MasterUsername:
        Ref: MasterUsername
      MasterUserPassword:
        Ref: MasterUserPassword
      MultiAZ:
        Ref: MultiAvailabilityZone
      Port:
        Ref: TcpPort
      PreferredBackupWindow:
        Ref: PreferredBackupWindow
      PreferredMaintenanceWindow:
        Ref: PreferredMaintenanceWindow
      PubliclyAccessible: 'false'
      StorageEncrypted: 'false'
      StorageType: gp2
      VPCSecurityGroups:
      - Ref: RDSAccessSecurityGroup
      Tags:
      - Key: Name
        Value:
          Ref: AWS::StackName
      - Key: Owner
        Value:
          Ref: Owner

Outputs:
  Owner:
    Description: 이 형성을 소유한 팀 또는 개인.
    Value:
      Ref: Owner
  VPC:
    Description: 사용된 VPC
    Value:
      Ref: VPC
  RDSHostname:
    Description: RDS 호스트 이름
    Value:
      Fn::GetAtt:
      - DbInstance
      - Endpoint.Address
  RDSPort:
    Description: RDS 포트
    Value:
      Fn::GetAtt:
      - DbInstance
      - Endpoint.Port
  DbSubnetGroup:
    Description: 생성된 DB 서브넷 그룹.
    Value:
      Ref: DbSubnetGroup
  RDSAccessSecurityGroup:
    Description: 생성된 RDS 접근 보안 그룹.
    Value:
      Ref: RDSAccessSecurityGroup
  PrivateSubnet1:
    Description: 프라이빗 서브넷 1 배포
    Value:
      Ref: PrivateSubnet1
  PrivateSubnet2:
    Description: 프라이빗 서브넷 2 배포
    Value:
      Ref: PrivateSubnet2
  PrivateSubnet3:
    Description: 프라이빗 서브넷 3 배포
    Value:
      Ref: PrivateSubnet3
  BackupRetentionPeriod:
    Description: 백업 보존 기간(일)
    Value:
      Ref: BackupRetentionPeriod
  MultiAvailabilityZone:
    Description: 다중 가용 영역을 활성화하시겠습니까?
    Value:
      Ref: MultiAvailabilityZone
  SnapshotOnDelete:
    Description: 삭제 시 스냅샷을 생성하시겠습니까?
    Value:
      Ref: SnapshotOnDelete
  PreferredBackupWindow:
    Description: 선호하는 백업 창
    Value:
      Ref: PreferredBackupWindow
  PreferredMaintenanceWindow:
    Description: 선호하는 유지 관리 창
    Value:
      Ref: PreferredMaintenanceWindow
  AllocatedStorage:
    Description: GB 단위로 할당된 저장소
    Value:
      Ref: AllocatedStorage

로컬 컴퓨터에 템플릿이 준비되면 AWS 콘솔로 이동하여 상단 메뉴 바에서 “서비스”를 클릭하고 “Cloudformation”을 검색하세요.

Cloudformation

다음과 같은 기본 Cloudformation 대시보드가 표시됩니다. “스택 생성” 버튼을 클릭하여 RDS MySql 인스턴스를 생성하기 위한 스택을 생성합니다.

스택

“템플릿 파일 업로드” 라디오 버튼을 클릭하고 로컬 컴퓨터에서 저장한 템플릿을 선택한 후 “다음” 버튼을 클릭합니다.

Cloudformation 스택 생성

스택에 원하는 이름을 지정하고 필요한 세부정보를 입력한 후 “다음”을 클릭하여 진행합니다.

스택 세부정보 지정

마스터 사용자 비밀번호

Cloudformation 스택에 태그를 제공할 수 있으며, 이는 스택에 의해 생성될 RDS MySql 인스턴스에 적용됩니다. “다음”을 클릭하여 진행합니다.

태그

아래로 스크롤하여 “스택 생성”을 클릭하여 스택을 생성합니다.

스택 생성

생성에는 시간이 걸릴 수 있습니다. 이벤트에서 진행 상황을 확인할 수 있습니다.

RDS MySQL

생성 중인 RDS MySql 인스턴스의 상태를 보려면 “서비스”를 클릭하고 “RDS”를 검색하세요.

RDS

기본 대시보드에서 “DB 인스턴스”를 클릭합니다.

데이터베이스 생성

여기에서 인스턴스의 상태가 “수정 중”임을 볼 수 있습니다. 생성되기까지 시간이 걸리며 사용 준비가 될 것입니다.

RDS 데이터베이스 목록

Cloudformation 스택 이벤트에서 RDS MySql 인스턴스가 생성된 후 상태가 “CREATE_COMPLETE”로 변경됩니다.

RDS 작업 로그

이제 RDS 콘솔에서 상태가 “사용 가능”임을 확인할 수 있습니다.

AWS의 MySQL 데이터베이스

RDS MySql 인스턴스에 대한 자세한 내용을 보려면 RDS MySql 인스턴스를 클릭한 후 –> 연결 및 보안을 클릭하세요.

RDS MySql 인스턴스에 연결하려면 인스턴스에서 제공된 엔드포인트를 사용할 수 있습니다.

데이터베이스 세부정보

인스턴스가 더 이상 필요하지 않으면 비용을 절감하기 위해 Cloudformation 메인 대시보드에서 Cloudformation 스택을 삭제하세요.

결론

**

이 기사에서는 Cloudformation Stack을 사용하여 RDS MySql 인스턴스를 생성하는 단계를 살펴보았습니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.