如何使用非默认VPC在Pulumi中创建EC2实例



我正试图在Pulumi创建AWS基础设施(VPC、安全组、EC2实例(,但遇到了障碍。即:

我正在使用Pulumi创建一个VPC,默认情况下它会自动创建子网、网关和路由表,这对我来说很好。之后,我创建安全组。到目前为止一切都很好,没有任何问题。但是,当我尝试创建EC2实例时,我想在刚刚创建的VPC上创建它,因为它是动态的,所以在创建VPC和子网ID之前,我不会知道它们。

当创建EC2实例时,你需要告诉它在哪个子网上创建实例。这就是我开始遇到问题的地方。我创建的VPC提供了一个Promise<输出[]>的子网ID,但是我甚至无法访问子网ID来获得一个子网ID-什么都不返回。

很明显,我忽略了一些重要的东西,但我似乎在任何文档或示例中都找不到这种流程的任何示例。以下是我用来构建VPC并尝试获取子网的两个函数。

创建VPC:

createVPC() {
const CIDRBLOCK = "10.0.0.0/16"
const NUM_AVAILABILITY_ZONES = 2

const vpc = new awsx.ec2.Vpc(this.basename + "_vpc", {
cidrBlock: CIDRBLOCK,
numberOfAvailabilityZones: NUM_AVAILABILITY_ZONES,
subnets: [{type : "public"}, {type : "private"}],
});
return vpc;
}

子网查找:

private async waitForPromise(prom : Promise<Output<string>[]>) {
await prom;
console.log((await prom).toString());
return prom;
}
private getSubnet(vpc : awsx.ec2.Vpc) {
if (this.subnetID === "") {
let subnetids = this.waitForPromise(vpc.privateSubnetIds)
subnetids.then((ids) => { ids[0].apply((id) => this.subnetID = id) });
}
return this.subnetID;
}

有什么想法吗?就上下文而言,我对Typescript也相对陌生,所以我可能只是不理解一些概念。这里也欢迎反馈。

使用pulumi.output方法对我有效:

const fleetvpc = new awsx.ec2.Vpc(vpcName, {
cidrBlock : vpcCidr,
subnets: [ 
{type: "public"},
],
numberOfNatGateways: 0, 
tags: { "Name": vpcName}
});
const az1_pub_subnet = pulumi.output(fleetvpc.publicSubnetIds.then(ids => ids[0])) 
const az2_pub_subnet = pulumi.output(fleetvpc.publicSubnetIds.then(ids => ids[1])) 

最新更新