获取现有 VPC 以在 Pulumi 堆栈中使用

Get existing VPC for use within a Pulumi stack

我正在尝试在受限的 AWS 环境中使用 Pulumi。

这个沙箱需要我使用特定的VPC,没有默认的VPC。

我已经尝试了展示如何引用现有 VPC 的示例,但它们都失败了,并出现了“调用 aws:ec2/getVpc:getVpc: 找不到匹配的 VPC”的某些变体

@pulumi/awsx,使用引用的代码:https://github.com/pulumi/pulumi-awsx/issues/522:

const vpc = awsx.ec2.Vpc.fromExistingIds('name', {
  vpcId: 'id',
  publicSubnetIds: ['a', 'b'],
  privateSubnetIds: ['a', 'b']
})

@pulumi/aws,使用从 https://www.pulumi.com/docs/reference/pkg/aws/ec2/getvpc/:

引用的代码
const vpc = aws.ec2.Vpc.get('vpc-1', 'vpc-1')

问题:在 Pulumi 堆栈中引用现有 VPC 的正确且完整的语法是什么?

请注意,我不想“采用”此资源,因为它是共享的,并且用户 运行 pulumi up 命令没有删除 VPC 资源的权限。

您链接到的 getVpc() 和您尝试使用的 Vpc.get() 之间存在细微差别。你应该使用前者:

const vpc = aws.ec2.getVpc({ id: yourVpcId });

这是最终起作用的方法:

const vpc = aws.ec2.Vpc.get('vpc-123', 'vpc-123')

我认为在进行上述更改后 pulumi up 之前我没有正确保存我的文件。

请注意,我还必须手动将子网添加到我的 ALB 才能使其正常工作,如下所示:

const vpc = aws.ec2.Vpc.get('vpc-123', 'vpc-123')

const clusterName = nameResource('graphQlServiceCluster')
const ecsCluster = new awsx.ecs.Cluster(clusterName, {
  name: clusterName,
  vpc
})

const PublicSubnet1a = 'subnet-123'
const PublicSubnet1b = 'subnet-123'

const alb = new awsx.lb.ApplicationLoadBalancer(nameResource('graphQlServiceElb'), {
  name: nameResource('graphQlServiceElb'),
  external: true,
  vpc,
  subnets: [
    PublicSubnet1a,
    PublicSubnet1b

  ]
})
const listener = alb.createListener(nameResource('graphqlServiceListener'), {
  name: nameResource('graphqlServiceListener'),
  port: 80,
  external: true,
  vpc
})

Pulumi 有多种 Vpc 类型。 您可能想使用 awsx VPC,因为它的级别更高(并且需要使用其他 awsx 基础设施)。

有两种方法可以做到这一点:

正在创建一个新的 VPC

const vpc = new awsx.ec2.Vpc(config.vpcName, {
  cidrBlock: "10.0.0.0/16",
  subnets: [
    {
      name: "public",
      type: "public",
      location: {
        cidrBlock: "10.0.0.0/24",
        availabilityZone: "us-east-2a",
      },
    },
    {
      name: "private-a",
      type: "private",
      location: {
        cidrBlock: "10.0.1.0/24",
        availabilityZone: "us-east-2a",
      },
    },
    {
      name: "private-b",
      type: "private",
      location: {
        cidrBlock: "10.0.2.0/24",
        availabilityZone: "us-east-2b",
      },
    },
  ],
});

使用现有的 VPC

借用这个 GitHub thread with the Pulumi CTO 产生了正确的结果:

  const vpc = awsx.ec2.Vpc.fromExistingIds("mycompany", {
    vpcId: "vpc-myvpcid",
  });

  // Create an ECS Fargate cluster.
  const ecsCluster = new awsx.ecs.Cluster("mycompany-pulumi-cluster", {
    vpc,
  });