Поиск по сайту:

Используйте Cloudformation для создания экземпляра RDS MySql на AWS.


На этой странице

  1. Предварительные требования
  2. Что будем делать?
  3. Создайте экземпляр RDS MySql с помощью Cloudformation.

Служба реляционной базы данных AWS (RDS AWS) – это веб-служба, упрощающая настройку и эксплуатацию реляционной базы данных в облаке. Чтобы узнать больше о RDS, найдите статью «Как настроить экземпляр RDS MySql (реляционная база данных MySql) на AWS».

AWS CloudFormation позволяет нам использовать языки программирования (yaml/json) или простой текстовый файл для моделирования и предоставления всех ресурсов, необходимых для наших приложений. Это дает нам единый источник достоверной информации о наших ресурсах AWS.

В этой статье мы рассмотрим шаги по созданию экземпляра RDS MySql с использованием стека Cloudformation.

Предпосылки

  1. Аккаунт AWS (создайте, если у вас его нет).
  2. Основное понимание стека Cloudformation.
  3. Основное понимание экземпляра RDS MySql (реляционная база данных MySql) на AWS.

Что мы будем делать?

  1. Войдите в AWS.
  2. Создание экземпляра RDS MySql с помощью стека Cloudformation

Войти в АВС

  1. Нажмите здесь, чтобы перейти на страницу входа в AWS.

Когда мы перейдем по приведенной выше ссылке, мы увидим следующую веб-страницу, где нам необходимо войти в систему, используя наши данные для входа.

После успешного входа в AWS мы увидим главную консоль со всеми перечисленными сервисами.

Создайте экземпляр RDS MySql с помощью Cloudformation.

Прежде чем мы создадим экземпляр с помощью Cloudformation Stack, скопируйте код из следующего блока или загрузите шаблон отсюда и сохраните его на локальном компьютере.

---
AWSTemplateFormatVersion: '2010-09-09'
Description: This stack creates an RDS MySql 5.7 Instance
Parameters:
  Owner:
    Description: Enter the Name of the owner for this Stack.
    Type: String
    Default: Name
  VPC:
    Description: Select VPC form the available VPCs in your account.
    Type: AWS::EC2::VPC::Id
  PrivateSubnet1:
    Description: Select Private Subnet 1.
    Type: AWS::EC2::Subnet::Id
  PrivateSubnet2:
    Description: Select Private Subnet 2.
    Type: AWS::EC2::Subnet::Id
  PrivateSubnet3:
    Description: Select Private Subnet 3.
    Type: AWS::EC2::Subnet::Id
  MasterUsername:
    Description: Database administration name.
    Type: String
    Default: rdsroot
  MasterUserPassword:
    NoEcho: 'true'
    Description: Database administration password.
    Type: String
    MinLength: '8'
    AllowedPattern: "[a-zA-Z0-9!?]*"
    ConstraintDescription: Must only contain upper and lowercase letters and numbers
  BackupRetentionPeriod:
    Description: Enter Backup Retention Period in Days.
    Type: Number
    Default: '5'
  MultiAvailabilityZone:
    Description: Do you want to Enable Multi Availability Zones?
    Type: String
    Default: 'true'
    AllowedValues:
    - 'true'
    - 'false'
  TcpPort:
    Description: Enter RDS Listening TCP Port number.
    Type: Number
    Default: '3306'
  PreferredBackupWindow:
    Description: Enter Preferred Backup Window Time.
    Type: String
    Default: 15:00-17:00
  PreferredMaintenanceWindow:
    Description: Enter Preferred Maintenance Window Time.
    Type: String
    Default: Sun:18:00-Sun:22:00
  AllocatedStorage:
    Default: '15'
    Description: Enter the size of the database (Gb)
    Type: Number
    MinValue: '5'
    MaxValue: '6144'
    ConstraintDescription: Must be between 5-6144
  SnapshotOnDelete:
    Description: Do you want to create a Snapshot on instance delete?
    Type: String
    Default: 'true'
    AllowedValues:
    - 'true'
    - 'false'
  AutoMinorVersionUpgrade:
    Description: Do you want to allow automatic minor version upgrade?
    Type: String
    Default: 'true'
    AllowedValues:
    - 'true'
    - 'false'
  InstanceType:
    Description: Select Instance Type.
    Type: String
    Default: db.t2.micro
    ConstraintDescription: Must be a valid EC2 instance type.
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: Team or Individual Owner
      InstanceType:
        default: Instance Type
      PrivateSubnet1:
        default: Private Subnet 1
      PrivateSubnet2:
        default: Private Subnet 2
      PrivateSubnet3:
        default: Private Subnet 3
      MasterUsername:
        default: Master Username
      MasterUserPassword:
        default: Master User Password
      BackupRetentionPeriod:
        default: Backup Retention Period
      PreferredBackupWindow:
        default: Preferred Backup Window
      PreferredMaintenanceWindow:
        default: Preferred Maintenance Window
      AllocatedStorage:
        default: Allocated Storage
      AutoMinorVersionUpgrade:
        default: Auto Minor Version Upgrade
      TcpPort:
        default: TCP Port
      MultiAvailabilityZone:
        default: Multi Availability Zone?
      SnapshotOnDelete:
        default: Snapshot On Delete?

