python Lamda的AWS RDS快照

时间:2017-11-27 23:43:11

标签: python amazon-web-services snapshot

我正在尝试通过AWS Lamda(python 3.6)的功能创建/删除我的AWS RDS的快照,但我不知道我在哪里做错了,这个功能还删除了7天之前的快照,所以任何人都可以建议我这个

import boto3
import datetime

def lambda_handler(event, context):
    print("Connecting to RDS")
    client = boto3.client('rds')
    dbInstances = ['magento-live']

    for dbInstance in dbInstances:
        print("RDS snapshot backups started at %s...\n" % datetime.datetime.now())

        client.create_db_snapshot(
            DBInstanceIdentifier=dbInstance,
            DBSnapshotIdentifier=dbInstance+'{}'.format(datetime.datetime.now().strftime("%y-%m-%d-%H")),
            Tags=[
                {
                    'Key': 'NI',
                    'Value': 'NIRDS'

                },
            ]
        )

        for snapshot in client.describe_db_snapshots(DBInstanceIdentifier=dbInstance, MaxRecords=50)['DBSnapshots']:
            createTs = snapshot['SnapshotCreateTime'].replace(tzinfo=None)
            if createTs < datetime.datetime.now() - datetime.timedelta(days=7):
                print("Deleting snapshot id:", snapshot['DBSnapshotIdentifier'])
                client.delete_db_snapshot(
                    DBSnapshotIdentifier=snapshot['DBSnapshotIdentifier']
                )

但我总是低于错误

    {
  "errorMessage": "An error occurred (InvalidParameterValue) when calling the CreateDBSnapshot operation: The specified instance is a member of a cluster and a snapshot cannot be created directly. Please use the CreateDBClusterSnapshot API instead.",
  "errorType": "ClientError",
  "stackTrace": [
    [
      "/var/task/lambda_function.py",
      19,
      "lambda_handler",
      "'Value': 'NIRDS'"
    ],
    [
      "/var/runtime/botocore/client.py",
      312,
      "_api_call",
      "return self._make_api_call(operation_name, kwargs)"
    ],
    [
      "/var/runtime/botocore/client.py",
      605,
      "_make_api_call",
      "raise error_class(parsed_response, operation_name)"
    ]
  ]
}

1 个答案:

答案 0 :(得分:0)

阿伦是对的。您使用了另一种方法(适用于aurora群集而不适用于数据库实例)。

以下是对我有用的lambda函数:

def lambda_handler(event, context):
print("Connecting to RDS")
client = boto3.client('rds')

print("RDS snapshot backups stated at %s...\n" % datetime.datetime.now())
client.create_db_cluster_snapshot(
    DBClusterIdentifier='enter-your-cluster-name-her', 
    DBClusterSnapshotIdentifier='enter-your-cluster-name-here-%s' % datetime.datetime.now().strftime("%y-%m-%d-%H"),
    Tags=[
        {
            'Key': 'ENV',
            'Value': 'dev'
        },
    ]
)