如何在非默认VPC创建awsx.lb.ApplicationLoadBalancer?遇400错误求助
问题
尝试在指定VPC中创建负载均衡器,示例代码如下:
export const vpc = new awsx.ec2.Vpc( `ls-vpc-${stackName}`, { numberOfAvailabilityZones: 2, cidrBlock: '10.0.0.0/16', subnetStrategy: 'Auto', subnetSpecs: [ { type: awsx.ec2.SubnetType.Public, name: 'public', cidrMask: 24, }, { type: awsx.ec2.SubnetType.Private, name: 'private', cidrMask: 24, }, ], tags: { Name: `ls-vpc-${stackName}`, environment: stackName, }, }, ) const loadBalancer = new awsx.lb.ApplicationLoadBalancer( `ls-loadbalancer-${stackName}`, { subnetIds: publicSubnetIds, // 注释此行可部署,但会使用默认VPC // securityGroups: [lbSecurityGroup.id], // 取消注释无效果 tags: { Name: `ls-loadbalancer-${stackName}`, environment: stackName, }, }, )
执行时出现以下错误:
security groups: operation error Elastic Load Balancing v2: SetSecurityGroups, https response error StatusCode: 400 InvalidConfigurationRequest: One or more security groups are invalid: provider=aws@6.56.1
解决方法
- 确保安全组与负载均衡器同属一个VPC:
lbSecurityGroup必须关联你创建的自定义VPC(ls-vpc-${stackName}),不能使用默认VPC或其他无关VPC的安全组,否则会触发无效配置错误。 - 显式绑定安全组到自定义VPC:创建安全组时必须指定
vpc参数,确保它属于目标VPC,示例代码如下:const lbSecurityGroup = new awsx.ec2.SecurityGroup('lb-sg', { vpc: vpc, // 关键:绑定到自定义VPC ingress: [ { protocol: 'tcp', fromPort: 80, toPort: 80, cidrBlocks: ['0.0.0.0/0'] }, { protocol: 'tcp', fromPort: 443, toPort: 443, cidrBlocks: ['0.0.0.0/0'] }, ], egress: [ { protocol: '-1', fromPort: 0, toPort: 0, cidrBlocks: ['0.0.0.0/0'] }, ], }); - 验证子网ID的正确性:
publicSubnetIds必须从自定义VPC的公有子网中获取,比如通过vpc.publicSubnets.map(subnet => subnet.id)生成,避免使用其他VPC的子网ID。 - 自动创建安全组排查问题:如果暂时无法排查安全组配置问题,可以移除
securityGroups参数,让AWS自动为负载均衡器生成符合要求的安全组,同时保留正确的subnetIds配置,验证是否能正常部署,以此确认是否为安全组本身的配置问题。
内容的提问来源于stack exchange,提问作者Capaj
相关产品推荐
相关产品推荐

