Skip to content

Commit 936e458

Browse files
authored
Merge pull request #182 from agawanea/main
Added Golang samples for Lambda connection with RDS using IAM and Lambda integration with DocDB
2 parents ed7c7fd + d8a6139 commit 936e458

File tree

2 files changed

+127
-0
lines changed
  • integration-docdb-to-lambda
  • lambda-function-connect-rds-iam

2 files changed

+127
-0
lines changed

integration-docdb-to-lambda/main.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package main
5+
6+
import (
7+
"context"
8+
"encoding/json"
9+
"fmt"
10+
11+
"github.com/aws/aws-lambda-go/lambda"
12+
)
13+
14+
type Event struct {
15+
Events []Record `json:"events"`
16+
}
17+
18+
type Record struct {
19+
Event struct {
20+
OperationType string `json:"operationType"`
21+
NS struct {
22+
DB string `json:"db"`
23+
Coll string `json:"coll"`
24+
} `json:"ns"`
25+
FullDocument interface{} `json:"fullDocument"`
26+
} `json:"event"`
27+
}
28+
29+
func main() {
30+
lambda.Start(handler)
31+
}
32+
33+
func handler(ctx context.Context, event Event) (string, error) {
34+
fmt.Println("Loading function")
35+
for _, record := range event.Events {
36+
logDocumentDBEvent(record)
37+
}
38+
39+
return "OK", nil
40+
}
41+
42+
func logDocumentDBEvent(record Record) {
43+
fmt.Printf("Operation type: %s\n", record.Event.OperationType)
44+
fmt.Printf("db: %s\n", record.Event.NS.DB)
45+
fmt.Printf("collection: %s\n", record.Event.NS.Coll)
46+
docBytes, _ := json.MarshalIndent(record.Event.FullDocument, "", " ")
47+
fmt.Printf("Full document: %s\n", string(docBytes))
48+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
/*
4+
Golang v2 code here.
5+
*/
6+
7+
package main
8+
9+
import (
10+
"context"
11+
"database/sql"
12+
"encoding/json"
13+
"fmt"
14+
15+
"github.com/aws/aws-lambda-go/lambda"
16+
"github.com/aws/aws-sdk-go-v2/config"
17+
"github.com/aws/aws-sdk-go-v2/feature/rds/auth"
18+
_ "github.com/go-sql-driver/mysql"
19+
)
20+
21+
type MyEvent struct {
22+
Name string `json:"name"`
23+
}
24+
25+
func HandleRequest(event *MyEvent) (map[string]interface{}, error) {
26+
27+
var dbName string = "DatabaseName"
28+
var dbUser string = "DatabaseUser"
29+
var dbHost string = "mysqldb.123456789012.us-east-1.rds.amazonaws.com"
30+
var dbPort int = 3306
31+
var dbEndpoint string = fmt.Sprintf("%s:%d", dbHost, dbPort)
32+
var region string = "us-east-1"
33+
34+
cfg, err := config.LoadDefaultConfig(context.TODO())
35+
if err != nil {
36+
panic("configuration error: " + err.Error())
37+
}
38+
39+
authenticationToken, err := auth.BuildAuthToken(
40+
context.TODO(), dbEndpoint, region, dbUser, cfg.Credentials)
41+
if err != nil {
42+
panic("failed to create authentication token: " + err.Error())
43+
}
44+
45+
dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?tls=true&allowCleartextPasswords=true",
46+
dbUser, authenticationToken, dbEndpoint, dbName,
47+
)
48+
49+
db, err := sql.Open("mysql", dsn)
50+
if err != nil {
51+
panic(err)
52+
}
53+
54+
defer db.Close()
55+
56+
var sum int
57+
err = db.QueryRow("SELECT ?+? AS sum", 3, 2).Scan(&sum)
58+
if err != nil {
59+
panic(err)
60+
}
61+
s := fmt.Sprint(sum)
62+
message := fmt.Sprintf("The selected sum is: %s", s)
63+
64+
messageBytes, err := json.Marshal(message)
65+
if err != nil {
66+
return nil, err
67+
}
68+
69+
messageString := string(messageBytes)
70+
return map[string]interface{}{
71+
"statusCode": 200,
72+
"headers": map[string]string{"Content-Type": "application/json"},
73+
"body": messageString,
74+
}, nil
75+
}
76+
77+
func main() {
78+
lambda.Start(HandleRequest)
79+
}

0 commit comments

Comments
 (0)