Cassandra Java 클라이언트 드라이버를 사용하여 프로그래밍 방식으로 Amazon Keyspaces에 액세스 - Amazon Keyspaces(Apache Cassandra용)

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Cassandra Java 클라이언트 드라이버를 사용하여 프로그래밍 방식으로 Amazon Keyspaces에 액세스

이 섹션에서는 Java 클라이언트 드라이버를 사용하여 Amazon Keyspaces에 접속하는 방법을 소개합니다.

참고

자바 17 및 DataStax 자바 드라이버 4.17은 현재 베타 지원만 가능합니다. 자세한 정보는 https://docs.datastax.com/en/developer/java-driver/4.17/upgrade_guide/을 참조하세요.

Amazon Keyspaces 리소스에 프로그래밍 방식으로 액세스할 수 있는 보안 인증 정보를 사용자와 애플리케이션에 제공하려면 다음 중 하나를 수행할 수 있습니다.

  • 특정 AWS Identity and Access Management (IAM) 사용자와 연결된 서비스별 보안 인증 정보를 생성합니다.

  • 보안 강화를 위해 모든 서비스에서 사용되는 IAM ID용 IAM 액세스 키를 생성하는 것이 좋습니다. AWS Cassandra 클라이언트 드라이버용 Amazon Keyspaces SigV4 인증 플러그인을 사용하면 사용자 이름 및 암호 대신 IAM 액세스 키를 사용하여 Amazon Keyspaces에 대한 호출을 인증할 수 있습니다. 자세한 정보는 Amazon Keyspace용 AWS 자격 증명을 생성하고 구성하는 방법을 참조하세요.

참고

Spring Boot와 함께 Amazon Keyspaces를 사용하는 방법에 대한 예는 https://github.com/aws-samples/amazon-keyspaces-examples/tree/main/java/datastax-v4/spring을 참조하세요.

시작하기 전 준비 사항

Amazon Keyspaces에 접속하려면 시작하기 전에 다음 작업을 수행해야 합니다.

  1. Amazon Keyspaces에서는 클라이언트와의 연결을 보호하는 데 도움이 되는 전송 계층 보안(TLS)을 사용해야 합니다.

    1. 다음 명령을 사용하여 Starfield 디지털 인증서를 다운로드하고 sf-class2-root.crt를 로컬 또는 홈 디렉터리에 저장합니다.

      curl https://certs.secureserver.net/repository/sf-class2-root.crt -O
      참고

      또한 Amazon 디지털 인증서를 사용하여 Amazon Keyspaces에 접속할 수 있으며, 클라이언트가 Amazon Keyspaces에 성공적으로 접속하면 계속 접속할 수 있습니다. Starfield 인증서는 이전 인증 기관을 사용하는 클라이언트에게 추가적인 이전 버전과의 호환성을 제공합니다.

    2. Starfield 디지털 인증서를 trustStore 파일로 변환합니다.

      openssl x509 -outform der -in sf-class2-root.crt -out temp_file.der keytool -import -alias cassandra -keystore cassandra_truststore.jks -file temp_file.der

      이 단계에서는 키스토어의 암호를 생성하고 이 인증서를 신뢰해야 합니다. 대화형 명령은 다음과 같습니다.

      Enter keystore password: Re-enter new password: Owner: OU=Starfield Class 2 Certification Authority, O="Starfield Technologies, Inc.", C=US Issuer: OU=Starfield Class 2 Certification Authority, O="Starfield Technologies, Inc.", C=US Serial number: 0 Valid from: Tue Jun 29 17:39:16 UTC 2004 until: Thu Jun 29 17:39:16 UTC 2034 Certificate fingerprints: MD5: 32:4A:4B:BB:C8:63:69:9B:BE:74:9A:C6:DD:1D:46:24 SHA1: AD:7E:1C:28:B0:64:EF:8F:60:03:40:20:14:C3:D0:E3:37:0E:B5:8A SHA256: 14:65:FA:20:53:97:B8:76:FA:A6:F0:A9:95:8E:55:90:E4:0F:CC:7F:AA:4F:B7:C2:C8:67:75:21:FB:5F:B6:58 Signature algorithm name: SHA1withRSA Subject Public Key Algorithm: 2048-bit RSA key Version: 3 Extensions: #1: ObjectId: 2.5.29.35 Criticality=false AuthorityKeyIdentifier [ KeyIdentifier [ 0000: BF 5F B7 D1 CE DD 1F 86 F4 5B 55 AC DC D7 10 C2 ._.......[U..... 0010: 0E A9 88 E7 .... ] [OU=Starfield Class 2 Certification Authority, O="Starfield Technologies, Inc.", C=US] SerialNumber: [ 00] ] #2: ObjectId: 2.5.29.19 Criticality=false BasicConstraints:[ CA:true PathLen:2147483647 ] #3: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: BF 5F B7 D1 CE DD 1F 86 F4 5B 55 AC DC D7 10 C2 ._.......[U..... 0010: 0E A9 88 E7 .... ] ] Trust this certificate? [no]: y
  2. JVM 인수에 trustStore 파일을 첨부합니다.

    -Djavax.net.ssl.trustStore=path_to_file/cassandra_truststore.jks -Djavax.net.ssl.trustStorePassword=my_password

