如何使用非默认 VPC 在 Pulumi 中创建 EC2 实例?
How can I create an EC2 instance in Pulumi with a non-default VPC?
我正在尝试在 Pulumi 中创建 AWS 基础设施(VPC、安全组、EC2 实例),但我遇到了障碍。即:
我正在使用 Pulumi 创建一个 VPC,它默认会自动创建子网、网关和路由表,这对我的目的来说很好。在此之后,我创建安全组。到目前为止一切都很好,没有任何问题。
但是,当我尝试创建一个 EC2 实例时,我想在我刚创建的 VPC 上创建它,因为它是动态的,所以在创建它们之前我不知道 VPC 和子网 ID。
创建EC2实例时,您需要告诉它在哪个子网上创建实例。这是我开始遇到麻烦的地方。我创建的 VPC 提供了子网 ID 的 Promise
很明显我忽略了一些重要的事情,但我似乎无法在任何文档或示例中找到此流程的任何示例。这是我用来构建 VPC 并尝试获取子网的 2 个函数。
创建 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]))
我正在尝试在 Pulumi 中创建 AWS 基础设施(VPC、安全组、EC2 实例),但我遇到了障碍。即:
我正在使用 Pulumi 创建一个 VPC,它默认会自动创建子网、网关和路由表,这对我的目的来说很好。在此之后,我创建安全组。到目前为止一切都很好,没有任何问题。 但是,当我尝试创建一个 EC2 实例时,我想在我刚创建的 VPC 上创建它,因为它是动态的,所以在创建它们之前我不知道 VPC 和子网 ID。
创建EC2实例时,您需要告诉它在哪个子网上创建实例。这是我开始遇到麻烦的地方。我创建的 VPC 提供了子网 ID 的 Promise
很明显我忽略了一些重要的事情,但我似乎无法在任何文档或示例中找到此流程的任何示例。这是我用来构建 VPC 并尝试获取子网的 2 个函数。
创建 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]))