You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pulumi TypeScript在默认VPC/子网创建EC2实例遇阻求助

解决Pulumi TypeScript在默认VPC/子网创建EC2实例的问题

你遇到的核心问题有两个:一是错误地尝试“创建”默认VPC(AWS账户本身自带默认VPC,无需手动创建),二是未正确处理异步方法的返回值。以下是修正后的完整解决方案:

完整可运行代码示例

import * as aws from "@pulumi/aws";

// 获取账户中已存在的默认VPC
const defaultVpc = await aws.ec2.getDefaultVpc({});

// 获取默认VPC下的所有子网ID
const subnetIdsResult = await aws.ec2.getSubnetIds({
    vpcId: defaultVpc.id,
});
const subnetIds = subnetIdsResult.ids;

// 创建允许基础访问的安全组(按需调整规则)
const instanceSecurityGroup = new aws.ec2.SecurityGroup("ec2-sg", {
    vpcId: defaultVpc.id,
    ingress: [
        { protocol: "tcp", fromPort: 22, toPort: 22, cidrBlocks: ["0.0.0.0/0"] },
        { protocol: "tcp", fromPort: 80, toPort: 80, cidrBlocks: ["0.0.0.0/0"] },
    ],
    egress: [
        { protocol: "-1", fromPort: 0, toPort: 0, cidrBlocks: ["0.0.0.0/0"] },
    ],
    tags: { Name: "EC2 Instance SG" },
});

// 创建EC2实例
const ec2Instance = new aws.ec2.Instance("default-vpc-instance", {
    // 动态获取最新Amazon Linux 2 AMI
    ami: aws.ec2.getAmi({
        filters: [{ name: "name", values: ["amzn2-ami-hvm-*-x86_64-gp2"] }],
        owners: ["amazon"],
        mostRecent: true,
    }).then(ami => ami.id),
    instanceType: "t2.micro",
    // 使用默认VPC下的第一个子网
    subnetId: subnetIds[0],
    vpcSecurityGroupIds: [instanceSecurityGroup.id],
    tags: { Name: "Default VPC EC2 Instance" },
});

// 输出实例公网IP方便访问
export const instancePublicIp = ec2Instance.publicIp;

关键修正点说明

  • 正确获取默认VPC:用await aws.ec2.getDefaultVpc()直接读取账户中已存在的默认VPC,避免了new aws.ec2.DefaultVpc带来的资源冲突问题。
  • 异步方法处理:aws.ec2.getSubnetIds是异步方法,必须用await等待返回结果,否则无法拿到有效的子网ID列表。
  • 动态AMI选择:通过getAmi动态获取最新系统镜像,避免硬编码AMI ID导致的跨区域或版本失效问题。

内容的提问来源于stack exchange,提问作者Kawaljeet Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:12:45