def ImageEBSSnapshotToS3(args: 'argparse.Namespace') -> None:
  """Image an EBS snapshot with the result placed into an S3 location.

  Unfortunately, this is not a natively supported operation in AWS. As such, we
  must create a instance, create a volume, mount the volume to the instance and
  perform a `dd` operation to perform the image. We achieve the creation of
  the volume, the attachment and the upload to S3 with a userdata script on the
  instance. That does mean however, the instance needs an instance profile with
  appropriate permissions.

  Args:
    args (argparse.Namespace): Arguments from ArgumentParser.
  """
  forensics.CopyEBSSnapshotToS3(
    instance_profile_name=args.instance_profile_name or 'ebsCopy',
    zone=args.zone,
    s3_destination=args.s3_destination,
    snapshot_id=args.snapshot_id,
    subnet_id=args.subnet_id,
    security_group_id=args.security_group_id,
    cleanup_iam=args.cleanup_iam
  )
Image an EBS snapshot with the result placed into an S3 location.

Unfortunately, this is not a natively supported operation in AWS. As such, we
must create a instance, create a volume, mount the volume to the instance and
perform a `dd` operation to perform the image. We achieve the creation of
the volume, the attachment and the upload to S3 with a userdata script on the
instance. That does mean however, the instance needs an instance profile with
appropriate permissions.

Args:
args (argparse.Namespace): Arguments from ArgumentParser.
tools/aws_cli.py