diff --git a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceModule.java b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceModule.java
index b468ab0..b490176 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceModule.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceModule.java
@@ -18,8 +18,6 @@
 import com.google.common.base.Preconditions;
 import com.google.common.base.Stopwatch;
 import com.google.common.base.Strings;
-import com.google.common.base.Supplier;
-import com.google.common.base.Suppliers;
 import com.google.common.base.Throwables;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -72,6 +70,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
@@ -314,8 +313,8 @@
             : "local";
 
     CountingArtifactGroupNamer artifactGroupNamer = new CountingArtifactGroupNamer();
-    Supplier<BuildEventArtifactUploader> uploaderSupplier =
-        Suppliers.memoize(
+    ThrowingBuildEventArtifactUploaderSupplier uploaderSupplier =
+        new ThrowingBuildEventArtifactUploaderSupplier(
             () ->
                 cmdEnv
                     .getRuntime()
@@ -334,7 +333,14 @@
       return;
     }
 
-    bepTransports = createBepTransports(cmdEnv, uploaderSupplier, artifactGroupNamer);
+    try {
+      bepTransports = createBepTransports(cmdEnv, uploaderSupplier, artifactGroupNamer);
+    } catch (IOException e) {
+      cmdEnv
+          .getBlazeModuleEnvironment()
+          .exit(new AbruptExitException(ExitCode.LOCAL_ENVIRONMENTAL_ERROR, e));
+      return;
+    }
     if (bepTransports.isEmpty()) {
       // Exit early if there are no transports to stream to.
       return;
@@ -601,8 +607,9 @@
   @Nullable
   private BuildEventServiceTransport createBesTransport(
       CommandEnvironment cmdEnv,
-      Supplier<BuildEventArtifactUploader> uploaderSupplier,
-      CountingArtifactGroupNamer artifactGroupNamer) {
+      ThrowingBuildEventArtifactUploaderSupplier uploaderSupplier,
+      CountingArtifactGroupNamer artifactGroupNamer)
+      throws IOException {
     if (Strings.isNullOrEmpty(besOptions.besBackend)) {
       clearBesClient();
       return null;
@@ -672,8 +679,9 @@
 
   private ImmutableSet<BuildEventTransport> createBepTransports(
       CommandEnvironment cmdEnv,
-      Supplier<BuildEventArtifactUploader> uploaderSupplier,
-      CountingArtifactGroupNamer artifactGroupNamer) {
+      ThrowingBuildEventArtifactUploaderSupplier uploaderSupplier,
+      CountingArtifactGroupNamer artifactGroupNamer)
+      throws IOException {
     ImmutableSet.Builder<BuildEventTransport> bepTransportsBuilder = new ImmutableSet.Builder<>();
 
     if (!Strings.isNullOrEmpty(besStreamOptions.buildEventTextFile)) {
@@ -805,4 +813,31 @@
   ImmutableSet<BuildEventTransport> getBepTransports() {
     return bepTransports;
   }
+
+  private static class ThrowingBuildEventArtifactUploaderSupplier {
+    private final Callable<BuildEventArtifactUploader> callable;
+    @Nullable private BuildEventArtifactUploader memoizedValue;
+    @Nullable private IOException exception;
+
+    ThrowingBuildEventArtifactUploaderSupplier(Callable<BuildEventArtifactUploader> callable) {
+      this.callable = callable;
+    }
+
+    BuildEventArtifactUploader get() throws IOException {
+      if (memoizedValue == null && exception == null) {
+        try {
+          memoizedValue = callable.call();
+        } catch (IOException e) {
+          exception = e;
+        } catch (Exception e) {
+          Throwables.throwIfUnchecked(e);
+          throw new IllegalStateException(e);
+        }
+      }
+      if (memoizedValue != null) {
+        return memoizedValue;
+      }
+      throw exception;
+    }
+  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
index 0f4bb97..26e54f3 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
@@ -543,7 +543,7 @@
     }
 
     @Override
-    public BuildEventArtifactUploader create(CommandEnvironment env) {
+    public BuildEventArtifactUploader create(CommandEnvironment env) throws IOException {
       BuildEventArtifactUploaderFactory uploaderFactory0 = this.uploaderFactory;
       if (uploaderFactory0 == null) {
         return new LocalFilesArtifactUploader();
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
index 09b50ad..837a6d1 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -282,7 +282,7 @@
   }
 
   private BuildEventArtifactUploader newUploader(
-      CommandEnvironment env, String buildEventUploadStrategy) {
+      CommandEnvironment env, String buildEventUploadStrategy) throws IOException {
     return getBuildEventArtifactUploaderFactoryMap().select(buildEventUploadStrategy).create(env);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BuildEventArtifactUploaderFactory.java b/src/main/java/com/google/devtools/build/lib/runtime/BuildEventArtifactUploaderFactory.java
index b48b309..d4ee8dd 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BuildEventArtifactUploaderFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BuildEventArtifactUploaderFactory.java
@@ -16,6 +16,7 @@
 
 import com.google.devtools.build.lib.buildeventstream.BuildEventArtifactUploader;
 import com.google.devtools.build.lib.buildeventstream.LocalFilesArtifactUploader;
+import java.io.IOException;
 
 /** A factory for {@link BuildEventArtifactUploader}. */
 public interface BuildEventArtifactUploaderFactory {
@@ -27,6 +28,6 @@
    * Returns a new instance of a {@link BuildEventArtifactUploader}. The call is responsible for
    * calling {@link BuildEventArtifactUploader#shutdown()} on the returned instance.
    */
-  BuildEventArtifactUploader create(CommandEnvironment env);
+  BuildEventArtifactUploader create(CommandEnvironment env) throws IOException;
 }
 
diff --git a/src/test/java/com/google/devtools/build/lib/buildeventstream/BuildEventArtifactUploaderFactoryMapTest.java b/src/test/java/com/google/devtools/build/lib/buildeventstream/BuildEventArtifactUploaderFactoryMapTest.java
index cef128b..a760ef0 100644
--- a/src/test/java/com/google/devtools/build/lib/buildeventstream/BuildEventArtifactUploaderFactoryMapTest.java
+++ b/src/test/java/com/google/devtools/build/lib/buildeventstream/BuildEventArtifactUploaderFactoryMapTest.java
@@ -22,6 +22,7 @@
 import com.google.devtools.build.lib.runtime.BuildEventArtifactUploaderFactoryMap;
 import com.google.devtools.build.lib.runtime.CommandEnvironment;
 import com.google.devtools.build.lib.vfs.Path;
+import java.io.IOException;
 import java.util.Map;
 import org.junit.Before;
 import org.junit.Test;
@@ -70,7 +71,7 @@
   }
 
   @Test
-  public void testAlphabeticalOrder() {
+  public void testAlphabeticalOrder() throws IOException {
     assertThat(uploaderFactories.select(null).create(null).getClass())
         .isEqualTo(LocalFilesArtifactUploader.class);
   }
