- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个现有的 DynamoDB 表,该表定义为 CloudFormation 堆栈的一部分。根据CFN AWS::DynamoDB::Table documentation GlobalSecondaryIndexes 属性不需要替换。它甚至还详细介绍了以下注意事项。
You can delete or add one global secondary index without interruption.
以及以下...
If you update a table to include a new global secondary index, AWS CloudFormation initiates the index creation and then proceeds with the stack update. AWS CloudFormation doesn't wait for the index to complete creation because the backfilling phase can take a long time, depending on the size of the table.
但是,实际上,当我尝试执行更新时,我收到以下错误消息:
CloudFormation cannot update a stack when a custom-named resource requires replacing. Rename mytablename and update the stack again.
由于我添加了使用新属性的 GSI,因此我被迫修改 AttributeDefinitions,它表示它确实需要替换。但是,即使当我尝试添加仅包含 AttributeDefinitions 中定义的现有属性的 GSI 时,我仍然收到相同的错误消息。
以下是我的表的原始 CFN 定义的片段:
{
"myTable": {
"Type": "AWS::DynamoDB::Table",
"Properties": {
"TableName": "mytablename",
"AttributeDefinitions": [
{
"AttributeName": "entryId",
"AttributeType": "S"
},
{
"AttributeName": "entryName",
"AttributeType": "S"
},
{
"AttributeName": "appId",
"AttributeType": "S"
}
],
"KeySchema": [
{
"KeyType": "HASH",
"AttributeName": "entryId"
},
{
"KeyType": "RANGE",
"AttributeName": "entryName"
}
],
"ProvisionedThroughput": {
"ReadCapacityUnits": {
"Ref": "readThroughput"
},
"WriteCapacityUnits": {
"Ref": "writeThroughput"
}
},
"GlobalSecondaryIndexes": [
{
"IndexName": "appId-index",
"KeySchema": [
{
"KeyType": "HASH",
"AttributeName": "appId"
}
],
"Projection": {
"ProjectionType": "KEYS_ONLY"
},
"ProvisionedThroughput": {
"ReadCapacityUnits": {
"Ref": "readThroughput"
},
"WriteCapacityUnits": {
"Ref": "writeThroughput"
}
}
}
]
}
}
}
这是我想要更新的内容:
{
"myTable": {
"Type": "AWS::DynamoDB::Table",
"Properties": {
"TableName": "mytablename",
"AttributeDefinitions": [
{
"AttributeName": "entryId",
"AttributeType": "S"
},
{
"AttributeName": "entryName",
"AttributeType": "S"
},
{
"AttributeName": "appId",
"AttributeType": "S"
},
{
"AttributeName": "userId",
"AttributeType": "S"
}
],
"KeySchema": [
{
"KeyType": "HASH",
"AttributeName": "entryId"
},
{
"KeyType": "RANGE",
"AttributeName": "entryName"
}
],
"ProvisionedThroughput": {
"ReadCapacityUnits": {
"Ref": "readThroughput"
},
"WriteCapacityUnits": {
"Ref": "writeThroughput"
}
},
"GlobalSecondaryIndexes": [
{
"IndexName": "appId-index",
"KeySchema": [
{
"KeyType": "HASH",
"AttributeName": "appId"
}
],
"Projection": {
"ProjectionType": "KEYS_ONLY"
},
"ProvisionedThroughput": {
"ReadCapacityUnits": {
"Ref": "readThroughput"
},
"WriteCapacityUnits": {
"Ref": "writeThroughput"
}
}
},
{
"IndexName": "userId-index",
"KeySchema": [
{
"KeyType": "HASH",
"AttributeName": "userId"
}
],
"Projection": {
"ProjectionType": "KEYS_ONLY"
},
"ProvisionedThroughput": {
"ReadCapacityUnits": {
"Ref": "readThroughput"
},
"WriteCapacityUnits": {
"Ref": "writeThroughput"
}
}
}
]
}
}
}
但是,就像我之前提到的,即使我没有在 AttributeDefinitions 中定义 userId 并在新的 GSI 定义中使用现有属性,它也不起作用,并且会失败并显示相同的错误消息。
最佳答案
我今天遇到了同样的错误,并从亚马逊技术支持那里得到了答案。问题是您提供了一个 TableName 字段。 CloudFormation 希望负责为您命名表。显然,当您为它们提供自己的名称时,这是在替换表的更新中遇到的错误(不确定为什么需要替换,但这就是文档所说的)
对我来说,这使得 CloudFormation 对于维护我的 DynamoDB 表毫无用处。我必须构建配置,以便我的代码可以动态地告诉 CloudFormation 为我生成的随机表名称。
关于amazon-web-services - 无法使用 CloudFormation 将 GSI 添加到 DynamoDB 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36918408/
我想通过 cloudformation 将新的非关键属性更新到现有的 GSI 中。目前,当我想要添加新的非关键属性时,我需要取消配置 GSI 并使用新的和现有的非关键属性重新配置它。有没有办法添加非关
我想试试 Android GSI ,对此我有几个问题。 从哪里可以获得最新的预构建镜像?我必须自己从源代码构建它吗? 如何判断我拥有的设备是否受 GSI 支持? 最佳答案 您不必从本地源代码构建 GS
我正在基于LSI的dynamo DB上进行查询表达式,并且LSI的投影类型设置为INCLUDE。如何在运行时将 LSI 投影更改为 INCLUDE ALL?。我看到projectionExpressi
我在使用 describe-table 时显示的 DynamoDb 表上有以下全局二级索引: "GlobalSecondaryIndexes": [ { "I
我正在使用 serverless管理 AWS 基础设施的框架,我已经定义了一个带有 GSI 的 dynamodb 表。现在我需要更新 GSi 的投影类型,我知道这是不允许的。因此,我从 dynamod
我通过替换 gapi 重构了我的“使用 Google 登录”。与 gsi在 http://localhost:8080 . 怎么可能gapi在 gsi 期间工作没有问题声称 The given ori
对于我的 DynamoDB 表,我目前有一个这样的架构: 分区键 - 唯一 ID,因此每个项目都有一个完全唯一的 ID 排序键 - 无 属性 - 包含一些值的 JSON 现在,我想为每个项目添加一个新
我已经在 DynamoDB 中创建了一个包含近 20 亿行的表。 由于查询要求,我不得不在其中创建一个全局二级索引(GSI)。 GSI 创建过程在 36 小时前开始,但仍未完成。门户显示项目计数约为
我有一个“团队成员”表,主分区键为“team_id”,主排序键为“email”,GSI 的分区键为“email”。 给定一个电子邮件列表,我想以最有效的方式找到列表中所有电子邮件的所有成员资格。 我知
我无法理解全局二级索引和表之间的区别。 为什么要使用全局二级索引,为什么不创建另一个表? 我必须为两者指定读取和写入吞吐量。当对带有 GSI 的表进行写入时,我必须同时写入表和索引。我的问题是为什么
看着 this DynamoDB documentation about GSI ,我发现以下评论: A global secondary index only keeps track of data
是否可以使用batchgetitem api从dynamodb全局二级索引中检索行?如果我的目标是也基于某些非键属性从主表中检索数据,但应在 100 个项目的批次中检索数据 - GSI 索引是否不适合
自 4.0 起,我一直在研究 Couchbase 中的全局二级索引功能,现在已在 5.0 中改进为具有自动重新平衡功能 在下面提到的视频中,与通常存储在 MapReduce View 中的普通二级索引
我想在 DynamoDB 中搜索 GSI。不过我想用 KeyConditionExpression 进行搜索。在这种情况下,我将无法按 RangeKeyCondition 进行搜索,因为我收到错误:
我添加了来自 https://developers.google.com/identity/gsi/web/guides/personalized-button 的“使用 Google 登录”按钮 默
我写了一个 serverless.yml部署一些 lambda,我在特定 API 中使用 GSI。 如果我使用 serverless-offline 在本地运行,它可以工作,但在部署 lambda 时
我想进行更新,但我想添加的条件检查不是基于主表的哈希/范围,而是基于 GSI。 实际上,如果给定的属性(即 GSI 的哈希值)已经存在,我想使保存失败。 例如,在一个虚构的员工表中,“SSN”是哈希键
我有一个存储文档的 Dynamo 表,如下所示: { "guid": "" "created_at": 1550778260030, "display_name": "person",
我的类(class)如下 @DynamoDBTable(tableName = LogConstant.TableName) public class Journal { @DynamoDBIndex
我在 dynamo db GSI 索引级别仅定义了两个投影。但为了创建预期的响应,我还需要从 dynamo db 获取其他列。 假设我的表中有 20 列,而全局二级索引中只提到了两列。我如何使用 GS
我是一名优秀的程序员,十分优秀!