将现有的 dynamodb table 与流添加到 CDK
Add existing dynamodb table with stream to CDK
我目前有一个 dynamodb table,它已经使用了几年,最初是在控制台中创建的。它包含许多有价值的数据。它使用流使用 table 的 lambda 触发器定期将快照发送到 s3 进行分析。 table 本身被最终用户大量使用以访问他们的数据。
我想将我的解决方案迁移到 CDK。我想探索的选项:
- 当您使用 Table.fromTableArn 构造时,您无法访问 table 流 arn,因此无法附加 lambda 触发器。有解决办法吗?
- 有没有办法在我的 CDK 堆栈中克隆 dynamoDB table 内容,以便我的副本开始时的状态与原始状态完全相同?然后我可以在 CDK 中添加和管理流等没问题。
- 值得检查一下我的假设,即这些是仅有的 2 个选项。
- 正在为现有 Dynamo 订阅 Lambda Table:
我们不需要在同一个堆栈中创建 table。我们不能在 lambda 上使用 addEventSource,但我们可以使用 addEventSourceMapping
并向 Lambda 添加必要的策略,这就是 addEventSource 在幕后所做的。
const streamsArn =
"arn:aws:dynamodb:us-east-1:110011001100:table/test/stream/2021-03-18T06:25:21.904";
const myLambda = new lambda.Function(this, "my-lambda", {
code: new lambda.InlineCode(`
exports.handler = (event, context, callback) => {
console.log('event',event)
callback(null,'10')
}
`),
handler: "index.handler",
runtime: lambda.Runtime.NODEJS_10_X,
});
const eventSoruce = myLambda.addEventSourceMapping("test", {
eventSourceArn: streamsArn,
batchSize: 5,
startingPosition: StartingPosition.TRIM_HORIZON,
bisectBatchOnError: true,
retryAttempts: 10,
});
const roleUpdates = myLambda.addToRolePolicy(
new iam.PolicyStatement({
actions: [
"dynamodb:DescribeStream",
"dynamodb:GetRecords",
"dynamodb:GetShardIterator",
"dynamodb:ListStreams",
],
resources: [streamsArn],
})
);
- 正在将现有的 DynamoDb 导入 CDK:
我们在cdk、synth中重写具有相同属性的dynamo db来生成Cloudformation并使用resource import to import an existing resources into a stack. Here is an
我目前有一个 dynamodb table,它已经使用了几年,最初是在控制台中创建的。它包含许多有价值的数据。它使用流使用 table 的 lambda 触发器定期将快照发送到 s3 进行分析。 table 本身被最终用户大量使用以访问他们的数据。
我想将我的解决方案迁移到 CDK。我想探索的选项:
- 当您使用 Table.fromTableArn 构造时,您无法访问 table 流 arn,因此无法附加 lambda 触发器。有解决办法吗?
- 有没有办法在我的 CDK 堆栈中克隆 dynamoDB table 内容,以便我的副本开始时的状态与原始状态完全相同?然后我可以在 CDK 中添加和管理流等没问题。
- 值得检查一下我的假设,即这些是仅有的 2 个选项。
- 正在为现有 Dynamo 订阅 Lambda Table:
我们不需要在同一个堆栈中创建 table。我们不能在 lambda 上使用 addEventSource,但我们可以使用 addEventSourceMapping
并向 Lambda 添加必要的策略,这就是 addEventSource 在幕后所做的。
const streamsArn =
"arn:aws:dynamodb:us-east-1:110011001100:table/test/stream/2021-03-18T06:25:21.904";
const myLambda = new lambda.Function(this, "my-lambda", {
code: new lambda.InlineCode(`
exports.handler = (event, context, callback) => {
console.log('event',event)
callback(null,'10')
}
`),
handler: "index.handler",
runtime: lambda.Runtime.NODEJS_10_X,
});
const eventSoruce = myLambda.addEventSourceMapping("test", {
eventSourceArn: streamsArn,
batchSize: 5,
startingPosition: StartingPosition.TRIM_HORIZON,
bisectBatchOnError: true,
retryAttempts: 10,
});
const roleUpdates = myLambda.addToRolePolicy(
new iam.PolicyStatement({
actions: [
"dynamodb:DescribeStream",
"dynamodb:GetRecords",
"dynamodb:GetShardIterator",
"dynamodb:ListStreams",
],
resources: [streamsArn],
})
);
- 正在将现有的 DynamoDb 导入 CDK:
我们在cdk、synth中重写具有相同属性的dynamo db来生成Cloudformation并使用resource import to import an existing resources into a stack. Here is an