Appian Community and Appian Academy are being upgraded. As a part of the upgrade, Appian Community is currently in read-only mode, and user registration is disabled until August 3. We apologize for any inconvenience this may cause, but a more secure, stable, and performant Community experience is coming soon!

The new Appian Community launches August 3, followed by Appian Academy on August 7. During the migration, Appian Community Edition, Appian Academy, Documentation, Certifications, Instructor-led Customer Training, Partner Sales Training & Accreditation, and Forum (for Appian Partners and Customers only) will remain available.

Amazon S3 Utilities

Overview

The Amazon S3 Utilities Plug-in leverages the Amazon AWS Java API to connect with Amazon S3 to store and retrieve files.  

Key Features & Functionality

The following smart services are included:

  • Upload documents to AWS S3
  • Download documents from AWS S3
  • Create Folders in AWS S3
  • Delete documents from AWS S3

The plug-in also includes a function:

  • getPreSignedURLForS3 that generates a V4 pre signed url that expires after 5s. This allows for a short term access grant to a secured resource. It can be used in a WebAPI object to redirect a user from Appian to a resource on S3.

Amazon S3 Utilities supports the following Amazon S3 features:

Note:  The plug-in requires Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files when using client side encryption.

(https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html)

The Appian Secure Credential Store is leveraged for the credentials to integrate with Amazon S3. Before executing the plug-in, create an new secure credential store with the following 3 attributes.  These values are obtained from Amazon AWS IAM console.

  • accesskeyid: this is the access key id for connecting to AWS S3
  • accesskeysecret: this is the access key secret for connecting to AWS S3
  • kmscmkid: this attribute is only required if using AWS Client Side Encryption
