了解如何使 Amazon Aurora 集群停止的时长超过 7 天?

3 分钟阅读
0

我想使 Amazon Relational Database Service(Amazon Aurora 集群)的停止时长超过 7 天。

简短描述

您可以在几分钟内轻松开启和停止 Amazon Aurora 集群。对于不需要始终运行的数据库,此功能支持节省成本。您最多可以停止数据库(DB)集群 7 天。如果您在 7 天后没有手动启动数据库集群,则数据库集群将自动启动。这是为了不让集群错过任何所需的维护更新。

要在不错过所需的维护更新的情况下停止 Aurora 集群超过 7 天,请执行以下操作:

1.    设置 AWS Identity Access Management(IAM)权限以允许 AWS Lambda 执行以下操作:启动实例。停止该实例。检索有关实例的信息。

2.    为要自动启动和停止的 Aurora 集群添加标签。

3.    创建一个 Lambda 函数来启动集群。

4.    创建一个 Lambda 函数来停止集群。

5.    创建计划以执行以下操作:在每周维护时段开始时启动 Aurora 集群。在维护时段结束时停止 Aurora 集群。

解决方法

配置 IAM 权限

创建 IAM policy 以允许 Lambda 启动和停止集群并检索有关该集群的信息。

1.    打开 IAM console(IAM 控制台)。

2.    在导航窗格中,选择策略

3.    选择创建策略

4.    选择 JSON 选项卡。

5.    复制以下策略并将策略粘贴到 JSON 选项卡下,以授予所需的 IAM 权限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "rds:StartDBCluster",
        "rds:StopDBCluster",
        "rds:ListTagsForResource",
        "rds:DescribeDBInstances",
        "rds:StopDBInstance",
        "rds:DescribeDBClusters",
        "rds:StartDBInstance"
      ],
      "Resource": "*"
    }
  ]
}

6.    选择下一步:标签

7.    (可选)要添加标签,请选择添加标签,然后为密钥值-可选字段输入相应的值。

8.    选择下一步:检查

9.    在审查策略页面上,为名称输入策略的名称。查看摘要部分以查看您的策略授予的权限。

10.    选择创建策略

有关更多信息,请参阅 JSON 选项卡上的创建策略

创建 IAM 角色,然后附上所需的策略

1.    打开 IAM console(IAM 控制台)。

2.    在导航窗格中,选择角色

3.    选择 Create Role(创建角色)。

4.    对于 Select type of trusted entity(选择受信任实体的类型),请选择 AWS service(AWS 服务)。

5.    在 Or select a service to view its use cases(或者选择一项服务以查看其使用案例)下,选择 Lambda

6.    选择下一步: 权限

7.    对于 Filter-policies(筛选策略),输入在上一节中创建的策略的名称。当您创建的策略出现时,选择该策略。对于 Filter-policies,请输入 AWSLambdaBasicExecutionRole。当显示您创建的托管式策略 AWSLambdaBasicExecutionRole 时,请选择该策略。

8.    选择下一步: 标签

9.    (可选)要添加标签,请为 Key(密钥)和 Value(optional)(值(可选))字段输入相应的值。

10.    选择下一步:检查

11.    在 Create role(创建角色)页面上,对于 Role name(角色名称),输入要创建的角色的名称。

12.    选择 Create Role(创建角色)。

有关更多信息,请参阅为 AWS 服务(控制台)创建角色

为数据库集群添加标签

1.    打开 Amazon RDS 控制台

2.    在导航窗格中,选择 Databases(数据库)。

3.    选择要自动启动和停止的数据库集群。

4.    在详细信息部分中,向下滚动到 Tags(标签)部分。

5.    在 Tags(标签)选项卡下,选择 Add(添加)。对于标签密钥,输入 autostart。对于,输入 yes。选择 Add(添加)以保存您的更改。

6.    再次选择 Add(添加)。对于标签密钥,输入 autostop。对于,输入 yes。选择添加以保存您的更改。

有关更多信息,请参阅添加、列出和移除标签

创建 Lambda 函数以启动已贴标签的数据库实例

1.    打开 Lambda 控制台

2.    在导航窗格中,选择函数

3.    选择 Create function(创建函数)。

4.    选择 Author from scratch(从头开始创建)。

5.    对于 Function name,请输入函数的名称。

6.    对于运行时,选择 Python 3.7

7.    对于架构,保留原定设置选项 x86_64

7.    展开 Change default execution role(更改默认的执行角色)。

8.    对于“执行角色”,选择使用现有角色

9.    在“现有角色”中,选择您之前创建的 IAM 角色。

10.    选择创建函数

11.    选择代码选项卡。

12.    在代码源编辑器中,删除示例代码并粘贴以下内容:

import boto3
rds = boto3.client('rds')

def lambda_handler(event, context):

    #Start DB clusters
    dbs = rds.describe_db_clusters()
    for db in dbs['DBClusters']:
        #Check if DB cluster stopped. Start it if eligible.
        if (db['Status'] == 'stopped'):
            doNotStart=1
            try:
                GetTags=rds.list_tags_for_resource(ResourceName=db['DBClusterArn'])['TagList']
                for tags in GetTags:
                #if tag "autostart=yes" is set for cluster, start it
                    if(tags['Key'] == 'autostart' and tags['Value'] == 'yes'):
                        result = rds.start_db_cluster(DBClusterIdentifier=db['DBClusterIdentifier'])
                        print ("Starting cluster: {0}.".format(db['DBClusterIdentifier']))
                if(doNotStart == 1):
                    doNotStart=1
            except Exception as e:
                print ("Cannot start cluster {0}.".format(db['DBClusterIdentifier']))
                print(e)
                

if __name__ == "__main__":
    lambda_handler(None, None)

13.    选择文件,选择保存,然后选择部署

15.    选择配置选项卡,选择常规配置,然后选择编辑

16.    在超时下,执行以下操作:对于最小值,选择 0。对于 sec,选择 10。17.    选择保存

创建一个 Lambda 函数来停止贴标签的数据库实例

使用上一部分中的说明创建一个 Lambda 函数来启动贴标签的数据库集群以停止贴标签的数据库集群。您必须进行以下更改:

Code source(代码源)编辑器中,删除示例代码并粘贴以下内容:

import boto3
rds = boto3.client('rds')

def lambda_handler(event, context):

    #Stop DB clusters
    dbs = rds.describe_db_clusters()
    for db in dbs['DBClusters']:
        #Check if DB cluster started. Stop it if eligible.
        if (db['Status'] == 'available'):
            doNotStop=1
            try:
                GetTags=rds.list_tags_for_resource(ResourceName=db['DBClusterArn'])['TagList']
                for tags in GetTags:
                #if tag "autostop=yes" is set for cluster, stop it
                    if(tags['Key'] == 'autostop' and tags['Value'] == 'yes'):
                        result = rds.stop_db_cluster(DBClusterIdentifier=db['DBClusterIdentifier'])
                        print ("Stopping cluster: {0}.".format(db['DBClusterIdentifier']))
                if(doNotStop == 1):
                    doNotStop=1
            except Exception as e:
                print ("Cannot stop cluster {0}.".format(db['DBClusterIdentifier']))
                print(e)
                

if __name__ == "__main__":
    lambda_handler(None, None)

执行函数测试

假设已贴标签的数据库集群处于已停止状态。要执行函数测试,请执行以下操作:

1.    打开 Lambda 函数列表。

2.    选择您创建的用于启动数据库集群的函数。

3.    选择操作,然后选择测试

4.    在 Test(测试)选项卡下的 Name(名称)中,输入事件的名称。

5.    选择 Save changes(保存更改),然后选择 Test(测试)。

创建日程安排

假设已贴标签的数据库集群的每周维护时段为星期日 22:00-22:30。您可以通过为以下内容创建两个规则来设置计划:

  • 在维护时段开始前 30 分钟自动启动数据库集群
  • 在维护时段结束 30 分钟后自动停止数据库集群

要创建规则以在维护时段前 30 分钟自动启动数据库实例,请执行以下操作:

1.    打开 Lambda 函数列表。

2.    选择您创建的用于启动数据库实例的函数。

3.    在 Function overview(函数概览)下,选择 Add trigger(添加触发器)。

4.    选择 EventBridge(CloudWatch Events),然后选择 Create a new rule(新建规则)。

5.    对于 Rule name(规则名称),输入要创建的规则名称。

6.    对于 Schedule Expression(计划表达式),为自动计划添加一个 cron 表达式(例如:cron(30 21 ? * SUN *))。

7.    选择 Add(添加)。

使用相同的说明创建另一个规则,以便在维护窗口结束 30 分钟后自动停止数据库集群。确保相应地更改自动计划的规则名称和 cron 表达式(例如:cron(00 23 ? * SUN *))。


相关信息

了解如何使 Amazon RDS 实例停止的时长超过 7 天?

AWS 官方
AWS 官方已更新 1 年前