【问题标题】:How to run a SQL query in Cloud Formation template to enable Delayed_Durability in AWS RDS如何在 Cloud Formation 模板中运行 SQL 查询以在 AWS RDS 中启用 Delayed_Durability
【发布时间】:2021-01-22 01:23:00
【问题描述】:

我有一个 Cloud Formation 模板来在 RDS 中创建一个 SQL 数据库,并希望通过运行以下查询在其中默认启用 Delayed_Durability 功能: ALTER DATABASE dbname SET DELAYED_DURABILITY = FORCED;

有没有办法在通过 CF 模板创建数据库实例后立即运行此查询? 我的 CF 模板如下所示:

         "Type":"AWS::RDS::DBInstance",
         "Properties":{  
            "AllocatedStorage":"200",
            "AutoMinorVersionUpgrade":"false",
            "BackupRetentionPeriod":"1",
            "DBInstanceClass":"db.m4.large",
            "DBInstanceIdentifier":"mydb",
            "DBParameterGroupName": {
                    "Ref": "MyDBParameterGroup"
                },
            "DBSubnetGroupName":{  
               "Ref":"dbSubnetGroup"
            },
            "Engine":"sqlserver-web",
            "EngineVersion":"13.00.4422.0.v1",
            "LicenseModel":"license-included",
            "MasterUsername":"prod_user",
            "MasterUserPassword":{ "Ref" : "dbpass" },
            "MonitoringInterval":"60",
            "MonitoringRoleArn": {
               "Fn::GetAtt": [
                  "RdsMontioringRole",
                  "Arn"
               ]
            },
            "PreferredBackupWindow":"09:39-10:09",
            "PreferredMaintenanceWindow":"Sun:08:58-Sun:09:28",
            "PubliclyAccessible": false,
            "StorageType":"gp2",
            "StorageEncrypted": true,
            "VPCSecurityGroups":[  
               {  
                  "Fn::ImportValue":{  
                     "Fn::Sub":"${NetworkStackName}-RDSSecGrp"
                  }
               }
            ],
            "Tags":[  
               {  
                  "Key":"Name",
                  "Value":"my-db"
               }
            ]
         }
      }

【问题讨论】:

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


    【解决方案1】:

    有没有办法在通过 CF 模板创建数据库实例后立即运行此查询?

    视情况而定。如果您想从 CloudFormation (CFN) 中执行此操作,那么遗憾的是,您无法使用普通 CFN 执行此操作。要从 CFN 执行此操作,您必须开发一个 custom resource。资源将采用 lambda 函数 的形式。您可以将数据库详细信息传递给 CFN 中的函数,它可以运行并执行您的查询。它还可以将您想要的任何结果返回给您的 CFN 以供进一步使用。

    相比之下,如果您使用 AWS CLI 或 SDK 创建您的 CFN 堆栈,那么在完成 create-stack 调用后,您可以从 bash 或您使用的任何编程语言运行您的查询并部署您的堆栈。

    【讨论】:

    • 知道了。每当我们将应用程序部署到新区域时,我们通常会手动创建堆栈。我想唯一的方法是创建一个 lambda 来运行一次,然后在执行查询后将其删除。
    • @tavier 如果要删除,也可以使用一次性实例。因此,一旦提供了数据库,您就可以在 CFN 中创建最微小的实例。在用户数据中,您运行您的查询。这里的技巧是将其关闭行为设置为终止。这样,一旦查询完成,在用户数据中您调用shutdown -h now 并且实例会自动终止。当您想一次性做某事时,这是一个小技巧。而且它更容易设置然后您必须稍后删除的自定义资源。
    • 这听起来是个好主意,以确保我们在使用完资源后将其释放。会试一试。感谢分享。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 2017-08-18
    • 2018-01-21
    相关资源
    最近更新 更多