2016-05-20 28 views
1

Die AWS-CLI für Dynamodb create-table ist ein wenig verwirrend, wenn es darum geht, globalen sekundären Index zu erstellen. Im CLI document, sagt sie globaler Sekundärindex mit der folgenden Ausdruck (Stenografie) ausgedrückt werden könnte:Erstellen von Dynamodb Global Secondary Index mit AWS CLI?

IndexName=string,KeySchema=[{AttributeName=string,KeyType=string},{AttributeName=string,KeyType=string}],Projection={ProjectionType=string,NonKeyAttributes=[string,string]},ProvisionedThroughput={ReadCapacityUnits=long,WriteCapacityUnits=long} ... 

Meine Interpretation ist, soll ich

--global-secondary-indexes IndexName=requesterIndex,Projection={ProjectionType=ALL},ProvisionedThroughput={ReadCapacityUnits=1,WriteCapacityUnits=1} 

Hinweis tun, dass ich nicht hier bin auch KeySchema zu Komplexität ableiten. Die Konsole gibt mir die folgende Fehlermeldung:

Parameter validation failed: 
Missing required parameter in GlobalSecondaryIndexes[0]: "KeySchema" 
Unknown parameter in GlobalSecondaryIndexes[0]: "WriteCapacityUnits", must be one of: IndexName, KeySchema, Projection, ProvisionedThroughput 
Invalid type for parameter GlobalSecondaryIndexes[0].ProvisionedThroughput, value: ReadCapacityUnits=1, type: <class 'str'>, valid types: <class 'dict'> 

Also irgendwie AWS CLI nicht die Karte Ausdruck für ProvisionedThroughput erkennen. Ich habe mehrere Möglichkeiten ausprobiert, um es auszudrücken und konnte es nicht zum Laufen bringen. Ich habe auch keine Webseite in Google gefunden, die beschreibt, wie man es macht. Bitte helfen Sie! Vielen Dank!

Antwort

1

Lesen Sie AWS CLI source code on Github, es könnte Doppelzitat Inhalte analysieren. Das Hinzufügen eines doppelten Zitats im Skript löste das Problem. Es ist der neue Code -

--global-secondary-indexes IndexName=requesterIndex,Projection={ProjectionType=ALL},ProvisionedThroughput="{ReadCapacityUnits=${CURRENT_READUNIT},WriteCapacityUnits=${CURRENT_WRITEUNIT}}" 
+1

Ja. Deine Antwort ist richtig! Ich habe mit dem gleichen Problem gekämpft. Es ist traurig, dass in der Dokumentation für AWS CLI kein gutes Beispiel für Global Secondary Index vorhanden ist und Sie Zeit benötigen, um das Problem zu untersuchen. –

3

Dies ist der cli Anruf, den ich verwendet, um die Antworten Probe in der aws Dokumentation über die Befehlszeile zu erstellen. Der $ EP, den ich am Ende verwendet habe, kann in der Umgebung auf EP="--endpoint-url http://localhost:8000" gesetzt werden, um die Tabelle auf Ihrem lokalen Dynamob anstelle von aws zu erstellen.

aws dynamodb create-table --table-name Reply --attribute-definitions \ 
AttributeName=Id,AttributeType=S AttributeName=ReplyDateTime,AttributeType=S \ 
AttributeName=PostedBy,AttributeType=S AttributeName=Message,AttributeType=S \ 
--key-schema AttributeName=Id,KeyType=HASH \ 
AttributeName=ReplyDateTime,KeyType=RANGE --global-secondary-indexes \ 
IndexName=PostedBy-Message-Index,KeySchema=["\ 
{AttributeName=PostedBy,KeyType=HASH}","\ 
{AttributeName=Message,KeyType=RANGE}"],Projection="{ProjectionType=INCLUDE \ 
,NonKeyAttributes=["ReplyDateTime"]}",ProvisionedThroughput="\ 
{ReadCapacityUnits=10,WriteCapacityUnits=10}" --provisioned-throughput \ 
ReadCapacityUnits=5,WriteCapacityUnits=4 $EP 
+0

Es wäre nützlich zu erklären, warum und wie dies das Problem löst. – swa66

+0

Bitte formatieren Sie Ihren Code. –