def connect_associate_instance_storage_config()

in sam-app/lambda_functions/sfExecuteAWSService.py [0:0]


def connect_associate_instance_storage_config(ConnectInstanceId, ResourceType, StorageType, BucketName="", BucketPrefix="", StreamArn="", s3KMSKeyARN=""):
    connect = boto3.client("connect")

    storage_config = { "StorageType": StorageType }
    if StorageType == "S3":
        storage_config["S3Config"] = {
            "BucketName": BucketName,
            "BucketPrefix": BucketPrefix
        }
        if s3KMSKeyARN:
            storage_config["S3Config"]["EncryptionConfig"] = {
                "EncryptionType": "KMS",
                "KeyId": s3KMSKeyARN
            }
    elif StorageType == "KINESIS_STREAM":
        storage_config["KinesisStreamConfig"] = {
            "StreamArn": StreamArn
        }

    result = None
    iter = 0
    errors = []
    while result is None:
        try:
            storage_config_list = connect.list_instance_storage_configs(InstanceId=ConnectInstanceId, ResourceType=ResourceType)["StorageConfigs"]
            if len(storage_config_list) > 0:
                # should only be one of each storage type
                association_id = storage_config_list[0]["AssociationId"]
                result = connect.update_instance_storage_config(
                    InstanceId=ConnectInstanceId,
                    AssociationId=association_id,
                    ResourceType=ResourceType,
                    StorageConfig=storage_config
                )
            else:
                result = connect.associate_instance_storage_config(
                    InstanceId=ConnectInstanceId,
                    ResourceType=ResourceType,
                    StorageConfig=storage_config
                )
        except botocore.exceptions.ClientError as e:
            iter += 1
            errors.append(str(e))
            if e.response['Error']['Code'] == 'ResourceNotFoundException' and iter < 5:
                sleep(2)
            else:
                raise Exception(str(errors))
    formatted_result = format_datetime_values(result)
    logger.info("result: %s" % json.dumps(formatted_result))
    return formatted_result