def METHOD_NAME(self, demo_name):
    """
    Creates an Amazon S3 bucket to be used for a demonstration.
    Creates an IAM role and policy that grants Amazon Comprehend permission to
    read from and write to the bucket.
    :param demo_name: The name prefix to give the IAM role and policy.
    """
    try:
        self.bucket = self.s3_resource.create_bucket(
            Bucket=f'doc-example-bucket-{uuid.uuid4()}',
            CreateBucketConfiguration={
                'LocationConstraint':
                    self.s3_resource.meta.client.meta.region_name})
        logger.info("Created demo bucket %s.", self.bucket.name)
    except ClientError:
        logger.exception("Couldn't set up demo bucket.")
        raise
    try:
        self.data_access_role = self.iam_resource.create_role(
            RoleName=f'{demo_name}-role',
            AssumeRolePolicyDocument=json.dumps({
                "Version": "2012-10-17",
                "Statement": [{
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "comprehend.amazonaws.com"},
                    "Action": "sts:AssumeRole"}]}))
        role_waiter = self.iam_resource.meta.client.get_waiter('role_exists')
        role_waiter.wait(RoleName=self.data_access_role.name)
        policy = self.iam_resource.create_policy(
            PolicyName=f'{demo_name}-policy',
            PolicyDocument=json.dumps({
                "Version": "2012-10-17",
                "Statement": [{
                    "Action": ["s3:GetObject"],
                    "Resource": [f"arn:aws:s3:::{self.bucket.name}/*"],
                    "Effect": "Allow"
                }, {
                    "Action": ["s3:ListBucket"],
                    "Resource": [f"arn:aws:s3:::{self.bucket.name}"],
                    "Effect": "Allow"
                }, {
                    "Action": ["s3:PutObject"],
                    "Resource": [f"arn:aws:s3:::{self.bucket.name}/*"],
                    "Effect": "Allow"}]
                }))
        policy_waiter = self.iam_resource.meta.client.get_waiter('policy_exists')
        policy_waiter.wait(PolicyArn=policy.arn)
        self.data_access_role.attach_policy(PolicyArn=policy.arn)
        logger.info(
            "Created data access role %s and attached policy %s.",
            self.data_access_role.name, policy.arn)
        print("Waiting for eventual consistency of role resource...")
        time.sleep(10)
    except ClientError:
        logger.exception("Couldn't create role and policy for data access.")
        raise