我正在尝试在受限制的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 基础设施(。
有两种方法可以做到这一点:
创建新的专有网络
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,
});