【问题标题】:How to create a new instance in exsisting stack AWS Cloudformation如何在现有堆栈 AWS Cloudformation 中创建新实例
【发布时间】:2021-12-07 23:11:28
【问题描述】:

我们使用 AWS CDK(在 Typescript 中)创建了一个 AWS Cloudformation 堆栈。 堆栈创建一个新的 VPC、一个新的安全组和一个新实例。 (1)

我们已经使用cdk deploy 命令部署了这个堆栈。

现在我们要向该堆栈添加第二个实例。我们无法找到解释如何做到这一点的来源。

我们可以使用在 (1) 中创建的 VPC、安全组创建一个新堆栈。并在这个新堆栈中创建一个新实例。

这样我们可以将实例添加到同一个 VPC 和安全组,但不是同一个堆栈。

我们不能在创建堆栈的时候创建堆栈中的所有实例。

这是我们将新实例添加到现有 VPC 的唯一方法吗?

我们不能使用 AWS CDK(在 Typescript 中)将新实例添加到现有堆栈吗?

【问题讨论】:

  • 你写的CDK代码你看懂了吗?重新编写该代码以创建两个实例,而不是只创建一个实例。
  • 是的,但我的要求在这里不同。需要在需要时创建一个新实例。无法在创建堆栈时创建所有实例。
  • 不知道你的意思/想要什么。 cloudformation 应该如何知道何时需要新实例?添加一个 InstacenCount 参数,使用它并随时更新堆栈。
  • 我们有一个堆栈。它有一个 VPC、一个安全组和一个实例。我们不会删除现有实例。我们想向堆栈添加一个新实例。
  • “向堆栈添加一个新实例”并不是任何事情的运作方式。您可以更改堆栈以再配置一个实例。您可以通过显式编写代码以在堆栈中创建第二个实例或通过例如创建一个参数来控制你想要多少个实例。

标签: typescript amazon-web-services amazon-cloudformation aws-cdk


【解决方案1】:

我不记得 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 进行部署

然后每个不同的值都会启动一个新堆栈。重用旧值将更新旧堆栈。我们使用它来允许开发人员使用附加的工作用户名启动堆栈的“本地”版本。由于它是从本地部署的,因此它使用他们分支中的代码,并且他们可以在合并到 dev 分支之前测试重大更改,即 Main-LynkfoxMain-Penguin 将分别与 -c stack_id=Lynkfox-c stack_id=Penguin 一起部署

您当然需要将该值附加到堆栈内每个资源的每个名称上,或者让 cdk 选择资源名称。如果您使用前者,我建议您创建一个通用属性对象,您可以将其传递到每个堆栈中以在其中使用。

https://docs.aws.amazon.com/cdk/latest/guide/context.html

为了将它与 typeceipt 联系起来,这里的示例 https://docs.aws.amazon.com/cdk/latest/guide/stacks.html 带有 stack1 和 stack2 - 你用变量定义的字符串替换它们。因为这也是您告诉 cdk deploy 要部署哪个堆栈的方式,所以最好像我在上面所做的那样添加前缀

编辑:由于您的堆栈是 vpc 和安全组,并且您将需要这些值用于其他堆栈,这里的另一个选项是将其设为 NestedStack,然后您在另一个堆栈中创建并引用它的属性

https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-cloudformation.NestedStack.html

【讨论】:

    猜你喜欢
    • 2018-12-17
    • 2018-10-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多