AuroraDBのリストアを自動化するためにスクリプトを作成しているのですが、エラーが発生し、詰まっているため、質問させていただきます。
https://dev.classmethod.jp/articles/aws-lambda-rds-restore/
上記をコピペし、AuroraDBリストアスクリプトを作成しました。
実行したところ、下記のエラーが発生しました。
[ERROR] DBSnapshotNotFoundFault: An error occurred (DBSnapshotNotFound) when calling the RestoreDBInstanceFromDBSnapshot operation: DBSnapshot not found: <snapshot名>
調査したところ、auroraは違うコマンドで実行するようで、コマンドを下記の記事の通り、修正しました。
https://qiita.com/paper2/items/48aeb92cea56428d524f
35 client.restore_db_instance_from_db_snapshot( ↓ 35 client.restore-db-cluster-from-snapshot(
渡すパラメータが一部違うので、下記の通り、追加と削除をしました。
DBClusterIdentifier #追加 DBClusterParameterGroup #追加 #DBInstanceIdentifier #削除
再度実行したところ、違うエラーに変わりました。
[ERROR] Runtime.UserCodeSyntaxError: Syntax error in module 'lambda_function': invalid syntax (lambda_function.py, line 34) Traceback (most recent call last): File "/var/task/lambda_function.py" Line 34 client.restore-db-cluster-from-snapshot(
lambda内でのrestore-db-cluster-from-snapshotを利用する場合もclient.の後に追加する形で動作すると思っているのですが、何かご存知であれば、教えて頂きたいです。
(client.に関してはまだ理解できておりません。)
コード追記
import boto3 import logging import os import json logger = logging.getLogger() logger.setLevel(logging.INFO) client = boto3.client('rds') def lambda_handler(event, context): snapshot_id = os.environ.get('SNAPSHOT_ID') if not snapshot_id: logger.info('START get_snapshot_id') snapshot_id = get_snapshot_id() logger.info('END get_snapshot_id') if (snapshot_id is None): logger.info('not found snapshot') return logger.info('snapshot_id:' + snapshot_id) #if (not is_exist_instance()): logger.info('START restore') restore(snapshot_id) logger.info('END restore') logger.info('START call_modify_lambda') call_modify_lambda() logger.info('END call_modify_lambda') #else: # logger.info('exist instance') def restore(snapshot_id): logger.info('restore snapshot id:' + snapshot_id) client.restore-db-cluster-from-snapshot( AvailabilityZones=['ap-northeast-1a'], DBClusterIdentifier='xxxx-cluster', SnapshotIdentifier=snapshot_id, Engine='aurora-mysql', DBClusterParameterGroupName='paramgroup-XXX' ) def is_exist_instance(): db_instances = client.describe_db_instances(); target_instance = \ filter(lambda x : x['DBInstanceIdentifier'] == os.environ.get('INSTANCE_ID'), db_instances['DBInstances']) return len(target_instance) > 0 def get_snapshot_id(): snapshot_list = client.describe_db_snapshots( DBInstanceIdentifier=os.environ.get('INSTANCE_ID'), SnapshotType='manual', ) logger.info(snapshot_list) snapshot_id = \ snapshot_list['DBSnapshots'][0]['DBSnapshotIdentifier'] if len(snapshot_list['DBSnapshots']) > 0 else None return snapshot_id def call_modify_lambda(): params = {} params['instance_id'] = os.environ.get('INSTANCE_ID') params['retry_count'] = 0 params['modified_flag'] = False client_lambda = boto3.client('lambda') client_lambda.invoke( FunctionName='modify-rds', InvocationType='Event', Payload=json.dumps(params) )
回答3件
あなたの回答
tips
プレビュー