Остановите базу данных AWS Аврора с помощью лямбда-функции с помощью Python 2.7 - PullRequest
0 голосов
/ 30 ноября 2018

Я использовал следующую лямбда-функцию, чтобы остановить мою базу данных rds aurora.Но это всегда заканчивается ошибкой «Объект RDS не имеет атрибута 'stop_db_cluster' ».Может ли кто-нибудь помочь мне здесь;

import sys
import botocore
import boto3
from botocore.exceptions import ClientError
def lambda_handler(event, context):
    client = boto3.client('rds')
    lambdaFunc = boto3.client('lambda')
    print ('Trying to get Environment variable')
    try:
        funcResponse = lambdaFunc.get_function_configuration(
            FunctionName='RDSInstanceStop'
        )
        DBinstance = funcResponse['Environment']['Variables']['DBInstanceName']
        print ('Stoping RDS service for DBInstance : ' + DBinstance)
    except ClientError as e:
        print(e)    
    try:
        response = client.stop_db_cluster(
            DBClusterIdentifier='DBInstanceName'
        )
        print ('Success :: ' )
        return response
    except ClientError as e:
        print(e)    
    return
    {
        'message' : "Script execution completed. See Cloudwatch logs for complete output"
    }

Я использую роль - lambda-start-stop-rds Детали моей политики - {"Версия": "2012-10-17", "Заявление": [{" Sid ":" VisualEditor0 "," Effect ":" Allow "," Action ": [" rds: ResetDBParameterGroup "," rds: DescribeEngineDefaultParameters "," rds: CreateOptionGroup "," rds: CreateDBSubnetGroup ","rds: PurchaseReservedDBInstancesOffering "," logs: CreateLogStream "," rds: ModifyDBParameterGroup "," rds: AddSourceIdentifierToSubscription "," rds: DownloadDBLogFilePortion "," rds: CopyDBParameterGroup "," rds :RoDB: ": RD: AddRoleTRB: AddRoDB:" rds: AddD ": RDSModifyDBClusterParameterGroup "," rds: ModifyDBClusterSnapshotAttribute "," rds: DeleteDBInstance "," rds: CreateDBParameterGroup "," rds: DesddeDBSnapshots "," rds: DeleteDBSnapshot "," rds: DescribeLog ":, "rds: StartDBInstance", "rds: DeleteDBSubnetGroup", "rds: DescribeReservedDBInstances", "rds: CreateDBSnapshot", "rds: DescribeValidDBInstanceModifications", "rds: RestoreDBInstanceFromDBSnapshot "," rds: DeleteDBSecurityGroup "," rds: DescribeOrderableDBInstanceOptions "," rds: ModifyDBCluster "," rds: CreateDBClusterSnapshot "," rds: DeleteDBParameterGroup "," rds: "rds:" rds: "rds:" rds: "rds:ModifyDBSnapshotAttribute "," rds: RemoveTagsFromResource "," rds: DescribeOptionGroups "," rds: AuthorizeDBSecurityGroupIngress "," rds: CreateEventSubscription "," rds: ModifyOptionGroup "," rds: RestoreDubDesigns "rds", «rds: DescribePendingMaintenanceActions», «rds: DescribeDBParameterGroups», «rds: DescribeReservedDBInstancesOfferings», «rds: DeleteOptionGroup», «rds: FailoverDBCluster», «rds: DeleteEventSubscription», rds: «Удалить»: rds: «Удалить:rds: DescribeDBInstances "," rds: DescribeEngineDefaultClusterParameters "," rds: RevokeDBSecurityGroupIngress "," rds: DescribeDBParameters "," rds: DescribeEventCategories "," rds: ModifyCurrentDBClusterCapacity "," rds: DeleteDBCluster "," rds: ResetDBClusterParameterGroup "," rds: RestoreDBClusterToPointInTime "," rds: DescribeEvents "," rds: AddTagsToResource "," rds: DescribeDBClusterSubjects ", "rds: CopyDBSnapshot", "rds: CopyDBClusterSnapshot", "rds: ModifyEventSubscription", "rds: DescribeDBLogFiles", "rds: StopDBInstance", "logs: PutLogEvents", "rds: CopyOptionGroup", "Descript ", rbs:rds: DeleteDBClusterSnapshot "," rds: ListTagsForResource ",«rds: CreateDBCluster», «rds: CreateDBSecurityGroup», «rds: RebootDBInstance», «rds: DescribeDBClusterSnapshots», «rds: DescribeOptionGroupOptions», «rds: DownloadCompleteDBLogFile», «rds: rDDD»: CreateDBInstanceReadReplica "," rds: DescribeAccountAttributes "," rds: DescribeDBClusters "," rds: DescribeDBClusterParameterGroups "," rds: ModifyDBSubnetGroup "," rds: RestoreDBInstance * * 100 * * 100 "" 100 ":" "}

{"Version": "2012-10-17", "Statement": [{"Effect": "Allow", "Action": "lambda: GetFunctionConfiguration", "Resource": "arn: aws: lambda: ap-southeast-2: 904108119046: function: RDSInstanceStop "}]}

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Мне пришлось переписать лямбда-функцию с помощью Runtime Python 3.7:

import botocore
import boto3

rdsId = 'data-cluster-d9xka2hfg766'

def stopRDS():
    rds = boto3.client('rds')
    instances = rds.describe_db_clusters( DBClusterIdentifier=rdsId)

    status = instances.get('DBClusters')[0].get('Status')

    if status == 'available':    
        resp = rds.stop_db_cluster(DBClusterIdentifier=rdsId)
        print('Requested to stop rds: ' + str(rdsId))  
    else:
        print('RDS ' + str(rdsId) + ' is ' + str(status))

def lambda_handler(event, context):
    stopRDS()
    return 'Stopped environment.'
0 голосов
/ 30 ноября 2018

Это известная проблема

С https://github.com/boto/boto3/issues/1723

Похоже, что эти операции были недавно добавлены, и во время выполнения лямбды может отсутствовать последняя версия boto3, что означает операциюне доступноВам нужно будет связать более новую версию SDK с вашим лямбда-пакетом.Вот несколько документов по этому поводу: https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html

...