我正在使用 typescript 中的 cdk 设置 CI/CD 管道。我有一个非常模块化的堆栈结构,所以我有一个包含 3 个堆栈的 Stage:LambdasStack、EndpointsStack 和 TablesStack。顾名思义,我的所有 Lambda 表达式都在 LambdasStack 中,等等。
对于管道,我需要以下流程:
- build
- 为 PreProd 部署堆栈
- 集成测试
- 销毁 PreProd 堆栈
- 生产前人工审批
- 为产品部署堆栈
由于 TablesStack 中表的唯一名称,必须在部署 Prod 堆栈之前销毁 PreProd 堆栈。这就是我正在努力解决的问题。我销毁它们的代码是:
const deletePreProdStacks= new ShellStep('Delete deployed Stacks', {
commands: [
'npm install',
'cdk destroy -f --all'
]
});
使用 'cdk destroy -f --all'
找不到舞台的堆栈,因此无法删除它们。
我该如何解决这个问题?给表自动生成的名称不是正确的解决方案吗?或者是否有将 PreProdStacks 覆盖为 ProdStacks 的选项?
我只能访问一个 AWS 账户。因为我读到在不同的帐户上有 Testing/PreProd 阶段和 Prod 阶段。
也许有人对我有类似的最佳实践引用?
提前致谢:)
Edit1:标签更新 Edit2:添加了在同一帐户中部署 PreProd 和 Prod 的情况
最佳答案
我找到了一个不错的解决方案,通过在它们的属性中添加阶段名称来为不能重复的资源提供不同的名称,如下所示:
在堆栈中:
const bookingsTable = new dynamodb.Table(this, 'BookingsTable', {
tableName: `${stageTag}-BookingsTable`,
partitionKey: {
name: 'bookingId',
type: dynamodb.AttributeType.STRING
},
billingMode: dynamodb.BillingMode.PAY_PER_REQUEST
});
在舞台上:
const tables = new TablesStack(this, `TablesStack`, {
stageTag: this.stageName,
env: {
account: account,
region: region
}
});
我在那里创建了 2 个表,一个名为 PreProd-BookingsTable
,另一个名为 Prod-BookingsTable
。
所以我不需要销毁已经部署的堆栈
关于typescript - cdk CI/CD 管道 - 销毁重复堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71478662/