質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1976閲覧

dynamodbのテーブルの作成方法について

m0a

総合スコア708

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2018/06/29 04:47

以下のようなコードでtableの作成を試みています。

const param: DynamoDB.CreateTableInput = { TableName: this.tableName, KeySchema: [ { AttributeName: 'id', KeyType: 'HASH' }, { AttributeName: 'expiredAt', KeyType: 'RANGE' }, { AttributeName: 'status', KeyType: 'RANGE' }, ], AttributeDefinitions: [ { AttributeName: 'id', AttributeType: 'S' }, { AttributeName: 'expiredAt', AttributeType: 'N' }, { AttributeName: 'status', AttributeType: 'S' }, ], ProvisionedThroughput: { ReadCapacityUnits: 10, WriteCapacityUnits: 10, }, } console.log(param) await this.dynamodb.createTable(param).promise()

ところが実行すると以下のようなエラーになってしまいます。

ValidationException: 1 validation error detected: Value '[xxxxa, xxxx, xxxx]' at 'keySchema' failed to satisfy constraint: Member must have length less than or equal to 2

項目数を2個以下に絞れと怒られているように見えます。
確かにプライマリキーに当たるのはidで十分ですが、どのような書き方にすればテーブル作成できますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

KeySchemaでRENGEキーを二つ作ろうとしているからですね。RENGEキーは一つしか設定できません。

KeySchema: [ { AttributeName: 'id', KeyType: 'HASH' }, { AttributeName: 'expiredAt', KeyType: 'RANGE' }, { AttributeName: 'status', KeyType: 'RANGE' }, ],

DynamoDBはテーブルを作成するときに、必要となる全てのアトリビュートを指定する必要がありません。
なので、今回の場合、idだけで問題ないのであれば、

KeySchema: [ { AttributeName: ‘id’, KeyType: ‘HASH’ } ], AttributeDefinitions: [ { AttributeName: ‘id’, AttributeType: ‘S’ } ],

で問題なくテーブルを作成することができます。

DynamoDBの主キーの考え方は、 HASHキー (+ RENGEキー) になります。
基本的に一つのHASHキーに対して一つのRENGEキーです。
ただHASHキーだけでも成り立ちますので、必要ならばRENGEキーをひとつ設定するといった感じです。
もし、RENGEキーを二つ以上作成したい場合はLSIまたはGSIを作成するようにしてください。
LSIのドキュメント
GSIのドキュメント

投稿2018/06/29 08:38

編集2018/06/29 08:43
ryo-is

総合スコア152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問