Cloudformation verwenden, um eine RDS MySql-Instanz auf AWS zu erstellen

Der AWS Relational Database Service (RDS AWS) ist ein Webservice, der es einfacher macht, eine relationale Datenbank in der Cloud einzurichten und zu betreiben. Um mehr über RDS zu erfahren, suche nach dem Artikel „Wie richte ich eine RDS MySql (Relationale Datenbank MySql) Instanz auf AWS ein“.

Mit AWS CloudFormation können wir Programmiersprachen (yaml/json) oder eine einfache Textdatei verwenden, um alle für unsere Anwendungen benötigten Ressourcen zu modellieren und bereitzustellen. So haben wir eine einzige Quelle der Wahrheit für unsere AWS-Ressourcen.

In diesem Artikel zeigen wir dir, wie du eine RDS MySql Instanz mit Cloudformation Stack erstellst.

Vorraussetzungen

  1. AWS-Konto (Erstelle wenn du noch keins hast).
  2. Grundlegendes Verständnis von Cloudformation Stack.
  3. Grundlegendes Verständnis derRDS MySql (Relation Database MySql) Instanz auf AWS.

Was werden wir tun?

  1. Melde dich bei AWS an.
  2. Erstelle eine RDS MySql-Instanz mit Cloudformation Stack

Anmelden bei AWS

  1. Klicke auf hier um zur AWS-Anmeldeseite zu gelangen.

Wenn wir den obigen Link anklicken, sehen wir die folgende Webseite, auf der wir uns mit unseren Anmeldedaten anmelden müssen.

Bei AWS anmelden

Sobald wir uns erfolgreich bei AWS angemeldet haben, sehen wir die Hauptkonsole mit allen aufgelisteten Services.

AWS Management-Konsole

Erstelle eine RDS MySql-Instanz mit Cloudformation.

Bevor wir eine Instanz mit Cloudformation Stack erstellen, kopiere den Code aus dem folgenden Block oder lade die Vorlage vonhier herunter und speichere sie auf deinem lokalen Rechner.

---
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

Sobald du die Vorlage auf deinem lokalen Rechner hast, gehst du zur AWS-Konsole und klickst in der oberen Menüleiste auf „Services“ und suchst nach „Cloudformation“.

Cloudformation

Das Haupt-Dashboard von Cloudformation siehst du wie folgt. Klicke auf die Schaltfläche „Stack erstellen“, um einen Stack für eine RDS MySql Instanz zu erstellen.

Stapel

Klicke auf das Optionsfeld „Vorlagendatei hochladen“, wähle die Vorlage aus, die du auf deinem lokalen Rechner gespeichert hast, und klicke auf „Weiter“.

Cloudformation Stack erstellen

Gib einen Namen deiner Wahl für den Stack an, fülle die erforderlichen Details aus und klicke auf „Weiter“, um fortzufahren.

Details zum Stapel angeben

Master-Benutzerpasswort

Du kannst dem Cloudformation Stack Tags geben, die auf die RDS MySql Instanz angewendet werden können, die vom Stack erstellt wird. Klicke auf „Weiter“, um fortzufahren.

Tags

Scrolle nach unten und klicke auf „Stack erstellen“, um den Stack zu erstellen.

Stapel erstellen

Die Erstellung wird einige Zeit in Anspruch nehmen. Unter „Ereignisse“ kannst du sehen, welche Aktionen durchgeführt werden.

RDS MySQL

Um den Status der RDS MySql-Instanz zu sehen, die gerade erstellt wird, klicke auf „Dienste“ und suche nach „RDS“.

RDS

Im Haupt-Dashboard klickst du auf „DB-Instanzen“.

Datenbank erstellen

Hier kannst du sehen, dass der Status der Instanz „Modifying“ ist. Es wird einige Zeit dauern, bis sie erstellt und einsatzbereit ist.

RDS-Datenbankliste

In den Cloudformation Stack-Ereignissen kannst du sehen, dass nach einiger Zeit, sobald die RDS MySql-Instanz erstellt wurde, der Status „CREATE_COMPLETE“ lautet.

RDS-Aktionsprotokoll

In der RDS-Konsole kannst du jetzt sehen, dass der Status „Verfügbar“ ist.

MySQL-Datenbank auf AWS

Um mehr Details über die RDS MySql-Instanz zu erfahren, klicke auf RDS MySql-Instanz –> Konnektivität & Sicherheit.

Um dich mit der RDS MySql-Instanz zu verbinden, kannst du den von der Instanz bereitgestellten Endpunkt verwenden.

Datenbank Details

Sobald die Instanz nicht mehr benötigt wird, löschst du den Cloudformation Stack aus dem Cloudformation Main Dashboard, um Kosten zu sparen.

Fazit

In diesem Artikel haben wir die Schritte zur Erstellung einer RDS MySql-Instanz mit Cloudformation Stack gesehen.

Das könnte dich auch interessieren …