我们已经使用AWS CDK(在Typescript中)创建了一个AWS Cloudformation Stack。堆栈创建一个新的VPC,一个新的安全组&一个新的实例。(1)
我们已经使用cdk deploy
命令部署了这个堆栈。
现在我们要向堆栈中添加第二个实例。我们无法找到解释如何做到这一点的来源。
我们可以使用(1)中创建的VPC,安全组创建一个新的堆栈,并在这个新的堆栈中创建一个新的实例。
这样我们可以将实例添加到相同的VPC和安全组中,但不是相同的堆栈。
不能在创建堆栈时创建堆栈中的所有实例。
这是唯一的方式,我们可以新的实例到现有的vpc ?
我们不能使用AWS CDK(在Typescript中)向现有堆栈添加新实例吗?
我不记得typescript中文件名是什么了(在python中是app.py)你定义堆栈的地方,你要么定义第二个相同的堆栈(记住堆栈只是一个类,所以你实例化了第二个版本)
似乎无论如何,你都希望能够根据需要旋转尽可能多的。在这种情况下,堆栈道具的ID字符串在Cloudformation中定义堆栈名称。你可以让它成为一个带上下文变量的格式化字符串。然后可以使用cdk deploy -c variable=value
进行部署。例如(抱歉这是在python中,但思路是一样的)
from my_stack import MainStack
context_var = app.try_get_context("stack_id")
a_stack = MainStack(
app, f"Main-{context_var}")
然后使用cdk deploy Main-* -c stack_id=SomeString
进行部署那么每个不同的值都将启动一个新的堆栈。重用旧值将更新旧堆栈。我们使用它来允许开发人员启动一个"本地";附加工作用户名的堆栈版本。因为它从他们的本地部署,它使用他们的分支代码,他们可以在合并到开发分支之前测试大的变化,即Main-Lynkfox
和Main-Penguin
将分别与-c stack_id=Lynkfox
和-c stack_id=Penguin
一起部署
您当然需要将该值附加到堆栈内每个资源的每个名称上,或者让cdk选择资源名称。如果您选择前者,我建议创建一个公共属性对象,您可以将其传递到每个堆栈中以在其中使用。
https://docs.aws.amazon.com/cdk/latest/guide/context.html
将其与typescept联系起来,这里的示例https://docs.aws.amazon.com/cdk/latest/guide/stacks.html与stack1和stack2 -您将它们替换为变量定义的字符串。因为这也是告诉cdk部署要部署哪个堆栈的方式,所以最好像上面的
那样添加前缀。编辑:由于您的堆栈是vpc和安全组,并且您将需要其他堆栈的这些值,这里的另一个选项是使其成为NestedStack
,然后在另一个堆栈中创建和引用它的属性
https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-cloudformation.NestedStack.html