全球Aurora数据库的CloudFormation模板

时间:2019-04-30 20:32:57

标签: amazon-web-services amazon-cloudformation amazon-rds amazon-rds-aurora

我正在尝试编写Cloudformation模板以获取AWS Global Aurora数据库。但是我不知道在哪里以及如何添加全局数据库标识符。有人可以帮助Cloudformation代码段吗?

下面是我的代码:

Description: RDS Aurora MySQL cluster.
Parameters:
    DatabaseName:
      Default: "testglobalaurora"
      Description: The database name 
      Type: String

    DatabaseInstanceType:
        Default: db.r4.large
        AllowedValues:
            - db.r4.large
            - db.r4.xlarge
            - db.r4.2xlarge
            - db.r4.4xlarge
            - db.r4.8xlarge
            - db.r4.16xlarge
        Description: "The instance type to use for the database."
        Type: String

    DatabasePassword:
        Default: "testglobalaurora"
        AllowedPattern: "[a-zA-Z0-9]+"
        ConstraintDescription: must contain only alphanumeric characters. Must have length 8-41.
        Description: The database admin account password. 
        MaxLength: '41'
        MinLength: '8'
        NoEcho: 'true'
        Type: String

    DatabaseUsername:
        Default: "testglobalaurora"
        AllowedPattern: "[a-zA-Z0-9]+"
        ConstraintDescription: must contain only alphanumeric characters. Must have length 1-16
        Description: The database admin account user name. 
        MaxLength: '16'
        MinLength: '1'
        Type: String

Metadata:
    AWS::CloudFormation::Interface:
        ParameterGroups:
            - Label:
                default: Database Configuration
              Parameters:
                - DatabaseInstanceType
                - DatabaseName
                - DatabaseUsername
                - DatabasePassword
        ParameterLabels:
            DatabaseName:
              default: Database name
            DatabaseInstanceType:
                default: Database Instance Type
            DatabasePassword:
                default: Database Password
            DatabaseUsername:
                default: Database Username

Resources:
    ParameterGroup:
        Type: "AWS::RDS::DBParameterGroup"
        Properties: 
            Description: testglobalaurora DB parameter group 
            Family: aurora5.6
            Parameters:
                max_connections: 300

    DatabaseCluster:
        Type: AWS::RDS::DBCluster
        Properties:
            Engine: aurora
            EngineMode: global

            MasterUsername:
              Ref: DatabaseUsername
            MasterUserPassword:
              Ref: DatabasePassword
            BackupRetentionPeriod: 35
            PreferredBackupWindow: 02:00-03:00
            PreferredMaintenanceWindow: mon:03:00-mon:04:00
            VpcSecurityGroupIds:
              - Ref: DatabaseSecurityGroup

    DatabaseInstance:
        Type: AWS::RDS::DBInstance
        Properties:
            Engine: aurora
            EngineVersion : 5.6.10a
            DBClusterIdentifier:
                Ref: DatabaseCluster
            DBInstanceClass:
                Ref: DatabaseInstanceType 
            DBParameterGroupName: !Ref ParameterGroup
            PubliclyAccessible: "true"
            DBInstanceIdentifier: !Ref DatabaseName

    DatabaseSecurityGroup:
        Type: AWS::EC2::SecurityGroup
        Properties: 
            VpcId: vpc-55378f2f
            GroupDescription: Access to database
            SecurityGroupIngress:
                - CidrIp: 0.0.0.0/0
                  FromPort: 3306
                  ToPort: 3306
                  IpProtocol: tcp
            Tags: 
                - Key: Name
                  Value: !Sub ${DatabaseName}-security-group

Outputs:
    DatabaseEndpoint: 
        Description: The database endpoint
        Value: !GetAtt DatabaseCluster.Endpoint.Address

    DatabasePort:
        Description: The database port
        Value: !GetAtt DatabaseCluster.Endpoint.Port

我的输出 “
global-database-1-cluster-1区域Aurora MySQL 5.6.10a
global-database-1-instance-1编写器Aurora MySQL 5.6.10a “

实际输出 “
测试它全球Aurora MySQL 5.6.10a global-database-1-cluster-1 Primary Aurora MySQL 5.6.10a
global-database-1-instance-1编写器Aurora MySQL 5.6.10a “

2 个答案:

答案 0 :(得分:1)

我最近遇到了使用Cloudformation创建全局RDS的需求。这是让我入门的最低Cloudformation。

AWSTemplateFormatVersion: "2010-09-09"
Description: Global RDS database stack
Parameters:
  DatabaseInstanceType:
    Default: db.r4.large
    AllowedValues:
      - db.r4.large
      - db.r4. # add the other r4 instances
    Description: "The instance type to use for the database."
    Type: String
  DatabasePassword:
    Default: SomePassword1
    AllowedPattern: "[a-zA-Z0-9]+"
    ConstraintDescription: must contain only alphanumeric characters. Must have length 8-41.
    Description: The database admin account password.
    MaxLength: '41'
    MinLength: '8'
    NoEcho: 'true'
    Type: String
  DatabaseUsername:
    Default: globaladmin
    ConstraintDescription: must contain only alphanumeric characters. Must have length 1-16
    Description: The database admin account user name.
    MaxLength: '16'
    MinLength: '1'
    Type: String
Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      - Label:
          default: Database Configuration
        Parameters:
          - DatabaseInstanceType
          - DatabaseName
          - DatabaseUsername
          - DatabasePassword
    ParameterLabels:
      DatabaseName:
        default: Database name
      DatabaseInstanceType:
        default: Database Instance Type
      DatabasePassword:
        default: Database Password
      DatabaseUsername:
        default: Database Username
Resources:
  GlobalDbCluster:
    Type: AWS::RDS::DBCluster
    Properties:
      Engine: aurora
      EngineMode: global
      EngineVersion: 5.6.10a
      MasterUsername: !Ref DatabaseUsername
      MasterUserPassword: !Ref DatabasePassword
      DBClusterParameterGroupName: !Ref GlobalDbParamGroup
  GlobalDbParamGroup:
    Type: AWS::RDS::DBClusterParameterGroup
    Properties:
      Description: "parameter group for the global database"
      Family: aurora5.6
      Parameters:
        character_set_database: utf32
  InstanceOne:
    Type: AWS::RDS::DBInstance
    Properties:
      DBInstanceClass: !Ref DatabaseInstanceType
      DBClusterIdentifier: !Ref GlobalDbCluster
      Engine: aurora
  InstanceTwo:
    Type: AWS::RDS::DBInstance
    Properties:
      DBInstanceClass: !Ref DatabaseInstanceType
      DBClusterIdentifier: !Ref GlobalDbCluster
      Engine: aurora

答案 1 :(得分:0)

您需要创建一个具有标识符的全局集群,然后在数据库集群中使用该标识符。您的CFN模板中缺少该部分。

类似的东西:

GlobalCluster:
        Type: AWS::RDS::GlobalCluster
        Properties:
            Engine: aurora
            EngineVersion: 5.6.10a
            Region: us-east-1

,然后使用DatabaseCluster在您的GlobalClusterIdentifier: <id>属性中使用它

但是,查看RDS的CFN类型[1]的官方文档,它没有列出GlobalCluster。因此,要么只是未记录在案,要么此资源类型尚未在Cloudformation中注册。如果是后者,那么您可能要打开支持案例并提出功能请求。

[1] https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_RDS.html