在创建全局二级索引时,AWS CLI for Dynamodb create-table有点混乱。在CLI document中,它表示全局二级索引可以用以下表达式(简写)表示:
IndexName=string,KeySchema=[{AttributeName=string,KeyType=string},{AttributeName=string,KeyType=string}],Projection={ProjectionType=string,NonKeyAttributes=[string,string]},ProvisionedThroughput={ReadCapacityUnits=long,WriteCapacityUnits=long} ...
我的解释是,我应该做
--global-secondary-indexes IndexName=requesterIndex,Projection={ProjectionType=ALL},ProvisionedThroughput={ReadCapacityUnits=1,WriteCapacityUnits=1}
请注意,我不会在此处包含KeySchema来推断复杂性。控制台给我以下错误:
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'>
因此,AWS CLI无法识别ProvisionedThroughput的地图表达式。我尝试了几种方法来表达它并且无法使其发挥作用。我也未能在Google中找到任何描述如何操作的网页。
答案 0 :(得分:4)
这是我用来在命令行的aws文档中创建Reply示例的cli调用。最后使用的$ EP可以在环境中设置为EP="--endpoint-url http://localhost:8000"
,以便在本地dynamodb上创建表而不是aws。
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
答案 1 :(得分:2)
在JSON文件中定义表结构,包括索引结构。使用以下命令创建模板结构。
aws dynamodb create-table --generate-cli-skeleton
使用表定义输入json运行cli命令
aws dynamodb create-table --cli-input-json file://path-to-yourtable-definition.json
答案 2 :(得分:1)
通读AWS CLI source code on Github,它可以解析双引号内容。因此在脚本中添加双引号解决了这个问题。有新代码 -
--global-secondary-indexes IndexName=requesterIndex,Projection={ProjectionType=ALL},ProvisionedThroughput="{ReadCapacityUnits=${CURRENT_READUNIT},WriteCapacityUnits=${CURRENT_WRITEUNIT}}"