【问题标题】:Get existing VPC for use within a Pulumi stack获取现有 VPC 以在 Pulumi 堆栈中使用
【发布时间】:2020-10-19 05:06:06
【问题描述】:

我正在尝试在受限制的 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 资源的权限。

【问题讨论】:

    标签: amazon-web-services infrastructure-as-code pulumi


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这最终奏效了:

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

      【讨论】:

      • “技巧”(对我而言)是将subnets 参数传递给awsx.lb.ApplicationLoadBalancer
      【解决方案3】:

      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,
        });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-15
        • 2020-02-26
        • 2020-09-09
        • 1970-01-01
        • 2011-05-03
        • 2018-01-26
        • 2023-04-08
        • 1970-01-01
        相关资源
        最近更新 更多