簡體   English   中英

使用Java訪問dynamoDB(本地)時無法加載AWS憑證錯誤

[英]Unable to load AWS credentials Error when accessing dynamoDB (local) with java

我已經安裝了dynamoDB的本地版本,並設置了一個maven java項目來訪問數據庫。 當我運行代碼時,出現以下錯誤。 由於我已經在本地安裝了服務器(運行本地主機:8000),所以我沒有任何憑據可提供...任何想法如何解決?

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)

當我尋找相同的問題時偶然發現了這一點。 經過半天的浪費時間,設法解決了該問題。 萬一有人再次發現這種情況,請在此處發布。

還有最糟糕的部分? 在瀏覽了數千頁之后,我不得不穿插並進行試驗的解決方案,您希望那里有關於該問題的一些信息。 至少,文檔中應該提到一些注意事項!

解決方案 :

配置AWS憑證 :進行設置以建立一些憑證。 將其配置為任何隨機的東西,並不重要。

是的,就是這樣!


對於那些仍然懶惰的人(像我一樣;-)),只需遵循以下最簡單的方法即可:

  1. 打開默認配置文件: ~/.aws/credentials
  2. 將其中的值更改為任何值(例如此處為空字符串)

     [default] aws_access_key_id='' aws_secret_access_key='' 
  3. 運行程序。 你以后可以謝謝我:D

我有一個類似的問題。 為了避免在本地運行測試時遇到的麻煩,我添加了幾行來設置java系統屬性。

System.setProperty(ACCESS_KEY_SYSTEM_PROPERTY,“訪問密鑰”); System.setProperty(SECRET_KEY_SYSTEM_PROPERTY,“ secretkey”);

根據Amazon Web Services文檔, 使用AWS憑證

官方支持的Java系統屬性是:

  • aws.accessKeyId
  • aws.secretKey

以下設置了這些系統屬性:

System.setProperty("aws.accessKeyId", "super-access-key");
System.setProperty("aws.secretKey", "super-secret-key");

需要在創建Amazon DynamoDB客戶端之前進行設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM