2016-12-14 60 views
2

我試圖縮小以下400錯誤請求錯誤:AWS S3 400錯誤的請求

com.amazonaws.services.s3.model.AmazonS3Exception: Bad Request (Service: Amazon S3; Status Code: 400; Error Code: 400 Bad Request; Request ID: 7FBD3901B77A07C0), S3 Extended Request ID: +PrYXDrq9qJwhwHh+DmPusGekwWf+jmU2jepUkQX3zGa7uTT3GA1GlmHLkJjjjO67UQTndQA9PE= 
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1343) 
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:961) 
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:738) 
    at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:489) 
    at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:448) 
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:397) 
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:378) 
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4039) 
    at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:1177) 
    at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:1152) 
    at com.amazonaws.services.s3.AmazonS3Client.doesObjectExist(AmazonS3Client.java:1212) 
    at com.abcnews.apwebfeed.articleresolver.APWebFeedArticleResolverImpl.makeS3Crops(APWebFeedArticleResolverImpl.java:904) 
    at com.abcnews.apwebfeed.articleresolver.APWebFeedArticleResolverImpl.resolve(APWebFeedArticleResolverImpl.java:542) 
    at sun.reflect.GeneratedMethodAccessor62.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.codehaus.xfire.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:54) 
    at org.codehaus.xfire.service.binding.ServiceInvocationHandler.sendMessage(ServiceInvocationHandler.java:322) 
    at org.codehaus.xfire.service.binding.ServiceInvocationHandler$1.run(ServiceInvocationHandler.java:86) 
    at java.lang.Thread.run(Thread.java:662) 

我測試的imple的東西,因爲這:

boolean exists = s3client.doesObjectExist("aws-wire-qa", "wfiles/in/wire.json"); 

我手動添加wfiles/in/wire.json文件。當我在本地應用程序中運行此行時,我會回來。但是在一個單獨的遠程服務中,它會拋出上面的錯誤。我在本地應用程序中使用與服務內部相同的憑據。我也設置桶爲「啓用網站託管」,但沒有區別。 我的權限設置爲:

Grantee: Any Authenticated AWS User 
y List 
y Upload/DeleteView 
y PermissionsEdit Permissions  

因此,我認爲錯誤可能與不具有對桶的政策,並建立在桶政策文件GET/PUT /刪除對象,但我仍然得到相同的錯誤。我的政策是這樣的:

{ 
"Version": "2012-10-17", 
"Id": "Policy1481303257155", 
"Statement": [ 
    { 
     "Sid": "Stmt1481303250933", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::755710071517:user/law" 
     }, 
     "Action": [ 
      "s3:DeleteObject", 
      "s3:GetObject", 
      "s3:PutObject" 
     ], 
     "Resource": "arn:aws:s3:::aws-wire-qa/*" 
    } 
] 
} 

我被告知它不能成爲防火牆或代理問題。我還能嘗試什麼?該錯誤非常具體。到目前爲止,我只做了本地開發,所以我不知道還有什麼不能在這裏設置。非常感謝這裏的一些幫助。

+2

這與權限無關。您可能會將請求發送到錯誤的S3區域。 –

+0

@ Michael-sqlbot:你是對的,我之前正在測試另一個桶,並設法不改變這個區域。非常感謝!正確的目標! – user2917629

+0

權限問題很容易排除,因爲它應該是'403 Forbidden' ......我很高興修正它,但說實話,這只是一個直觀的猜測 - 幾個可能導致一個'400壞請求回覆。我想認爲Java SDK提供了一種訪問響應標題和正文的機制,因爲信息應該在那裏,並且這將提供更合理和有用的答案。 –

回答

3
curl -XPUT 'http://localhost:9200/_snapshot/repo_s3' -d '{ 
     "type": "s3", 
     "settings": { 
     "bucket": "my-bucket", 
     "base_path": "/folder/in/bucket", 
     "region": "eu-central"  
     } 
}' 

在我的情況下,這是一個地區問題!
我不得不從elasticsearch.yml中刪除該區域並在命令中設置。如果我不從YML文件中刪除區域,彈性不會啓動(與最新的S3存儲庫的插件)

Name: repository-s3 
Description: The S3 repository plugin adds S3 repositories 
Version: 5.2.2 
* Classname: org.elasticsearch.plugin.repository.s3.S3RepositoryPlugin 
+0

我也是一個區域錯誤,使用小提琴來查看他們的反應,因爲.net異常不明確。 –

+0

也是我的區域錯誤,但有趣的是,該文件在S3中依然顯示正常。去搞清楚。 – d512

+0

區域錯誤+1 –

0

使用招我已經看到了我的網址是錯誤的。

我不需要使用ServiceURL屬性和配置類,相反,我使用此客戶端的構造函數,使用您的區域作爲第三個參數。

 AmazonS3Client s3Client = new AmazonS3Client(
       ACCESSKEY, 
       SECRETKEY, 
       Amazon.RegionEndpoint.USEast1 
       );