Использование DynamoDB -> Ресурс не найден - PullRequest
0 голосов
/ 15 мая 2019

Чтобы настроить систему на AWS, где можно создавать и использовать учетные записи пользователей из приложения для iOS, я недавно следовал этому руководству , в котором используются AWSMobileClient, AWSAuthCore и * 1006. *.

У меня есть кое-что работающее, где я могу создавать учетные записи и входить и выходить из системы.

Теперь я хотел бы использовать DynamoDB, чтобы позволить пользователю что-то хранить. Для этого я попытался интегрировать код DynamoDB, который у меня работает, в другое приложение. Но очевидно, что среда двух приложений не совсем одинакова, поэтому она не работает так, как мне бы хотелось.

Вот код для данных DynamoDB, которые я хочу обработать:

import Foundation
import AWSDynamoDB

@objcMembers
class DynamoDBData: AWSDynamoDBObjectModel, AWSDynamoDBModeling {

    var _message,_timeStamp,_user: String?

    class func dynamoDBTableName() -> String {
        return "DynamoDBData"
    }

    class func hashKeyAttribute() -> String {
        return "_timeStamp"
    }

    class func rangeKeyAttribute() -> String {
        return "_user"
    }

    override class func jsonKeyPathsByPropertyKey() -> [AnyHashable: Any] {
        return [
            "_message" : "message",
            "_timeStamp" : "timeStamp",
            "_user" : "user"
        ]
    }
}

А вот код для того, где я пытаюсь что-то сохранить в БД и терпит неудачу:

@objc func handleTap() {
    print(#function)
    let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()

    // Create data object using the data model:
    let dataBlock = DynamoDBData()
    dataBlock?._message = "message-TEST"
    dataBlock?._timeStamp = "timeStamp-TEST"
    dataBlock?._user = "user-TEST"

    // Save the new item:
    dynamoDbObjectMapper.save(dataBlock!, completionHandler: {
        (error: Error?) -> Void in

        if let error = error {
            print("Amazon DynamoDB Save Error: \(error)")
            return
        }
        print("An item was saved.")
    })
}

Наконец, это сообщение, которое показывает проблему при попытке сохранить данные:

Amazon DynamoDB Save Error: Error Domain=com.amazonaws.AWSDynamoDBErrorDomain Code=19 "(null)"
 UserInfo={__type=com.amazonaws.dynamodb.v20120810#ResourceNotFoundException, 
 message=Requested resource not found}

Поскольку я создал таблицу DynamoDBData на консоли AWS, я не совсем понимаю, почему она говорит: «Запрошенный ресурс не найден», но я полагаю, что в какой-то момент я сделал что-то не так.

В случае, если это может быть полезно, вот что появляется в консоли AWS для таблицы DynamoDBData:

Table name  DynamoDBData
Primary partition key   _timeStamp (String)
Primary sort key    _user (String)
Point-in-time recovery  DISABLED Enable
Encryption Type DEFAULT Manage Encryption
KMS Master Key ARN  Not Applicable
Time to live attribute  DISABLED Manage TTL
Table status    Active
Creation date   May 15, 2019 at 10:13:43 AM UTC+9
UTC: May 15, 2019 at 1:13:43 AM UTC
Local: May 15, 2019 at 10:13:43 AM UTC+9
Region (N. Virginia): May 14, 2019 at 8:13:43 PM UTC-5
Read/write capacity mode    Provisioned
Last change to on-demand mode   -
Provisioned read capacity units 5 (Auto Scaling Disabled)
Provisioned write capacity units    5 (Auto Scaling Disabled)
Last decrease time  -
Last increase time  -Storage size (in bytes)    0 bytes
Item count  0 Manage live count
Region  US East (N. Virginia)
Amazon Resource Name (ARN)  arn:aws:dynamodb:us-east-1:123456789012:table/DynamoDBData

Некоторое руководство (даже частичное) о том, как решить эту проблему, было бы очень полезно.

1 Ответ

1 голос
/ 15 мая 2019

Одна вещь для двойной проверки: регион таблицы - это тот же регион, в котором вы пытаетесь получить к нему доступ?

Я заметил из комментария в вашем другом вопросе , что код пытался достичь arn: aws: dynamodb: ap-northeast-1, но выше показано, что таблица на самом деле находится в us-east-1.

...