[英]How can I delete and recreate a CDK Stack (Cloudformation) using a lambda?
[英]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.fromLookup
或fromVpcAttributes
。 我想用 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 顯示刪除和重新創建的原因。
以下是我們理想情況下可以做的:
cdk --no-version-reporting synth
這個過程應該可以幫助您將現有的 vpc 導入 cdk。 這是在 cdk 中導入 DynamoDB 表的類似答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.