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