Resources:
  RDSAccessSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Instance to RDS Access
      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 Subnet Group for '
          - 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: Team or Individual that Owns this Formation.
    Value:
      Ref: Owner
  VPC:
    Description: VPC Used
    Value:
      Ref: VPC
  RDSHostname:
    Description: RDS Hostname
    Value:
      Fn::GetAtt:
      - DbInstance
      - Endpoint.Address
  RDSPort:
    Description: RDS Port
    Value:
      Fn::GetAtt:
      - DbInstance
      - Endpoint.Port
  DbSubnetGroup:
    Description: DB Subnet Group Created.
    Value:
      Ref: DbSubnetGroup
  RDSAccessSecurityGroup:
    Description: RDS Access Security Group Created.
    Value:
      Ref: RDSAccessSecurityGroup
  PrivateSubnet1:
    Description: Private Subnet 1 Deployment
    Value:
      Ref: PrivateSubnet1
  PrivateSubnet2:
    Description: Private Subnet 2 Deployment
    Value:
      Ref: PrivateSubnet2
  PrivateSubnet3:
    Description: Private Subnet 3 Deployment
    Value:
      Ref: PrivateSubnet3
  BackupRetentionPeriod:
    Description: Backup Retention Period in Days
    Value:
      Ref: BackupRetentionPeriod
  MultiAvailabilityZone:
    Description: Enable Multi Availability Zones?
    Value:
      Ref: MultiAvailabilityZone
  SnapshotOnDelete:
    Description: Create Snapshot on Delete?
    Value:
      Ref: SnapshotOnDelete
  PreferredBackupWindow:
    Description: Preferred Backup Window
    Value:
      Ref: PreferredBackupWindow
  PreferredMaintenanceWindow:
    Description: Preferred Maintenance Window
    Value:
      Ref: PreferredMaintenanceWindow
  AllocatedStorage:
    Description: Allocated Storage in GB
    Value:
      Ref: AllocatedStorage

Когда у вас есть шаблон на вашем локальном компьютере, перейдите в консоль AWS и нажмите «Сервисы» в верхней строке меню и найдите «Cloudformation».

Вы увидите основную панель управления cloudformation следующим образом. Нажмите кнопку «Создать стек», чтобы создать стек для создания экземпляра RDS MySql.

Нажмите переключатель «Загрузить файл шаблона», выберите шаблон, который вы сохранили на локальном компьютере, и нажмите кнопку «Далее».

Укажите имя по вашему выбору для стека, заполните необходимые данные и нажмите «Далее», чтобы продолжить.

Вы можете предоставить теги для стека Cloudformation, которые можно применить к экземпляру RDS MySql, который будет создан стеком. Нажмите \Далее\, чтобы продолжить.

Прокрутите вниз и нажмите «Создать стопку», чтобы создать стопку.

Создание займет некоторое время. Вы можете увидеть действия, предпринимаемые под событиями.

Чтобы увидеть статус создаваемого экземпляра RDS MySql, нажмите «Службы» и найдите «RDS».

На главной панели нажмите \Экземпляры БД\.

Здесь вы можете видеть, что статус экземпляра — «Изменение». Это займет некоторое время, чтобы быть созданным и готовым к использованию.

В событиях стека Cloudformation вы можете видеть, что через некоторое время после создания экземпляра MySql RDS статус становится \CREATE_COMPLETE\.

В консоли RDS теперь вы можете видеть, что статус «Доступно».

Чтобы просмотреть дополнительные сведения об экземпляре RDS MySql, щелкните Экземпляр RDS MySql --> Подключение и безопасность.

Чтобы подключиться к экземпляру RDS MySql, вы можете использовать конечную точку, предоставленную экземпляром.

Когда экземпляр больше не нужен, удалите стек Cloudformation с главной панели инструментов Cloudformation, чтобы сэкономить на стоимости.

Заключение

В этой статье мы рассмотрели шаги по созданию экземпляра RDS MySql с использованием стека Cloudformation.