2017-10-12 44 views
3

我已經安裝了本地版本的dynamoDB,並設置了一個Maven Java項目來訪問數據庫。當我運行代碼時,出現以下錯誤。由於我已經在本地安裝服務器(它運行兒子localhost:8000),我沒有任何憑據提供... 任何想法如何解決它?無法加載AWS憑證使用java訪問dynamoDB(本地)時發生錯誤

import java.util.Iterator; 

import org.apache.commons.cli.ParseException; 

import com.amazonaws.ClientConfiguration; 
import com.amazonaws.client.builder.AwsClientBuilder; 
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; 
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; 
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder; 
import com.amazonaws.services.dynamodbv2.document.DynamoDB; 
import com.amazonaws.services.dynamodbv2.document.Table; 
import com.amazonaws.services.dynamodbv2.document.TableCollection; 
import com.amazonaws.services.dynamodbv2.exceptions.DynamoDBLocalServiceException; 
import com.amazonaws.services.dynamodbv2.local.embedded.DynamoDBEmbedded; 
import com.amazonaws.services.dynamodbv2.local.main.ServerRunner; 
import com.amazonaws.services.dynamodbv2.local.server.DynamoDBProxyServer; 
import com.amazonaws.services.dynamodbv2.model.ListTablesResult; 

public class Test { 

    public static void main(String[] args) { 

     AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().withEndpointConfiguration(
        // we can use any region here 
        new AwsClientBuilder.EndpointConfiguration("http://localhost:8000", "us-west-2")) 
        .build(); 
     DynamoDB dynamoDB = new DynamoDB(client); 
     //dynamoDB.listTables(); 
     TableCollection<ListTablesResult> list = dynamoDB.listTables(); 

     Iterator<Table> iterator = list.iterator(); 

      System.out.println("Listing table names"); 

      while (iterator.hasNext()) { 
       Table table = iterator.next(); 
       System.out.println(table.getTableName()); 
      } 


     System.out.println("over"); 
    } 



} 

錯誤是

Exception in thread "main" com.amazonaws.SdkClientException: Unable to load AWS credentials from any provider in the chain 
    at com.amazonaws.auth.AWSCredentialsProviderChain.getCredentials(AWSCredentialsProviderChain.java:131) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.getCredentialsFromContext(AmazonHttpClient.java:1115) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.runBeforeRequestHandlers(AmazonHttpClient.java:764) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:728) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:721) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:704) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:672) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:654) 
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:518) 
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.doInvoke(AmazonDynamoDBClient.java:1831) 
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:1807) 
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.listTables(AmazonDynamoDBClient.java:1123) 
    at com.amazonaws.services.dynamodbv2.document.internal.ListTablesCollection.firstPage(ListTablesCollection.java:46) 
    at com.amazonaws.services.dynamodbv2.document.internal.PageIterator.next(PageIterator.java:45) 
    at com.amazonaws.services.dynamodbv2.document.internal.IteratorSupport.nextResource(IteratorSupport.java:87) 
    at com.amazonaws.services.dynamodbv2.document.internal.IteratorSupport.hasNext(IteratorSupport.java:55) 

回答

1

在這種迷迷糊糊的時候我正在尋找同樣的問題。經過半天的浪費,設法解決了這個問題。在這裏發帖,以防有人再次遇到這種情況。

而最糟糕的是?我需要經過數千頁的解決方案才能實現這個解決方案,並希望能夠獲得關於該問題的一些信息。至少,文檔應該提到一些注意事項!

解決辦法:

Configuring AWS Credentials:去通過建立一些憑證。將其配置爲任何隨機事物,這並不重要。

是的,這是它!


對於那些PPL誰仍然懶惰(像我一樣;-))要經過,只要按照最簡單的方法:

  1. 打開默認的配置文件:~/aws/credentials
  2. 變化它的任何值(喜歡這裏空字符串)

    [default] 
    aws_access_key_id='' 
    aws_secret_access_key='' 
    
  3. 運行程序。您可以稍後感謝我:D

相關問題