diff --git a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/AbstractCloudExternalFileWriter.java b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/AbstractCloudExternalFileWriter.java
index fb8150b..73a0aeb 100644
--- a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/AbstractCloudExternalFileWriter.java
+++ b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/AbstractCloudExternalFileWriter.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.cloud.writer;
 
+import static org.apache.hyracks.api.util.ExceptionUtils.getMessageOrToString;
+
 import org.apache.asterix.cloud.CloudOutputStream;
 import org.apache.asterix.cloud.CloudResettableInputStream;
 import org.apache.asterix.cloud.IWriteBufferProvider;
@@ -91,26 +93,55 @@
 
     @Override
     public final void write(IValueReference value) throws HyracksDataException {
-        printer.print(value);
+        try {
+            printer.print(value);
+        } catch (HyracksDataException e) {
+            throw e;
+        } catch (Exception e) {
+            if (isSdkException(e)) {
+                throw RuntimeDataException.create(ErrorCode.EXTERNAL_SOURCE_ERROR, e, getMessageOrToString(e));
+            }
+            throw e;
+        }
     }
 
     @Override
     public final void abort() throws HyracksDataException {
-        if (bufferedWriter != null) {
-            bufferedWriter.abort();
+        try {
+            if (bufferedWriter != null) {
+                bufferedWriter.abort();
+            }
+            printer.close();
+        } catch (HyracksDataException e) {
+            throw e;
+        } catch (Exception e) {
+            if (isSdkException(e)) {
+                throw RuntimeDataException.create(ErrorCode.EXTERNAL_SOURCE_ERROR, e, getMessageOrToString(e));
+            }
+            throw e;
         }
-        printer.close();
     }
 
     @Override
     public final void close() throws HyracksDataException {
-        printer.close();
+        try {
+            printer.close();
+        } catch (HyracksDataException e) {
+            throw e;
+        } catch (Exception e) {
+            if (isSdkException(e)) {
+                throw RuntimeDataException.create(ErrorCode.EXTERNAL_SOURCE_ERROR, e, getMessageOrToString(e));
+            }
+            throw e;
+        }
     }
 
     abstract String getAdapterName();
 
     abstract int getPathMaxLengthInBytes();
 
+    abstract boolean isSdkException(Exception e);
+
     private boolean checkAndWarnExceedingMaxLength(String fullPath) {
         boolean exceeding = isExceedingMaxLength(fullPath, getPathMaxLengthInBytes());
         if (exceeding && warningCollector.shouldWarn()) {
diff --git a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriter.java b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriter.java
index 648dda5..e896c05 100644
--- a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriter.java
+++ b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriter.java
@@ -24,6 +24,8 @@
 import org.apache.hyracks.api.exceptions.IWarningCollector;
 import org.apache.hyracks.api.exceptions.SourceLocation;
 
+import software.amazon.awssdk.core.exception.SdkException;
+
 final class S3ExternalFileWriter extends AbstractCloudExternalFileWriter {
     static int MAX_LENGTH_IN_BYTES = 1024;
 
@@ -41,4 +43,9 @@
     int getPathMaxLengthInBytes() {
         return MAX_LENGTH_IN_BYTES;
     }
+
+    @Override
+    boolean isSdkException(Exception e) {
+        return e instanceof SdkException;
+    }
 }
diff --git a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriterFactory.java b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriterFactory.java
index 508225d..5036fc8 100644
--- a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriterFactory.java
+++ b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriterFactory.java
@@ -19,6 +19,7 @@
 package org.apache.asterix.cloud.writer;
 
 import static org.apache.asterix.cloud.writer.AbstractCloudExternalFileWriter.isExceedingMaxLength;
+import static org.apache.hyracks.api.util.ExceptionUtils.getMessageOrToString;
 
 import java.io.IOException;
 import java.util.Collections;
@@ -51,6 +52,7 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import software.amazon.awssdk.core.exception.SdkException;
 import software.amazon.awssdk.services.s3.model.NoSuchBucketException;
 
 public final class S3ExternalFileWriterFactory implements IExternalFileWriterFactory {
@@ -126,12 +128,13 @@
             doValidate(testClient, bucket);
         } catch (IOException e) {
             if (e.getCause() instanceof NoSuchBucketException) {
-                throw new CompilationException(ErrorCode.EXTERNAL_SOURCE_CONTAINER_NOT_FOUND, bucket);
+                throw CompilationException.create(ErrorCode.EXTERNAL_SOURCE_CONTAINER_NOT_FOUND, bucket);
             } else {
-                LOGGER.error(e);
                 throw CompilationException.create(ErrorCode.EXTERNAL_SOURCE_ERROR,
                         ExceptionUtils.getMessageOrToString(e));
             }
+        } catch (SdkException e) {
+            throw CompilationException.create(ErrorCode.EXTERNAL_SOURCE_ERROR, e, getMessageOrToString(e));
         }
     }
 
