使用IAM Roles从Lambda连接到RDS MySql正在超时

问题描述 投票:0回答:2

我目前有一个lambda函数设置为根据其IAM策略生成令牌。我正在成功生成令牌,但是当我尝试使用它连接到RDS MySql(5.7.xx)时,它只是超时了。

IAM策略(与绑定到lambda函数的角色相关联)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "rds-db:connect"
            ],
            "Resource": [
                "arn:aws:rds-db:us-east-1:<account-id>:dbuser:<db-resource-id>/lambda"
            ]
        }
    ]
}

在DB中创建的用户:

create user 'lambda' identified with AWSAuthenticationPlugin as 'RDS';
grant all privileges on cbr.* to 'lambda'@'%';
flush privileges;

以下是我到目前为止尝试做的代码片段:

private String generateAuthToken() {
    RdsIamAuthTokenGenerator generator = RdsIamAuthTokenGenerator.builder()
        .credentials(new DefaultAWSCredentialsProviderChain())
    .region(region)
    .build();

    String authToken = generator.getAuthToken(
    GetIamAuthTokenRequest.builder()
        .hostname(hostName)
        .port(Integer.parseInt(port))
        .userName(username)
        .build());

    return authToken;
}
public String test() throws SQLException {
    String currentTime = "Not Set";
    String jdbcUrl = "jdbc:mysql://" + hostName + ":" + port;
    String token = generateAuthToken();
    Connection conn = DriverManager.getConnection(jdbcUrl, username, generateAuthToken());

    Statement statement = conn.createStatement();
    ResultSet rs = statement.executeQuery("SELECT NOW()");

    if (rs.next()) {
        currentTime = rs.getString(1);
    }

    return currentTime;
}

我确定我只是遗漏了一些东西

java amazon-web-services aws-lambda amazon-rds amazon-iam
2个回答
0
投票

如果您在大多数情况下超时,则表示您无法访问您的服务。请检查您分配给mysql的安全组。出于测试目的,允许所有流量入站。


0
投票

您还应该检查Lambda是否具有正确的网络设置。特别是如果您使用像Chalice这样的框架,它在部署期间用于清除网络设置。

© www.soinside.com 2019 - 2024. All rights reserved.