Anonymous
Parents
  • Hi there,

    I am getting an error Error closing file stream.Endpoint does not contain a valid host name: null

    I get the same error whether I specify the bucket name or the bucket arn.

    For the file I am specifying an array with one element which is a full JSON filename (e.g. foobar.json).

    Any help would be appreciated.

    Regards

    Rod

  • Just to clarify further...

    When I use s3://somepath/foobar.json or https://somepath/foobar.json   then I get variations of 

    Error closing file stream.The specified key does not exist. (Service: Amazon S3; Status Code: 404; Error Code: NoSuchKey; 

    From https://stackoverflow.com/questions/28653249/amazon-s3-exception-the-specified-key-does-not-exist it seems people get this error when the file doesn't exist on the bucket. Am I specifying the file details incorrectly?

    If I leave out the optional Region field I get Error closing file stream.Endpoint does not contain a valid host name: null

    If I include the region to be eu-west-1 then I get the The specified key does not exist errors.

    Any suggestions would be great.

    regards

    Rod

Comment
  • Just to clarify further...

    When I use s3://somepath/foobar.json or https://somepath/foobar.json   then I get variations of 

    Error closing file stream.The specified key does not exist. (Service: Amazon S3; Status Code: 404; Error Code: NoSuchKey; 

    From https://stackoverflow.com/questions/28653249/amazon-s3-exception-the-specified-key-does-not-exist it seems people get this error when the file doesn't exist on the bucket. Am I specifying the file details incorrectly?

    If I leave out the optional Region field I get Error closing file stream.Endpoint does not contain a valid host name: null

    If I include the region to be eu-west-1 then I get the The specified key does not exist errors.

    Any suggestions would be great.

    regards

    Rod

Children
  • These are my logs:

    2025-06-27 07:45:12,203 [Appian Work Item - 2885 - WorkID 930 - execution01 - process 268464249 - model 1545 : UnattendedJavaActivityRequest] ERROR com.appiancs.plugins.amazonS3Utils.ss.DownloadObjectsFromAmazonS3 - Error closing file stream
    com.amazonaws.services.s3.model.AmazonS3Exception: The specified key does not exist. (Service: Amazon S3; Status Code: 404; Error Code: NoSuchKey; Request ID: MSZ26TTCVREFYKY8; S3 Extended Request ID: 6c2JJ0h8QrPokOH+UKIfTSLBeOS99+zAHeCkn3OF4bwetQnZp8Kv1ZAHTmSJ5HieqqZRvZWLpKY=; Proxy: null), S3 Extended Request ID: 6c2JJ0h8QrPokOH+UKIfTSLBeOS99+zAHeCkn3OF4bwetQnZp8Kv1ZAHTmSJ5HieqqZRvZWLpKY=
    	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1879)
    	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleServiceErrorResponse(AmazonHttpClient.java:1418)
    	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1387)
    	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1157)
    	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:814)
    	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:781)
    	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:755)
    	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:715)
    	at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:697)
    	at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:561)
    	at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:541)
    	at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5558)
    	at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5505)
    	at com.amazonaws.services.s3.AmazonS3Client.getObject(AmazonS3Client.java:1555)
    	at com.appiancs.plugins.amazonS3Utils.ss.S3Operations.downloadFromS3(S3Operations.java:122)
    	at com.appiancs.plugins.amazonS3Utils.ss.DownloadObjectsFromAmazonS3.getInputStream(DownloadObjectsFromAmazonS3.java:140)
    	at com.appiancs.plugins.amazonS3Utils.ss.DownloadObjectsFromAmazonS3.run(DownloadObjectsFromAmazonS3.java:87)
    	at com.appiancorp.process.runtime.framework.DefaultActivityExecutor$1.lambda$call$0(DefaultActivityExecutor.java:129)
    	at com.appiancorp.plugins.PluginUsageLogger.runWithPluginInformation(PluginUsageLogger.java:54)
    	at com.appiancorp.process.runtime.framework.DefaultActivityExecutor$1.call(DefaultActivityExecutor.java:129)
    	at com.appiancorp.process.runtime.framework.DefaultActivityExecutor$1.call(DefaultActivityExecutor.java:123)
    	at com.appiancorp.common.ContextClassLoaderSwitcher.runInContext(ContextClassLoaderSwitcher.java:30)
    	at com.appiancorp.process.runtime.framework.DefaultActivityExecutor.execute(DefaultActivityExecutor.java:123)
    	at com.appiancorp.process.engine.UnattendedJavaActivityRequest.execute(UnattendedJavaActivityRequest.java:110)
    	at com.appiancorp.process.engine.UnattendedJavaActivityRequestResponseCreator.getJavaActivityResultResponse(UnattendedJavaActivityRequestResponseCreator.java:23)
    	at com.appiancorp.process.engine.UnattendedJavaActivityRequest.getJavaActivityResultResponse(UnattendedJavaActivityRequest.java:89)
    	at com.appiancorp.process.engine.UnattendedJavaActivityRequest.execute0(UnattendedJavaActivityRequest.java:72)
    	at com.appiancorp.common.persistence.data.AppianDataUserContextProvider.executeWithConsistentDataReads(AppianDataUserContextProvider.java:143)
    	at com.appiancorp.process.engine.ProcessContinuationRequest.executeOuter(ProcessContinuationRequest.java:68)
    	at com.appiancorp.process.engine.ActivityRequest.executeOuter(ActivityRequest.java:41)
    	at com.appiancorp.process.engine.ContinuationRequest.execute(ContinuationRequest.java:136)
    	at com.appiancorp.process.engine.UnattendedJavaActivityRequest.execute(UnattendedJavaActivityRequest.java:125)
    	at com.appiancorp.process.workpoller.UnattendedRequestHandlerBean.onMessage(UnattendedRequestHandlerBean.java:36)
    	at com.appiancorp.process.workpoller.WorkItem.run(WorkItem.java:110)
    	at org.springframework.jca.work.SimpleTaskWorkManager$DelegatingWorkAdapter.run(SimpleTaskWorkManager.java:241)
    	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    	at java.base/java.lang.Thread.run(Thread.java:840)