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



我正在尝试在受限制的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类型。您可能希望使用awsxVPC,因为它是更高级别的(并且需要使用其他 awsx 基础设施(。

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

创建新的专有网络

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

最新更新