14

Java SDK (v1.8) を使用して DynamoDB を起動して実行しています。AWS コンソールを使用して非常に単純なテーブルを作成しました。私のテーブルには、文字列 (範囲なし) であるプライマリ ハッシュ キーがあります。他の 4 つの属性値 (すべて文字列) を持つテーブルに 1 つの項目を入れました。

テーブル内のそのアイテムに対して単純な Java リクエストを作成していますが、ResourceNotFoundException. 私が提供しているテーブル名が正しいことは間違いありません。アイテムのクエリに使用しているプラ​​イマリ ハッシュ キーの名前も同様です。テーブルのステータスは AWS コンソールに表示されActive、項目とその値も確認できます。

これは私が得ているエラーです:

Requested resource not found (Service: AmazonDynamoDB; Status Code: 400; Error Code: ResourceNotFoundException; Request ID: ...)

私は(dynamodbv2クラスのバージョンを使用して)以下を試しました:

Map<String, AttributeValue> key = new HashMap<String, AttributeValue>();
key.put(PRIMARY_KEY, new AttributeValue().withS(value));

GetItemRequest request = new GetItemRequest()
    .withTableName(TABLE_NAME)
    .withKey(key);

GetItemResult result = client.getItem(request);

また、次のように、これらすべてのクラスの古い非推奨バージョンを使用してみました。

GetItemRequest request = new GetItemRequest()
        .withTableName(TABLE_NAME)
        .withKey(new Key().withHashKeyElement(new AttributeValue().withS(value)));
GetItemResult result = client.getItem(request);

・・・でも結果は同じ。
私の理解では、ResourceNotFoundException参照されているテーブル名または属性が無効であることを意味しますが、そうではありません。テーブルの状態が早すぎる場合にもスローされる可能性がありますCreatingが、私のテーブルはActive.

4

3 に答える 3

39

リクエストを行う前にクライアントのリージョンを設定していなかったため、リクエストは失敗していました。デフォルトのリージョンはおそらく米国東部で、私のテーブルは EU 西部に設定されています。これで修正されました:

import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;

client.setRegion(Region.getRegion(Regions.EU_WEST_1));
于 2014-10-11T12:17:10.490 に答える
0

Spring Boot を使用する場合は、次のようにできます。

@Configuration
@EnableDynamoDBRepositories(basePackages = "com.test.repository")
@EntityScan("com.test.entity")
public class DynamoDBConfig {

    @Value("${amazon.dynamodb.endpoint}")
    private String amazonDynamoDBEndpoint;

    @Value("${amazon.aws.accesskey}")
    private String amazonAWSAccessKey;

    @Value("${amazon.aws.secretkey}")
    private String amazonAWSSecretKey;

@Bean
public AmazonDynamoDB amazonDynamoDB() {
    AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(
        amazonDynamoDBEndpoint, Regions.AP_SOUTHEAST_2.getName());

    AWSStaticCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(amazonAWSCredentials());

    AmazonDynamoDB amazonDynamoDB = AmazonDynamoDBClientBuilder.standard().withEndpointConfiguration(
        endpointConfiguration).withCredentials(credentialsProvider).build();

    return amazonDynamoDB;
}

@Bean
public AWSCredentials amazonAWSCredentials() {
    return new BasicAWSCredentials(amazonAWSAccessKey, amazonAWSSecretKey);
}}
于 2017-07-28T11:52:11.193 に答える