1
1
package awsrdsiam
2
2
3
3
import (
4
+ "context"
4
5
"database/sql"
5
6
"database/sql/driver"
6
7
"fmt"
7
8
"net/url"
8
9
9
- "github.com/aws/aws-sdk-go/aws/session"
10
- "github.com/aws/aws-sdk-go/service/rds/rdsutils"
10
+ "github.com/aws/aws-sdk-go-v2/aws"
11
+ "github.com/aws/aws-sdk-go-v2/config"
12
+ "github.com/aws/aws-sdk-go-v2/feature/rds/auth"
11
13
"golang.org/x/xerrors"
12
14
)
13
15
14
16
type awsRdsIamDriver struct {
15
17
parent driver.Driver
16
- sess * session. Session
18
+ cfg aws. Config
17
19
}
18
20
19
21
var _ driver.Driver = & awsRdsIamDriver {}
20
22
21
23
// Register initializes and registers our aws rds iam wrapped database driver.
22
- func Register (parentName string ) (string , error ) {
23
- sess , err := session . NewSession ( )
24
+ func Register (ctx context. Context , parentName string ) (string , error ) {
25
+ cfg , err := config . LoadDefaultConfig ( ctx )
24
26
if err != nil {
25
- return "" , xerrors . Errorf ( "creating aws session: %w" , err )
27
+ return "" , err
26
28
}
27
29
28
30
db , err := sql .Open (parentName , "" )
@@ -31,25 +33,25 @@ func Register(parentName string) (string, error) {
31
33
}
32
34
33
35
// create a new aws rds iam driver
34
- d := newDriver (db .Driver (), sess )
36
+ d := newDriver (db .Driver (), cfg )
35
37
name := fmt .Sprintf ("%s-awsrdsiam" , parentName )
36
38
sql .Register (fmt .Sprintf ("%s-awsrdsiam" , parentName ), d )
37
39
38
40
return name , nil
39
41
}
40
42
41
43
// newDriver will create a new *AwsRdsIamDriver using the environment aws session.
42
- func newDriver (parentDriver driver.Driver , sess * session. Session ) * awsRdsIamDriver {
44
+ func newDriver (parentDriver driver.Driver , cfg aws. Config ) * awsRdsIamDriver {
43
45
return & awsRdsIamDriver {
44
46
parent : parentDriver ,
45
- sess : sess ,
47
+ cfg : cfg ,
46
48
}
47
49
}
48
50
49
51
// Open creates a new connection to the database using the provided name.
50
52
func (d * awsRdsIamDriver ) Open (name string ) (driver.Conn , error ) {
51
53
// set password with signed aws authentication token for the rds instance
52
- nURL , err := getAuthenticatedURL (d .sess , name )
54
+ nURL , err := getAuthenticatedURL (d .cfg , name )
53
55
if err != nil {
54
56
return nil , xerrors .Errorf ("assigning authentication token to url: %w" , err )
55
57
}
@@ -63,15 +65,15 @@ func (d *awsRdsIamDriver) Open(name string) (driver.Conn, error) {
63
65
return conn , nil
64
66
}
65
67
66
- func getAuthenticatedURL (sess * session. Session , dbURL string ) (string , error ) {
68
+ func getAuthenticatedURL (cfg aws. Config , dbURL string ) (string , error ) {
67
69
nURL , err := url .Parse (dbURL )
68
70
if err != nil {
69
71
return "" , xerrors .Errorf ("parsing dbURL: %w" , err )
70
72
}
71
73
72
74
// generate a new rds session auth tokenized URL
73
75
rdsEndpoint := fmt .Sprintf ("%s:%s" , nURL .Hostname (), nURL .Port ())
74
- token , err := rdsutils .BuildAuthToken (rdsEndpoint , * sess . Config . Region , nURL .User .Username (), sess . Config .Credentials )
76
+ token , err := auth .BuildAuthToken (context . Background (), rdsEndpoint , cfg . Region , nURL .User .Username (), cfg .Credentials )
75
77
if err != nil {
76
78
return "" , xerrors .Errorf ("building rds auth token: %w" , err )
77
79
}
0 commit comments