Получите существующий VPC для использования в стеке Pulumi

Я пытаюсь использовать Pulumi в несколько ограниченной среде AWS.

Эта песочница требует, чтобы я использовал конкретный 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')

Вопрос: каков правильный и полный синтаксис для ссылки на существующий VPC в стеке Pulumi?

Обратите внимание, что я бы предпочел не использовать этот ресурс, поскольку он является общим, а пользователь, выполняющий команду pulumi up, не имеет разрешения на удаление ресурсов VPC.


person Michael Robinson    schedule 29.06.2020    source источник


Ответы (3)


Есть небольшая разница между getVpc(), на который вы ссылались, и Vpc.get(), который вы пытались использовать. Вы должны использовать первое:

const vpc = aws.ec2.getVpc({ id: yourVpcId });
person Mikhail Shilkov    schedule 29.06.2020

Вот что в итоге сработало:

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
})
person Michael Robinson    schedule 01.07.2020
comment
Уловка (для меня) заключалась в передаче аргумента subnets в awsx.lb.ApplicationLoadBalancer. - person Gunar Gessner; 07.05.2021

Пулуми имеет несколько 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 с техническим директором Pulumi дало правильный результат:

  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,
  });
person mikemaccana    schedule 11.06.2021