【发布时间】:2019-09-05 19:12:04
【问题描述】:
我正在努力思考如何使用 AWS CDK 创建可在多个堆栈中使用的可重用 VPC。我希望能够为每个项目创建不同的堆栈,然后能够导入应该分配给不同堆栈的 VPC。我还想使用一个可以在不同时间部署不同堆栈的良好结构来创建它(意思是:我不想一次部署所有堆栈)。
我尝试了以下方法,但这将为每个堆栈创建一个新的 VPC,这不是我想要实现的,而是我想创建我的 VPC 一次,然后如果它已经存在,它将简单地重用以前创建的。
app.ts
import cdk = require('@aws-cdk/core');
import { Stack1 } from '../lib/stack1';
import { Stack2 } from '../lib/stack2';
const app = new cdk.App();
new Stack1(app, "Stack1");
new Stack2(app, "Stack2");
stack1.ts
import cdk = require('@aws-cdk/core');
import { Configurator } from './configurators/configurator'
export class Stack1 extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const configurator = new Configurator(scope, "Stack1");
// later reuse vpc from configurator using configurator.vpc
}
}
stack2.ts
import cdk = require('@aws-cdk/core');
import { Configurator } from './configurators/configurator'
export class Stack2 extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const configurator = new Configurator(scope, "Stack2");
// later reuse vpc from configurator using configurator.vpc
}
}
configurator.ts
import cdk = require('@aws-cdk/core');
import ec2 = require("@aws-cdk/aws-ec2");
export class Configurator {
vpc: ec2.Vpc;
constructor(scope: cdk.Construct, name: string) {
this.vpc = new ec2.Vpc(scope, "MyVPC", {
maxAzs: 3
});
}
}
做完之后
cdk synth
cdk deploy Stack1
cdk deploy Stack2
这将创建 2 个 VPC,而不是像我希望的那样重用 1 个 VPC。我会将堆栈部署到相同的帐户和区域。
如何改变我的方法以实现我正在寻找的输出?我希望能够独立部署我的堆栈。
【问题讨论】:
-
不确定这是否是您要查找的内容:我不熟悉 AWS CDK,但我使用 CloudFormation。在那里,您可以创建一个堆栈来创建 VPC 并执行导出值。在所有不同的堆栈中,您可以执行“importValue”来导入 VPC 并在多个堆栈中重用 VPC。只要其他堆栈正在使用它,您就无法创建创建 VPC 的堆栈。 docs.aws.amazon.com/cdk/api/latest/docs/…
标签: aws-cdk