in Lambda/TagOnRestore/src/TagOnRestore.py [0:0]
def handle_restore_event_data(self, job_id):
"""
Helper function to write the Restore Job Event data
"""
logger.info(f"Processing handle_restore_event_data with jobId : {job_id}")
backup_client = boto3.client('backup')
# boto3 API /services/backup.html#Backup.Client.describe_restore_job
restore_info = backup_client.describe_restore_job(RestoreJobId=job_id)
if 'ResponseMetadata' in restore_info:
del restore_info['ResponseMetadata']
backup_client = boto3.client('backup')
# https://docs.aws.amazon.com/aws-backup/latest/devguide/aws-backup-limits.html
# boto3 API /services/backup.html#Backup.Client.list_backup_vaults
backupvault_list = backup_client.list_backup_vaults(MaxResults=100)
recovery_info = []
for backupVaultInfo in backupvault_list['BackupVaultList']:
backup_vault_name = backupVaultInfo['BackupVaultName']
recovery_point_arn = restore_info['RecoveryPointArn']
try:
# Figure out the backup details {An Adhoc Way, but should work}
# boto3 API /services/backup.html#Backup.Client.describe_recovery_point
recovery_info = backup_client.describe_recovery_point(
BackupVaultName=backup_vault_name,
RecoveryPointArn=recovery_point_arn
)
if 'ResponseMetadata' in recovery_info:
del recovery_info['ResponseMetadata']
# Break since information is already found
break
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == "ResourceNotFoundException":
logger.info(
f"Recovery Point ARN : {recovery_point_arn} not found in Vault : {backup_vault_name}")
else:
logger.error(f"Error : {e} processing describe_recovery_point")
create_resource_arn = restore_info.get('CreatedResourceArn')
if create_resource_arn:
try:
resource_arn = recovery_info.get('ResourceArn')
resource_type = recovery_info.get('ResourceType')
recovery_point_arn = recovery_info.get('RecoveryPointArn')
tag_list = self.__get_tags_by_resource(resource_type, resource_arn,recovery_point_arn)
created_resource_id = self.get_resource_id_from_arn(create_resource_arn)
# Copy this tag list to target resource
self.__set_tags_by_resource(resource_type, created_resource_id, create_resource_arn,
tag_list['Tags'])
except Exception as e:
logger.error(f"Error : {e} processing __set_tags_by_resource")