微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将默认 VPC 导入 CloudFormation 堆栈并使用 AWS CDK 重新创建它?

如何解决如何将默认 VPC 导入 CloudFormation 堆栈并使用 AWS CDK 重新创建它?

我想使用我的所有网络资源创建一个 AWS CloudFormation 堆栈。所以我还想包括我的认 VPC。我使用 AWS CDK 创建了我的堆栈,并希望使用 CDK 配置我的所有资源。

为了导入我的认 VPC,我使用了管理控制台和堆栈操作“将资源导入堆栈”。我使用此模板导入我的认 VPC:

Resources:
  VPC:
    Type: AWS::EC2::VPC
    DeletionPolicy: Retain
    Properties:
      CidrBlock: 172.31.0.0/16
      EnablednsSupport: 'true'
      EnablednsHostnames: 'true'
      InstanceTenancy: default

导入向导需要 VPC ID,我使用了我的认 VPC ID。成功导入后,我得到了一个与上述内容相同的堆栈的 CloudFormation 模板。

现在我想使用 AWS CDK 重新创建我的认 VCP。我不想使用 Vpc.fromLookupfromVpcAttributes。我想使用 AWS CDK 创建一个新的 VPC,这是我的认 VPC。所以我写道:

const vpc = new ec2.Vpc(this,'VPC',{
  cidr: "172.31.0.0/16",enablednsSupport: true,enablednsHostnames: true,defaultInstanceTenancy: DefaultInstanceTenancy.DEFAULT
});

但是当我调用 cdk diff 时它显示

[-] AWS::EC2::VPC VPC orphan
[+] AWS::EC2::VPC VPC VPCXYZ12345

所以它想创建一个新的 VPC,而我导入的认 VPC 是孤立的。

我还尝试覆盖逻辑 ID。所以它与我的认 VPC 的 ID 匹配:

const cfnVpc = vpc.node.defaultChild as cdk.CfnResource;
cfnVpc.overrideLogicalId('vpc-abcd1234');

cdk diff输出与上面类似,但现在使用的是我认 VPC 的 VPC ID。

是否可以将认 VPC 导入 CloudFormation 堆栈并使用 AWS CDK 重新创建?

解决方法

您无法将非默认 VPC 标记为默认,也无法自行重建默认 VPC。来自docs

无法恢复之前删除的默认 VPC,并且您无法将现有的非默认 VPC 标记为默认 VPC。

您必须使用 AWS 控制台、开发工具包或 CLI 专用调用来创建默认 VPC:

,

虽然保持栈名不变,但是导入的cloudformation中vpc资源的逻辑id和cdk生成的cloudformation是不同的。 VPC vs VPCXYZ12345。

这就是 cdk diff 显示删除和重新创建的原因。

理想情况下,我们可以这样做:

  • 删除您现有的 cloudformation
  • 创建 cloudformation cdk --no-version-reporting synth
  • 从 cdk.out 获取模板
  • 将其导入到 cloudformation 控制台,就像您的常规模板一样。

这个过程应该可以帮助您将现有的 vpc 导入 cdk。 Here 是在 cdk 中导入 DynamoDB 表的类似答案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。