def handle_restore_event_data()

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")