微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AWS 子网没有 IP 地址使用 CDK

如何解决AWS 子网没有 IP 地址使用 CDK

一段时间以来,我一直在尝试使用 20 个 lambda 函数部署 RestApiGateway,但每次尝试部署时,我总是收到错误消息 subnet is out of IP 地址。知道为什么会发生这种情况吗?

这是我的 Vpc 堆栈的样子:

        this.vpc = new ec2.Vpc(this,'vpc',{
        cidr: '10.0.0.0/21',maxAzs: this.azs,natGateways: this.azs,subnetConfiguration: [
            {
                subnetType: ec2.subnetType.PUBLIC,name: `${APP_PREFIX}-public-subnet`,cidrMask: 24,},{
                subnetType: ec2.subnetType.PRIVATE,name: `${APP_PREFIX}-private-subnet`,cidrMask: 28,],});

...这里是网关:

const interfaceVpcEndpoint = vpc.addInterfaceEndpoint(`${APP_PREFIX}-endpoint`,{
    service: ec2.InterfaceVpcEndpointAwsService.APIGATEWAY,subnets: { subnetType: ec2.subnetType.PRIVATE },});

const restApiLogGroup = new logs.LogGroup(stack,`${APP_PREFIX}-log-group`,{
    logGroupName: `${APP_PREFIX}-log-group`,});

return new gateway.RestApi(stack,`${APP_PREFIX}-rest-api`,{
    restApiName: `${APP_PREFIX}-rest-api`,endpointConfiguration: {
        types: [gateway.EndpointType.PRIVATE],vpcEndpoints: [interfaceVpcEndpoint],retainDeployments: true,deployOptions: {
        stageName: 'v2',loggingLevel: gateway.MethodLoggingLevel.INFO,dataTraceEnabled: true,accessLogDestination: new gateway.LogGroupLogDestination(restApiLogGroup),accessLogFormat: gateway.AccessLogFormat.jsonWithStandardFields(),policy: new iam.PolicyDocument({
        statements: [
            new iam.PolicyStatement({
                effect: iam.Effect.DENY,principals: [new iam.AnyPrincipal()],actions: ['execute-api:Invoke'],resources: ['execute-api:/*/POST/*'],conditions: {
                    StringNotEquals: {
                        'aws:sourceVpc': vpc.vpcId,}),new iam.PolicyStatement({
                effect: iam.Effect.ALLOW,});

这个想法是不应该从 Internet 访问 lambda 函数,只能从我将通过另一个堆栈部署的 Fargate 服务访问。

解决方法

我认为这是问题所在:

cidrMask: 28

一个 /28 网络允许 16 个 IP 地址,而 AWS 会占用其中的 3 个地址。

我不熟悉用于创建子网的 CDK 类,因此不能说您使用的整体方法是否正确。我假设它足够聪明,可以根据您为掩码提供的内容将 VPC CIDR 分成子网块。

我建议至少为每个子网分配一个/24;我更喜欢/20。和一个 /16 到 VPC。开始时网络配置是免费的,以后更正成本非常高。

,

我最终将 VPC 构造创建的默认安全组显式添加到每个 Lambda 并且有效。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。