Skip to content

Commit 89c1d32

Browse files
authored
Merge branch 'aws-samples:main' into main
2 parents 1b9919d + da43ddc commit 89c1d32

File tree

50 files changed

+2813
-47
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+2813
-47
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
## Connecting to Amazon Keyspaces with Golang
2+
3+
This sample project shows the use of the GOCQL Golang Driver for Apache Cassandra using SigV4.
4+
5+
### Prerequisites
6+
You should have Golang installed.
7+
8+
You should also setup Amazon Keyspaces with allow access from a specific IAM user/role. See [Accessing Amazon Keyspaces](https://docs.aws.amazon.com/keyspaces/latest/devguide/accessing.html) for more.
9+
10+
### Running the sample
11+
12+
This sample uses the GO AWS SDKs which will find credentials based on environment variables, config definitions or a credentials file see [AWS SDK for GO](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html) for more information regarding how to configure this.
13+
14+
You can quickly get this to run by explicitly setting the following environment variables...
15+
16+
- AWS_REGION (for example 'us-east-1)
17+
- AWS_ACCESS_KEY_ID (ex: 'AKIAIOSFODNN7EXAMPLE')
18+
- AWS_SECRET_ACCESS_KEY (ex: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY')
19+
20+
21+
### Install the dependencies
22+
23+
From the project directory...
24+
```
25+
$ go mod tidy
26+
```
27+
28+
### Testing
29+
From this project directory...
30+
```
31+
$ go run main.go
32+
```
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
3+
MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
4+
U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
5+
NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
6+
ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
7+
ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
8+
DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
9+
8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
10+
+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
11+
X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
12+
K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
13+
1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
14+
A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
15+
zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
16+
YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
17+
bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
18+
DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
19+
L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
20+
eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
21+
xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
22+
VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
23+
WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
24+
-----END CERTIFICATE-----
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module github.com/aws-samples/amazon-keyspaces-examples/golang/gocql/connection-sigv4
2+
3+
go 1.15
4+
5+
require (
6+
github.com/aws/aws-sdk-go v1.41.13
7+
github.com/aws/aws-sigv4-auth-cassandra-gocql-driver-plugin v0.0.0-20201114045740-dc6794966388
8+
github.com/gocql/gocql v0.0.0-20211015133455-b225f9b53fa1
9+
)
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
github.com/aws/aws-sdk-go v1.41.13 h1:wGgr6jkHdGExF33phfOqijFq7ZF+h7a6FXvJc77GpTc=
2+
github.com/aws/aws-sdk-go v1.41.13/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
3+
github.com/aws/aws-sigv4-auth-cassandra-gocql-driver-plugin v0.0.0-20201114045740-dc6794966388 h1:dKo8aNCPKQXfSW//H62GSi5IEBZvP0v7cWbyRFIMkx0=
4+
github.com/aws/aws-sigv4-auth-cassandra-gocql-driver-plugin v0.0.0-20201114045740-dc6794966388/go.mod h1:Y5LTHeZGpeKFaXYfPYNfVqdpAjejlvXLhGqFqSJRQYc=
5+
github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY=
6+
github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k=
7+
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
8+
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
9+
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
10+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
11+
github.com/gocql/gocql v0.0.0-20200624222514-34081eda590e/go.mod h1:DL0ekTmBSTdlNF25Orwt/JMzqIq3EJ4MVa/J/uK64OY=
12+
github.com/gocql/gocql v0.0.0-20211015133455-b225f9b53fa1 h1:px9qUCy/RNJNsfCam4m2IxWGxNuimkrioEF0vrrbPsg=
13+
github.com/gocql/gocql v0.0.0-20211015133455-b225f9b53fa1/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8=
14+
github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
15+
github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA=
16+
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
17+
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8=
18+
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4=
19+
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
20+
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
21+
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
22+
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
23+
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
24+
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
25+
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
26+
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
27+
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
28+
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
29+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
30+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
31+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
32+
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
33+
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
34+
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
35+
golang.org/x/net v0.0.0-20210614182718-04defd469f4e h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q=
36+
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
37+
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
38+
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
39+
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
40+
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
41+
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
42+
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
43+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
44+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
45+
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
46+
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
47+
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
48+
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
49+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
50+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"os"
7+
8+
"github.com/aws/aws-sdk-go/aws/session"
9+
"github.com/aws/aws-sigv4-auth-cassandra-gocql-driver-plugin/sigv4"
10+
"github.com/gocql/gocql"
11+
)
12+
13+
var awsSession *session.Session
14+
var awsRegion string
15+
16+
type CassandraMeta struct {
17+
Keyspace string
18+
Table string
19+
}
20+
21+
func init() {
22+
//Establish AWS Session
23+
awsSession = session.New()
24+
awsRegion = os.Getenv("AWS_REGION")
25+
if len(awsRegion) == 0 {
26+
//Fallback to DEFAULT_AWS_REGION if AWS_REGION missing
27+
awsRegion = os.Getenv("AWS_DEFAULT_REGION")
28+
if len(awsRegion) == 0 {
29+
fmt.Println("No AWS_REGION or AWS_DEFAULT_REGION env variable specified")
30+
os.Exit(-1)
31+
}
32+
}
33+
}
34+
35+
func main() {
36+
37+
//Determine Contact Point
38+
contactPoint := fmt.Sprintf("cassandra.%s.amazonaws.com:9142", awsRegion)
39+
fmt.Println("Using Contact Point ", contactPoint)
40+
41+
// Configure Cluster
42+
cluster := gocql.NewCluster(contactPoint)
43+
44+
awsAuth := sigv4.NewAwsAuthenticator()
45+
cluster.Authenticator = awsAuth
46+
47+
// Configure Connection TrustStore for TLS
48+
cluster.SslOpts = &gocql.SslOptions{
49+
CaPath: "certs/sf-class2-root.crt",
50+
}
51+
52+
cluster.Consistency = gocql.LocalQuorum
53+
cluster.DisableInitialHostLookup = true
54+
55+
cassandraSession, err := cluster.CreateSession()
56+
if err != nil {
57+
fmt.Println("Cassandra Session Creation Error - ", err)
58+
os.Exit(-2)
59+
}
60+
61+
defer cassandraSession.Close()
62+
63+
// Perform Query
64+
var keyspaceName string
65+
iter := cassandraSession.Query("SELECT keyspace_name FROM system_schema.keyspaces;").Iter()
66+
defer iter.Close()
67+
68+
for iter.Scan(&keyspaceName) {
69+
fmt.Println("keyspace_name : ", keyspaceName)
70+
}
71+
if err := iter.Close(); err != nil {
72+
log.Fatal(err)
73+
}
74+
}

java/datastax-v3/connection-sigv4/src/main/resources/application-full.conf

Lines changed: 0 additions & 15 deletions
This file was deleted.

java/datastax-v3/connection-sigv4/src/main/resources/application.conf

Lines changed: 0 additions & 13 deletions
This file was deleted.

java/datastax-v3/connection-vpc-endpoint/src/main/java/software/aws/mcs/example/AmazonKeyspacesRetryPolicy.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,14 @@ public AmazonKeyspacesRetryPolicy(int numberOfRetries) {
2828
}
2929

3030
protected RetryDecision makeDecisionBasedOnNumberOfConfiguredRetries(int nbRetry, ConsistencyLevel cl){
31-
if(nbRetry > maxNumberOfRetries){
31+
if(nbRetry < maxNumberOfRetries){
32+
33+
return RetryDecision.retry(cl);
34+
35+
}else{
36+
3237
return RetryDecision.rethrow();
3338
}
34-
35-
return RetryDecision.retry(cl);
3639
}
3740

3841
public RetryDecision onReadTimeout(Statement statement, ConsistencyLevel cl, int requiredResponses, int receivedResponses, boolean dataRetrieved, int nbRetry) {

java/datastax-v4/connection-lambda/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ dependencies {
1313
implementation 'com.amazonaws:aws-lambda-java-core:1.2.1'
1414
implementation 'com.google.code.gson:gson:2.8.6'
1515
implementation 'com.amazonaws:aws-xray-recorder-sdk-core:2.7.1'
16-
testImplementation 'org.apache.logging.log4j:log4j-api:2.13.0'
17-
testImplementation 'org.apache.logging.log4j:log4j-core:2.13.0'
18-
testImplementation 'org.apache.logging.log4j:log4j-slf4j18-impl:2.13.0'
16+
testImplementation 'org.apache.logging.log4j:log4j-api:2.16.0'
17+
testImplementation 'org.apache.logging.log4j:log4j-core:2.16.0'
18+
testImplementation 'org.apache.logging.log4j:log4j-slf4j18-impl:2.16.0'
1919
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
2020
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.0'
2121
}

java/datastax-v4/connection-lambda/src/main/resources/application.conf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ datastax-java-driver {
1414
}
1515
ssl-engine-factory {
1616
class = DefaultSslEngineFactory
17+
hostname-validation = false
1718
}
1819
}
19-
}
20+
}

0 commit comments

Comments
 (0)