서비스별 자격 증명을 사용하여 Apache Cassandra용 DataStax Java 드라이버를 사용하여 Amazon Keyspaces에 연결하는 방법에 대한 tep-by-step 자습서

다음 step-by-step 자습서는 서비스별 자격 증명을 사용하여 Cassandra용 Java 드라이버를 사용하여 Amazon Keyspace에 연결하는 방법을 안내합니다. 구체적으로 말하자면, 아파치 카산드라용 자바 드라이버 4.0 버전을 사용하게 될 것입니다. DataStax

1단계: 사전 조건

이 자습서를 따르려면 서비스별 자격 증명을 생성하고 Apache Cassandra용 DataStax Java 드라이버를 Java 프로젝트에 추가해야 합니다.

2단계: 드라이버 구성

애플리케이션의 구성 파일을 생성하여 DataStax Java Cassandra 드라이버의 설정을 지정할 수 있습니다. 이 구성 파일은 기본 설정을 재정의하고 포트 9142를 사용하여 Amazon Keyspaces 서비스 엔드포인트에 접속하도록 드라이버에 지시합니다. 사용 가능한 서비스 엔드포인트 목록은 Amazon Keyspaces의 서비스 엔드포인트 섹션을 참조하세요.

구성 파일을 생성하고 애플리케이션의 리소스 폴더에 파일을 저장합니다(예: src/main/resources/application.conf). application.conf을 열고 다음 구성 설정을 열고 추가합니다.

  1. 인증 제공자 - PlainTextAuthProvider 클래스를 사용하여 인증 제공자를 생성합니다. ServiceUser이름은 의 단계에 따라 서비스별 자격 증명을 생성할 때 얻은 사용자 이름 및 암호와 ServicePassword일치해야 합니다. 서비스별 보안 인증 정보 생성

    참고

    드라이버 구성 파일에 자격 증명을 하드코딩하는 대신 Apache Cassandra용 DataStax Java 드라이버용 인증 플러그인을 사용하여 단기 자격 증명을 사용할 수 있습니다. 자세히 알아보려면 아파치 카산드라용 4.x DataStax 자바 드라이버와 SigV4 인증 플러그인을 사용하여 Amazon Keyspaces에 연결하는 방법에 대한 tep-by-step 자습서에 대한 안내를 따르세요.

  2. 로컬 데이터 센터 - local-datacenter에 대한 값을 연결 대상 리전으로 설정합니다. 예를 들어 애플리케이션이 cassandra.us-east-2.amazonaws.com에 연결 중인 경우 로컬 데이터 센터를 us-east-2로 설정합니다. 사용 가능한 모든 AWS 리전에 대한 자세한 내용은 Amazon Keyspaces의 서비스 엔드포인트 섹션을 참조하세요. 더 적은 수의 노드에 대해 로드 밸런싱을 수행하도록 slow-replica-avoidance = false을 설정합니다.

  3. SSL/TLS — 클래스를 지정하는 한 줄로 구성 파일에 섹션을 EngineFactory 추가하여 SSL을 초기화합니다. class = DefaultSslEngineFactory trustStore 파일의 경로와 이전에 만든 암호를 입력합니다. Amazon Keyspaces는 피어의 hostname-validation를 지원하지 않으므로 이 옵션을 false로 설정합니다.

datastax-java-driver { basic.contact-points = [ "cassandra.us-east-2.amazonaws.com:9142"] advanced.auth-provider{ class = PlainTextAuthProvider username = "ServiceUserName" password = "ServicePassword" } basic.load-balancing-policy { local-datacenter = "us-east-2" slow-replica-avoidance = false } advanced.ssl-engine-factory { class = DefaultSslEngineFactory truststore-path = "./src/main/resources/cassandra_truststore.jks" truststore-password = "my_password" hostname-validation = false } }
참고

구성 파일에 trustStore 경로를 추가하는 대신 애플리케이션 코드에 trustStore 경로를 직접 추가하거나 trustStore 경로를 JVM 인수에 추가할 수도 있습니다.

3단계: 샘플 애플리케이션 실행

이 코드 예제는 앞서 만든 구성 파일을 사용하여 Amazon Keyspaces에 대한 연결 풀을 생성하는 간단한 명령줄 애플리케이션을 보여줍니다. 간단한 쿼리를 실행하여 연결이 설정되었는지 확인합니다.

package <your package>; // add the following imports to your project import com.datastax.oss.driver.api.core.CqlSession; import com.datastax.oss.driver.api.core.config.DriverConfigLoader; import com.datastax.oss.driver.api.core.cql.ResultSet; import com.datastax.oss.driver.api.core.cql.Row; public class App { public static void main( String[] args ) { //Use DriverConfigLoader to load your configuration file DriverConfigLoader loader = DriverConfigLoader.fromClasspath("application.conf"); try (CqlSession session = CqlSession.builder() .withConfigLoader(loader) .build()) { ResultSet rs = session.execute("select * from system_schema.keyspaces"); Row row = rs.one(); System.out.println(row.getString("keyspace_name")); } } }
참고

try 블록을 사용하여 연결이 항상 닫히도록 설정합니다. try 블록을 사용하지 않는 경우 리소스 유출을 방지하기 위해 연결을 닫아야 합니다.

아파치 카산드라용 4.x DataStax 자바 드라이버와 SigV4 인증 플러그인을 사용하여 Amazon Keyspaces에 연결하는 방법에 대한 tep-by-step 자습서

다음 섹션에서는 Apache Cassandra용 오픈 소스 4.x DataStax Java 드라이버용 SigV4 인증 플러그인을 사용하여 Amazon Keyspaces (Apache Cassandra용) 에 액세스하는 방법을 설명합니다. 플러그인은 리포지토리에서 GitHub사용할 수 있습니다.

SigV4 인증 플러그인을 사용하면 Amazon Keyspaces에 접속할 때 사용자 또는 역할에 대한 IAM 보안 인증 정보를 사용할 수 있습니다. 이 플러그인은 사용자 이름과 비밀번호를 요구하는 대신 액세스 키를 사용하여 API 요청에 서명합니다. 자세한 정보는 Amazon Keyspace용 AWS 자격 증명을 생성하고 구성하는 방법을 참조하세요.

1단계: 사전 조건

이 튜토리얼을 따르려면 다음 작업을 수행해야 합니다.

2단계: 드라이버 구성

애플리케이션에 대한 구성 파일을 생성하여 DataStax Java Cassandra 드라이버의 설정을 지정할 수 있습니다. 이 구성 파일은 기본 설정을 재정의하고 포트 9142를 사용하여 Amazon Keyspaces 서비스 엔드포인트에 접속하도록 드라이버에 지시합니다. 사용 가능한 서비스 엔드포인트 목록은 Amazon Keyspaces의 서비스 엔드포인트 섹션을 참조하세요.

구성 파일을 생성하고 애플리케이션의 리소스 폴더에 파일을 저장합니다(예: src/main/resources/application.conf). application.conf을 열고 다음 구성 설정을 열고 추가합니다.

  1. 인증 제공자 - advanced.auth-provider.classsoftware.aws.mcs.auth.SigV4AuthProvider의 새 인스턴스로 설정합니다. AuthProvider SigV4는 SigV4 인증을 수행하기 위해 플러그인에서 제공하는 인증 핸들러입니다.

  2. 로컬 데이터 센터 - local-datacenter에 대한 값을 연결 대상 리전으로 설정합니다. 예를 들어 애플리케이션이 cassandra.us-east-2.amazonaws.com에 연결 중인 경우 로컬 데이터 센터를 us-east-2로 설정합니다. 사용 가능한 모든 정보는 을 참조하십시오. AWS 리전Amazon Keyspaces의 서비스 엔드포인트 사용 가능한 모든 노드에 대해 로드 밸런싱을 slow-replica-avoidance = false 수행하도록 설정합니다.

  3. Idempotence - 실패한 idempotence 읽기/쓰기/준비/실행 요청을 항상 재시도하도록 true 드라이버를 구성하도록 응용 프로그램의 기본값을 설정합니다. 이는 실패한 요청을 재시도하여 일시적인 오류를 처리하는 데 도움이 되는 분산 응용 프로그램을 위한 모범 사례입니다.

  4. SSL/TLS — 클래스를 지정하는 한 줄로 구성 파일에 섹션을 EngineFactory 추가하여 SSL을 초기화합니다. class = DefaultSslEngineFactory trustStore 파일의 경로와 이전에 만든 암호를 입력합니다. Amazon Keyspaces는 피어의 hostname-validation를 지원하지 않으므로 이 옵션을 false로 설정합니다.

  5. 연결 - 설정을 통해 엔드포인트당 최소 3개의 로컬 연결을 생성합니다. local.size = 3 이는 애플리케이션이 오버헤드 및 트래픽 버스트를 처리하는 데 도움이 되는 모범 사례입니다. 예상 트래픽 패턴을 기반으로 애플리케이션에 필요한 엔드포인트당 로컬 연결 수를 계산하는 방법에 대한 자세한 내용은 을 참조하십시오. Amazon Keyspaces에서 연결을 구성하는 방법

  6. 재시도 정책 — Amazon Keyspaces 재시도 AmazonKeyspacesExponentialRetryPolicy 정책은 Cassandra 드라이버와 함께 제공되는 정책 대신 사용할 수 DefaultRetryPolicy 있습니다. 두 재시도 정책의 주요 차이점은 필요에 맞게 재시도 횟수를 구성할 수 있다는 것입니다. AmazonKeyspacesExponentialRetryPolicy 기본적으로 에 대한 재시도 횟수는 3으로 AmazonKeyspacesExponentialRetryPolicy 설정됩니다. 또한 Amazon Keyspaces 재시도 정책은 제네릭을 반환하지 않습니다. NoHostAvailableException 대신 Amazon Keyspaces 재시도 정책은 서비스에서 반환한 원래 예외를 다시 전달합니다. 재시도 정책을 구현하는 추가 코드 예제는 Github의 Amazon Keyspaces 재시도 정책을 참조하십시오.

  7. 준비된 명령문 — 네트워크 사용을 prepare-on-all-nodes 최적화하려면 false로 설정하십시오.

datastax-java-driver { basic { contact-points = [ "cassandra.us-east-2.amazonaws.com:9142"] request { timeout = 2 seconds consistency = LOCAL_QUORUM page-size = 1024 default-idempotence = true } load-balancing-policy { local-datacenter = "us-east-2" class = DefaultLoadBalancingPolicy slow-replica-avoidance = false } } advanced { auth-provider { class = software.aws.mcs.auth.SigV4AuthProvider aws-region = us-east-2 } ssl-engine-factory { class = DefaultSslEngineFactory truststore-path = "./src/main/resources/cassandra_truststore.jks" truststore-password = "my_password" hostname-validation = false } connection { connect-timeout = 5 seconds max-requests-per-connection = 512 pool { local.size = 3 } } retry-policy { class = com.aws.ssa.keyspaces.retry.AmazonKeyspacesExponentialRetryPolicy max-attempts = 3 min-wait = 10 mills max-wait = 100 mills } prepared-statements { prepare-on-all-nodes = false } } }
참고

구성 파일에 trustStore 경로를 추가하는 대신 애플리케이션 코드에 trustStore 경로를 직접 추가하거나 trustStore 경로를 JVM 인수에 추가할 수도 있습니다.

3단계: 애플리케이션 실행

이 코드 예제는 앞서 만든 구성 파일을 사용하여 Amazon Keyspaces에 대한 연결 풀을 생성하는 간단한 명령줄 애플리케이션을 보여줍니다. 간단한 쿼리를 실행하여 연결이 설정되었는지 확인합니다.

package <your package>; // add the following imports to your project import com.datastax.oss.driver.api.core.CqlSession; import com.datastax.oss.driver.api.core.config.DriverConfigLoader; import com.datastax.oss.driver.api.core.cql.ResultSet; import com.datastax.oss.driver.api.core.cql.Row; public class App { public static void main( String[] args ) { //Use DriverConfigLoader to load your configuration file DriverConfigLoader loader = DriverConfigLoader.fromClasspath("application.conf"); try (CqlSession session = CqlSession.builder() .withConfigLoader(loader) .build()) { ResultSet rs = session.execute("select * from system_schema.keyspaces"); Row row = rs.one(); System.out.println(row.getString("keyspace_name")); } } }
참고

try 블록을 사용하여 연결이 항상 닫히도록 설정합니다. try 블록을 사용하지 않는 경우 리소스 유출을 방지하기 위해 연결을 닫아야 합니다.

아파치 카산드라용 3.x DataStax 자바 드라이버와 SigV4 인증 플러그인을 사용하여 Amazon Keyspaces에 연결합니다.

다음 섹션에서는 Apache Cassandra용 3.x 오픈 소스 DataStax Java 드라이버용 SigV4 인증 플러그인을 사용하여 Amazon Keyspaces에 액세스하는 방법을 설명합니다. 플러그인은 리포지토리에서 GitHub 사용할 수 있습니다.

SigV4 인증 플러그인을 사용하면 Amazon Keyspaces에 접속할 때 사용자 및 역할에 대한 IAM 보안 인증 정보를 사용할 수 있습니다. 이 플러그인은 사용자 이름과 비밀번호를 요구하는 대신 액세스 키를 사용하여 API 요청에 서명합니다. 자세한 정보는 Amazon Keyspace용 AWS 자격 증명을 생성하고 구성하는 방법을 참조하세요.

1단계: 사전 조건

이 코드 샘플을 실행하려면 먼저 다음 작업을 수행해야 합니다.

2단계: 애플리케이션 실행

이 코드 예제는 Amazon Keyspaces에 대한 연결 풀을 생성하는 간단한 명령줄 애플리케이션을 보여줍니다. 간단한 쿼리를 실행하여 연결이 설정되었는지 확인합니다.

package <your package>; // add the following imports to your project import software.aws.mcs.auth.SigV4AuthProvider; import com.datastax.driver.core.Cluster; import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; public class App { public static void main( String[] args ) { String endPoint = "cassandra.us-east-2.amazonaws.com"; int portNumber = 9142; Session session = Cluster.builder() .addContactPoint(endPoint) .withPort(portNumber) .withAuthProvider(new SigV4AuthProvider("us-east-2")) .withSSL() .build() .connect(); ResultSet rs = session.execute("select * from system_schema.keyspaces"); Row row = rs.one(); System.out.println(row.getString("keyspace_name")); } }

사용 노트:

사용 가능한 엔드포인트 목록은 Amazon Keyspaces의 서비스 엔드포인트 섹션을 참조하세요.

Amazon Keyspace와 함께 Java Driver를 사용할 때 유용한 Java 드라이버 정책, 예제, 모범 사례는 https://github.com/aws-samples/amazon-keyspaces-java-driver-helpers 리포지토리를 참조하십시오.