【问题标题】:Lambda cannot connect to RDS in VPCLambda 无法连接到 VPC 中的 RDS
【发布时间】:2018-10-20 05:11:57
【问题描述】:

我在私有子网中有一个带有 RDS 的 VPC。我可以从子网中的 EC2 盒子连接到它。但是,我的 Lambda 无法连接!

请你看看下面的配置并找出我的错误吗?

Lambda 配置:

$ aws lambda get-function-configuration --function-name test
{
    "FunctionName": "test",
    "Role": "arn:aws:iam::xxxx:role/lambda_role",
    ...
    "VpcConfig": {
        "SubnetIds": [
            "subnet-00f3f0cb6957dbefa",
            "subnet-0d3d2cf4df53a862f"
        ],
        "SecurityGroupIds": [
            "sg-018da51b77f57eabf"
        ],
        "VpcId": "vpc-0704ca4d3f652fe9e"
    },
    ...
    "RevisionId": "e55b6fa2-998a-4b18-a620-69a218882b4e"
}

执行角色:

$ aws list-attached-role-policies --role-name lambda_role
{
    "AttachedPolicies": [
        {
            "PolicyName": "AWSLambdaVPCAccessExecutionRole",
            "PolicyArn": "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
        }
    ]
}

VPC:

$ aws ec2 describe-vpcs --vpc-ids vpc-0704ca4d3f652fe9e
{
    "Vpcs": [
        {
            "CidrBlock": "10.1.0.0/16",
            "DhcpOptionsId": "dopt-7764271f",
            "State": "available",
            "VpcId": "vpc-0704ca4d3f652fe9e",
            "InstanceTenancy": "default",
            "CidrBlockAssociationSet": [
                {
                    "AssociationId": "vpc-cidr-assoc-0c110a5fa85eb8883",
                    "CidrBlock": "10.1.0.0/16",
                    "CidrBlockState": {
                        "State": "associated"
                    }
                }
            ],
            "IsDefault": false,
            "Tags": []
        }
    ]
}

安全组:

$ aws ec2 describe-security-groups --group-ids sg-018da51b77f57eabf
{
    "SecurityGroups": [
        {
            "Description": "Security group for Lambdas",
            "GroupName": "lambda-sg",
            "IpPermissions": [],
            "OwnerId": "xxxxx",
            "GroupId": "sg-018da51b77f57eabf",
            "IpPermissionsEgress": [
                {
                    "FromPort": 0,
                    "IpProtocol": "tcp",
                    "IpRanges": [
                        {
                            "CidrIp": "0.0.0.0/0"
                        }
                    ],
                    "Ipv6Ranges": [],
                    "PrefixListIds": [],
                    "ToPort": 65535,
                    "UserIdGroupPairs": []
                }
            ],
            "VpcId": "vpc-0704ca4d3f652fe9e"
        }
    ]
}

RDS 安全组(指定公共子网和私有子网):

$ aws ec2 describe-security-groups --group-ids sg-0fbf7205b5d5fa98c
{
    "SecurityGroups": [
        {
            "Description": "Security group for RDS instance",
            "GroupName": "rds-sg",
            "IpPermissions": [
                {
                    "FromPort": 3306,
                    "IpProtocol": "tcp",
                    "IpRanges": [
                        {
                            "CidrIp": "10.1.2.0/24"
                        },
                        {
                            "CidrIp": "10.1.1.0/24"
                        },
                        {
                            "CidrIp": "10.1.4.0/24"
                        },
                        {
                            "CidrIp": "10.1.3.0/24"
                        }
                    ],
                    "Ipv6Ranges": [],
                    "PrefixListIds": [],
                    "ToPort": 3306,
                    "UserIdGroupPairs": []
                }
            ],
            "OwnerId": "xxxxxx",
            "GroupId": "sg-0fbf7205b5d5fa98c",
            "IpPermissionsEgress": [],
            "VpcId": "vpc-0704ca4d3f652fe9e"
        }
    ]
}

链接: AWS Lambda Function not joining VPC

【问题讨论】:

  • 您的 rds 实例上定义了哪些安全组?理想情况下,您希望允许从附加到 Lambda 的安全组访问 RDS 实例上的安全组。
  • 我将此添加到答案中,我将测试您的建议。您是否知道我是否可以为 Lambda 动态修改安全组?我是否需要等待 lambda 死亡并重新创建?
  • 如果您想将其发布为答案,我会接受。
  • 不确定 'on the fly' 是什么意思,但如果您的意思是在 cloudformation 之外 - 是的,这是可能的,但不建议这样做。

标签: aws-lambda amazon-vpc


【解决方案1】:

尝试在任何安全组和任何网络 ACL 上启用 ICMP。这可能只是一个 PMTUD 黑洞情况。

【讨论】:

    猜你喜欢
    • 2017-10-12
    • 2021-07-25
    • 2018-05-11
    • 2018-07-10
    • 2021-05-04
    • 2021-06-10
    • 1970-01-01
    • 2021-01-07
    • 2020-03-02
    相关资源
    最近更新 更多