From bcebb4c33e4b7df95bb4ec3ddd8ffe5ceb6ac637 Mon Sep 17 00:00:00 2001 From: naveenkantamneni Date: Tue, 15 Aug 2023 16:48:19 -0700 Subject: [PATCH] Added example java Application with steps to connect to Amazon Keyspaces from Amazon EKS using SigV4 Authentication --- .../connection-EKS-SigV4/.DS_Store | Bin 0 -> 6148 bytes .../connection-EKS-SigV4/Dockerfile | 27 +++++ .../connection-EKS-SigV4/README.md | 98 ++++++++++++++++++ .../cassandra_truststore.jks | Bin 0 -> 1430 bytes .../connection-EKS-SigV4/deployment.yaml | 33 ++++++ java/datastax-v4/connection-EKS-SigV4/pom.xml | 76 ++++++++++++++ .../connection-EKS-SigV4/src/.DS_Store | Bin 0 -> 6148 bytes .../connection-EKS-SigV4/src/main/.DS_Store | Bin 0 -> 8196 bytes ...eyspacessigv4springbootappApplication.java | 73 +++++++++++++ .../src/main/resources/application.conf | 17 +++ .../src/main/resources/logback.xml | 13 +++ ...cessigv4springbootappApplicationTests.java | 13 +++ 12 files changed, 350 insertions(+) create mode 100644 java/datastax-v4/connection-EKS-SigV4/.DS_Store create mode 100644 java/datastax-v4/connection-EKS-SigV4/Dockerfile create mode 100644 java/datastax-v4/connection-EKS-SigV4/README.md create mode 100644 java/datastax-v4/connection-EKS-SigV4/cassandra_truststore.jks create mode 100644 java/datastax-v4/connection-EKS-SigV4/deployment.yaml create mode 100644 java/datastax-v4/connection-EKS-SigV4/pom.xml create mode 100644 java/datastax-v4/connection-EKS-SigV4/src/.DS_Store create mode 100644 java/datastax-v4/connection-EKS-SigV4/src/main/.DS_Store create mode 100644 java/datastax-v4/connection-EKS-SigV4/src/main/java/com/example/mykeyspacessigv4springbootapp/Mykeyspacessigv4springbootappApplication.java create mode 100644 java/datastax-v4/connection-EKS-SigV4/src/main/resources/application.conf create mode 100644 java/datastax-v4/connection-EKS-SigV4/src/main/resources/logback.xml create mode 100644 java/datastax-v4/connection-EKS-SigV4/src/test/java/com/example/mykeyspacessigv4springbootapp/Mykeyspacessigv4springbootappApplicationTests.java diff --git a/java/datastax-v4/connection-EKS-SigV4/.DS_Store b/java/datastax-v4/connection-EKS-SigV4/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 +``` + +## Navigate to the base Directory, Modify the Dockerfile as needed and build the Docker Image. Make sure to use your AWS Account ID, AWS Region where ECR repository created, ECR repository name and your tag during build + +``` +cd amazon-keyspaces-examples/java/datastax-v4/connection-EKS-SigV4 +docker build -t .dkr.ecr..amazonaws.com/: . +``` + +## Retrieve Authentication Token to push the image to ECR +``` +aws ecr get-login-password --region | docker login --username AWS --password-stdin .dkr.ecr..amazonaws.com +``` + +## Push Docker Image to Amazon ECR repository +``` +docker push .dkr.ecr..amazonaws.com/: +``` + +## Modify deployment.yaml with relevant information and Deploy Application to Amazon EKS +``` +kubectl apply -f deployment.yaml +``` + +## Check the POD status +``` +kubectl get pods -n +``` + +### Optional, Validate Logs to ensure connectivity to Amazon Keyspaces +``` +kubectl logs -f -n +``` + diff --git a/java/datastax-v4/connection-EKS-SigV4/cassandra_truststore.jks b/java/datastax-v4/connection-EKS-SigV4/cassandra_truststore.jks new file mode 100644 index 0000000000000000000000000000000000000000..ce4b9face2fabcb68c122fb45712aee40afa07c9 GIT binary patch literal 1430 zcmV;H1!?*)f(4QS0Ru3C1v~}`Duzgg_YDCD0ic2fEd+uEDKLTsB`|^oAqEL5hDe6@ z4FLxRpn?SwFoFdR0s#Opf&~W#2`Yw2hW8Bt2LUi<1_>&LNQURVU7LM^KFe=tqh@g$Au9p`ClCSwATSID2r7n1hW8Bu2?YQ! z9R>+thDZTr0|Wso1Q3z`H|9WCV*i!OB%F!?R_cI)1dxD|6V)*@2+iM$aYzJ#WqV^QiUoKpS@yOTbN?3XQk@e={AM%5l}3tsu;{+BuaP zK9Rvjqu1+EYxWtz~5zL(HgDCYVI}+WhD}J`CGP6`(F#< zKEdeNIu>$rPENV%E0ju0R?yf`Z9sOFd)mCb`8J;RKf`RRNh5n?Z_o?v|SOfhrA zt_Z_y!jw@Z%~~C}Q2mnNN9XtZQZZL+OR=!^)jz@V4PT z?5K##8nQe3G-jb%Y&yr)G6n<0O*U4Nu1g9GyX zb}L2cIbar0G>$Z)=%Vr~2B&p!S^T;~9$^%0g+B;J@Hzp)I1v>b^ea;y$(0ITaAu`v zMpHzCC?7J&M|hx6B^K$^z(A#d*_Y9mz>hLfu1PWW3z2vk?TApxIk-Z5VL+hxveTE3d`ky3+nXz#use$1);Ki$G?TMv$+9joTR95*_7J9ndigr6ejRxw1nfQT5 zAxzuGUL{^sW?|4m6y91F40BfgsQ{8~$DN#g#x+{v;cVQ$y=j+r)dznBFd@XgyA9ho z@L8X5Wlm2iI~-CKSmw&C0p8Q-i~Ra?}ZBva_h;%kFXgCO!Ydq?ci zI!PuH9Ue3;7JPm#mr$ELz-<&U%2dh`uYpsX7W&Uf0@`%%n*CW;d+@F7J`1};bu7p_t8B~x-rEUP;xU8PCA)u3fMoBpla7^5C}w?SxJl_vL)Jet(HyWkY~dFcqxB} zATAv685#5~B?#GQNoGflmotFfP@gQHFLeLLsTDMaUVu1R@;iZ0)Y5Epj)DjLiBuc1 z-FYO~O->8q1dd0K2-iy`j8|8*s&H5pBkpuo`eL|zC${qe zY=8;#UGhRML=aHJJ=XY2l9Yyz1oHMFflL<1_@w>NC9O71OfpC00bZ@Q%g1IpP0I6JEXmCp){ntj6iek3{AWt k0oEZBA6e)G6yNeD#V`y^cbDvv$8?i>Mvx|ML;?aQ5VyaAS^xk5 literal 0 HcmV?d00001 diff --git a/java/datastax-v4/connection-EKS-SigV4/deployment.yaml b/java/datastax-v4/connection-EKS-SigV4/deployment.yaml new file mode 100644 index 0000000..500c675 --- /dev/null +++ b/java/datastax-v4/connection-EKS-SigV4/deployment.yaml @@ -0,0 +1,33 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: mykeyspacessigv4springbootapp + namespace: +spec: + replicas: 1 + selector: + matchLabels: + app: mykeyspacessigv4springbootapp + template: + metadata: + labels: + app: mykeyspacessigv4springbootapp + spec: + serviceAccountName: + containers: + - name: + image: .dkr.ecr..amazonaws.com/: + ports: + - containerPort: 8080 + env: + - name: CASSANDRA_HOST + value: ":9142" + - name: CASSANDRA_DC + value: "" + - name: AWS_WEB_IDENTITY_TOKEN_FILE + value: /var/run/secrets/eks.amazonaws.com/serviceaccount/token + - name: AWS_ROLE_ARN + value: "arn:aws:iam:::role/" + - name: AWS_REGION + value: "" + diff --git a/java/datastax-v4/connection-EKS-SigV4/pom.xml b/java/datastax-v4/connection-EKS-SigV4/pom.xml new file mode 100644 index 0000000..67f9c1c --- /dev/null +++ b/java/datastax-v4/connection-EKS-SigV4/pom.xml @@ -0,0 +1,76 @@ + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.1.1 + + + com.example + mykeyspacessigv4springbootapp + 1.0-SNAPSHOT + jar + + + UTF-8 + 17 + + + + + com.datastax.oss + java-driver-core + 4.15.0 + + + software.aws.mcs + aws-sigv4-auth-cassandra-java-driver-plugin + 4.0.3 + + + org.slf4j + slf4j-api + 2.0.5 + + + org.springframework.boot + spring-boot-starter-data-cassandra + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + javax.annotation + javax.annotation-api + 1.3.2 + + + com.amazonaws + aws-java-sdk-sts + 1.11.717 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 17 + + + + + diff --git a/java/datastax-v4/connection-EKS-SigV4/src/.DS_Store b/java/datastax-v4/connection-EKS-SigV4/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5ea7480e13a9d5afa9a7d62dc5d97d44f28c1774 GIT binary patch literal 6148 zcmeHK%}T>S5Z-O0O({YS3Oz1(Em+f15HBIt7cim+m70*E!8BW%)E-J9XMG``#OHBl zcOw?-Rm9G~?l-@?*$=Wmj4|%d<737g#+VHak)yIf(7iEKGs%b?$A}jBG)iRz_M3_Q zb--`8*o1{FVcFO3kEUso7v1hVuhp%c-G<$;TlQV>C>KEy7W3Q>XE$hFN|{EL9!6Km zcrkMJ&tz7FNj9FTf+QY8%I$TM#d6`xc^2oYHqZgPX*Wksd%1LbZbuCI?y4h}CvLYR z`n|zw)wB-|k4`T}Pw6C+FPcyed@I>ASivhOpX+%JW?3q;2k=$-RURQRKnxHA#K874 zV9o@)wY?P3%83DD;0Fe9e-O|RJ%go2wRJ#;*Jq4dh$x`rTLMuS^bD37Ap*j6DWERp z=83^|IrxRi^9+_6bvff|W*EoJTs>a6njQQ?r8Dknq@EZc2G$v+ibVC$eRC;^D_ z5+G=FPjx_G6Ax)Bq|<^1rZlIh9xyb;u*5)NPVzWcCz=ZBw4lNqP?!UTPsXr9!Qkm+ z7Z20{Q-Vf)6oDuLw?}}dk4#lN)$HKjT)%r08QaZ}^m1mxwmd(PxQ0?$`GSQNtb$dt z!+m3JvCr52yw|Sh4sx#Fb?r>)Ue63#W-+bSbhwVMTaK9v3@pPWl|w_8W4Oh3H}4o; zVB04IOlERgt)HAswj`V5n_H7p&GE^t$wYI!wPo|vl+0=yH*N1tAGgOH_i5n_h8qGb zp5@%RxjnPJLWl6ItghtQ^^#|@QmG9NDI>#H)^+-<(`H&->XB>vi0#Rl1#)R9>)QEo z$4jeKS>4X&ZQVE9Y?~{4!@haa=Xax?oAWyY#k8vCJ+s#&J*!}Lk~W!E^O?FQe9Lvb zK{MwOZA>ME1M;OswXxOru1`F$ZCB^RT|HM9FIlQ8)k@7!!Sbw(Z4MMI!yg;by{zdN zmUC>BV(0kQ?ae#JeSHe0(i%Wytpoyc4MDYcO?@r(v-m8`zU z4jJ?#54Z-O(Fi13gSM8jgM7RrXHqYQm33N^tm>@aBbUV#8dF1bX@P}lQfXzX zArIJk#U$D7I#Hs{Am1|~UjGtO7U^TSD4(NdqFrWzM;YGLrufrvHA3lW7 z;cK`8-@rBa4t|86;aB(r7hnZ4l(8C@VJ+5SBR1m(+=$z-13PgK?!_(~z(E|w5j=v& za15Wo<9Gs3<0MYuQ+NiS#pm#Od;wp>H}Floh;QKs_z8ZBpW#<{9dF>b_zV7qe@Y;s zq)3(0VrhxAN?I+gml6_v_2W${<;|$zOTE-icXR9rlsDmyAf1>iZ(@7)D*OJ`yt%Q6 zXG&G|vYOhJjq5ffH*ZhPfJwlwgt(iL9Dw&0$OqsJ)_XSUL`o^K0YbNVa=y$`D>#nX zRj%C-S7Pb{!oOhGtR;3KVPCNKHN|48L@6iOjhkYMT1E*a2evIu#A3*7c~DW*a!M^B z+p&{a;Mp$twsx9{Ckp%fki7`+!e#gvz9h(g4?n<9@H+x7#6<+rl^7?OuEDhg(*!25 z1zT|^?!q=~C(w4`qu7IwVJ{xU!c#2^ABmwsfp2c%`9-qMr_!7R1 zui&czfZxV<1o&nk`A7+jg5pPWL$c79b8Oc+M$!_PZ#9g#J4T>PNb7n1zkB}g|96}t z5=Ie-BJlr?0G4<5b@F3>zFm~p+Hty$(#0Fsn-(-Mp^mHY@t_&Dx}kb bl7!kn{vm)~?xOR5u2 + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + diff --git a/java/datastax-v4/connection-EKS-SigV4/src/test/java/com/example/mykeyspacessigv4springbootapp/Mykeyspacessigv4springbootappApplicationTests.java b/java/datastax-v4/connection-EKS-SigV4/src/test/java/com/example/mykeyspacessigv4springbootapp/Mykeyspacessigv4springbootappApplicationTests.java new file mode 100644 index 0000000..6c44092 --- /dev/null +++ b/java/datastax-v4/connection-EKS-SigV4/src/test/java/com/example/mykeyspacessigv4springbootapp/Mykeyspacessigv4springbootappApplicationTests.java @@ -0,0 +1,13 @@ +package com.example.mykeyspacessigv4springbootapp; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class Mykeyspacessigv4springbootappApplicationTests { + + @Test + void contextLoads() { + } + +}