簡體   English   中英

如何將默認 VPC 導入 CloudFormation 堆棧並使用 AWS CDK 重新創建它?

[英]How to import default VPC into CloudFormation stack and recreate it with 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的 output 就像上面一樣,但現在使用的是我的默認 VPC 的 VPC ID。

是否可以將默認 VPC 導入 CloudFormation 堆棧並使用 AWS CDK 重新創建它?

盡管您保持堆棧名稱相同,但導入的 cloudformation 中的 vpc 資源的邏輯 id 和 cdk 生成的 cloudformation 是不同的。 VPC 與 VPCXYZ12345。

這就是 cdk diff 顯示刪除和重新創建的原因。

以下是我們理想情況下可以做的:

  • 刪除您現有的 cloudformation
  • 創建 cloudformation cdk --no-version-reporting synth
  • 從 cdk.out 獲取模板
  • 將其導入 cloudformation 控制台,就像您的常規模板一樣。

這個過程應該可以幫助您將現有的 vpc 導入 cdk。 是在 cdk 中導入 DynamoDB 表的類似答案。

您不能將非默認 VPC 標記為默認,也不能自己重建默認 VPC。 來自文檔

無法恢復之前刪除的默認 VPC,也無法將現有的非默認 VPC 標記為默認 VPC。

您必須使用 AWS 控制台、SDK 或 CLI專用調用來創建默認 VPC:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM