amazon-web-services - AWS CDK 使用现有的 DynamoDB 和 Streams
问题描述
我正在将我的云解决方案迁移到 cdk。我可以通过 TableProps 在构造函数中看到如何将流添加到新的 DynamoDB:
const newTable = new dynamodb.Table(this, 'new Table', {
tableName: 'streaming',
partitionKey: { name : 'id', type: dynamodb.AttributeType.NUMBER },
stream: StreamViewType.NEW_AND_OLD_IMAGES,
})
但是没有明显的方法可以在现有 DynamoDB 上启用流。我似乎无法访问现有项目的 TableProps。
const sandpitTable = dynamodb.Table.fromTableArn(this, 'sandpitTable', 'arn:aws:dynamodb:ap-southeast-2:xxxxxxxxxxxxxx:table/Sandpit');
sandpitTable.grantStreamRead(streamLambda);
// sandpitTable. ??? what to do?
如何做到这一点?以及解决方案如何考虑灾难恢复并防止意外删除使用控制台时无法实现的 Dynamo DB。
解决方案
启用流只是 CloudFormation 中资源“AWS::DynamoDB::Table”的另一个属性,我不相信我们可以更改从另一个 cloudformation/cdk 堆栈在堆栈中(或手动)创建的资源,除非我们导入资源。 这是文档。我可以试着总结一下。
假设我们有一个没有元数据资源的现有 cdk 项目
cdk --no-version-reporting deploy
假设我们有您所说的带有分区键“id”的 Dynamo 表“流式传输”。
在下面添加与原始表相同属性的 cdk 代码,如 RCU、WCU、键等。为简单起见,我只给出了名称和键,removingPolicy 是必须的
const myTable = new dynamodb.Table(this, "dynamo-table", { tableName: "streaming", partitionKey: { name: "id", type: dynamodb.AttributeType.NUMBER }, removalPolicy: cdk.RemovalPolicy.RETAIN, });
我们现在可以默认合成并生成 CloudFormation 到 cdk.out 文件夹中
cdk --no-version-reporting synth
在我的情况下,从 .json 文件中获取逻辑 ID,它是 dynamotableF6720B98
使用正确的表名和逻辑 ID 创建 ChangeSet 集
aws cloudformation create-change-set --stack-name HelloCdkStack --change-set-name ImportChangeSet --change-set-type IMPORT --resources-to-import "[{\"ResourceType\":\"AWS::DynamoDB::Table\",\"LogicalResourceId\":\"dynamotableF6720B98\",\"ResourceIdentifier\":{\"TableName\":\"streaming\"}}]" --template-body file://cdk.out/HelloCdkStack.template.json
执行变更集
aws cloudformation execute-change-set --change-set-name ImportChangeSet --stack-name HelloCdkStack
最好检查漂移并进行必要的更改
aws cloudformation detect-stack-drift --stack-name HelloCdkStack
对于防止意外删除的其他问题,我们可以简单地添加删除策略以避免在删除堆栈/资源时删除发电机表。
removalPolicy: RemovalPolicy.RETAIN
推荐阅读
- sql - 删除不同列和其他列的最新日期
- java - JTable 只显示表格的右边框
- docker - docker中的模拟时间(-compose)
- r - 在 R Shiny App 中延迟后更改输出
- machine-learning - 在现实世界中没有恒定平衡时如何平衡您的数据集
- php - 无论如何,SQlite3 是否知道已添加的条目数量?
- java - Java FX 与 Firebase 存储的连接,用于上传图片
- parsing - 使用 Wordpress 提要获取解析错误
- julia - “错误:语法:不能并列字符串文字”用引号结束三引号字符串文字时
- c# - 如何为 GPIO 启用 LightningProviders?