Py学习  »  DATABASE

使用IAM角色从Lambda连接到RDS MySql超时

Kordrun • 4 年前 • 680 次点击  

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"
            ]
        }
    ]
}

在数据库中创建的用户:

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;
}

我肯定我只是错过了一些东西

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/57163
 
680 次点击  
文章 [ 2 ]  |  最新文章 4 年前
Remigiusz
Reply   •   1 楼
Remigiusz    5 年前

您还应该检查Lambda是否具有正确的网络设置。尤其是如果您使用的是Chalice之类的框架,该框架用于在部署期间清除网络设置。

Michal
Reply   •   2 楼
Michal    5 年前

如果在大多数情况下有超时,则表示您没有访问服务的权限。 请检查您分配给mysql的安全组。