繁体   English   中英

如何使用非默认 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 提供了一个 Promise<Output[]> 子网 ID,但是我无法访问子网 ID 甚至无法获得一个 - 没有返回任何内容。

很明显,我忽略了一些重要的事情,但我似乎无法在任何文档或示例中找到此流程的任何示例。 这是我用来构建 VPC 并尝试获取子网的 2 个函数。

创建专有网络:

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])) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM