2017-11-29 1 views
1

Auch ich habe die Portnummer, aber ich habe nicht gefunden, wo ich es einstellen soll. Wie kann ich dieses Problem beheben? Durch Pythons "Boto" -Client bin ich erfolgreich mit meinem Dienst verbunden, aber auf Scala gibt es immer eine verbotene Nachricht zurück.Verbindung zu Amazon S3 auf Scala nicht möglich. Python Verbindung funktioniert gut, aber auf Scala bekomme ich 403 Verbotene Antwort

object a extends App{ 

     import com.amazonaws.auth.BasicAWSCredentials 

     val accessKey = "myAccessKey" 
     val secretKey = "mySecretKey" 
     val credentials = new BasicAWSCredentials(accessKey, secretKey) 

     import com.amazonaws.services.s3.AmazonS3Client 

     val s3client = new AmazonS3Client(credentials) 

     s3client.setEndpoint("address") 

     val s3object = s3client.getObject("myBucket", "file.txt") 

     println(s3object.getKey, s3object.getObjectMetadata.getLastModified) 
    } 

Hier ist Fehlerprotokoll:

Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden (Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden; Request ID: null; S3 Extended Request ID: null), S3 Extended Request ID: null 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1639) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1304) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1056) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:743) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:717) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649) 
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513) 
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4319) 
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4266) 
    at com.amazonaws.services.s3.AmazonS3Client.getObject(AmazonS3Client.java:1406) 
    at com.amazonaws.services.s3.AmazonS3Client.getObject(AmazonS3Client.java:1267) 
    at a$.delayedEndpoint$a$1(a.scala:17) 
    at a$delayedInit$body.apply(a.scala:3) 
    at scala.Function0.apply$mcV$sp(Function0.scala:34) 
    at scala.Function0.apply$mcV$sp$(Function0.scala:34) 
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12) 
    at scala.App.$anonfun$main$1$adapted(App.scala:76) 
    at scala.collection.immutable.List.foreach(List.scala:389) 
    at scala.App.main(App.scala:76) 
    at scala.App.main$(App.scala:74) 
    at a$.main(a.scala:3) 
    at a.main(a.scala) 

Antwort

0

Das AWS SDK schreckt irgendwie die endpoint (JavaDoc) mit:

Nur anzuwenden, wenn ein Nicht-Standard-Service-Endpunkt verwendet - die empfohlener Ansatz zum Konfigurieren eines Clients ist die Verwendung von {@link #withRegion (String)}

Verwenden Sie stattdessen withRegion:

import com.amazonaws.auth.{AWSStaticCredentialsProvider, BasicAWSCredentials} 
import com.amazonaws.regions.Regions 
import com.amazonaws.services.s3.AmazonS3Client 

AmazonS3Client.builder() 
    .withCredentials(new AWSStaticCredentialsProvider(
    new BasicAWSCredentials("accessKey", "secretKey"))) 
    .withRegion(Regions.EU_WEST_1).build() 
Verwandte Themen