이 페이지에서는 Google 제공 자바 데이터베이스 연결(JDBC) 템플릿에 SSL 인증서를 사용하도록 Dataflow 작업자 VM에서 파일을 스테이징하는 방법을 설명합니다. 이 페이지의 단계에 따라 처리가 시작되기 전에 작업자 VM에서 파일을 동적으로 스테이징할 수도 있습니다.
작업자 VM에서 파일 스테이징
일부 템플릿에서는 extraFilesToStage
템플릿 매개변수를 사용하여 Dataflow 작업자 VM에 파일을 스테이징할 수 있습니다. 이 매개변수를 사용하여 데이터 처리가 시작되기 전에 작업자 VM에서 파일을 동적으로 스테이징합니다.
다음과 같은 경우에 이 매개변수를 사용할 수 있습니다.
- SSL 연결을 위해 각 작업자에 인증서 및 키 파일을 저장합니다.
- Dataflow에는 Secret Manager에 대한 기본 제공 지원이 포함되어 있지 않으므로 이 매개변수를 사용하여 Secret Manager 보안 비밀을 저장하고 액세스하도록 템플릿을 구성합니다.
이 매개변수는 일부 템플릿에서만 사용할 수 있습니다. 사용 중인 템플릿에서 매개변수를 사용할 수 있는지 확인하려면 Google 제공 Dataflow 스트리밍 템플릿 또는 Google 제공 Dataflow 일괄 템플릿에서 템플릿에 대한 템플릿 매개변수 표를 참조하세요.
이 매개변수를 사용하면 쉼표로 구분된 Cloud Storage 경로 또는 Secret Manager 보안 비밀이 작업자에게 전달되고 각 작업자의 /extra_files
디렉터리에 저장됩니다.
파일이 /extra_files
디렉터리에 저장되면 다른 매개변수가 이를 참조할 수 있습니다. 파일을 참조하려면 구성 속성에서 /extra_files
디렉터리를 기준으로 파일 경로를 지정합니다.
이 매개변수를 사용하여 전달된 모든 Cloud Storage 파일은 동일한 파일 이름으로 /extra_files
디렉터리에 저장됩니다.
Secret Manager 보안 비밀은 보안 비밀 이름이 파일 이름으로 사용된 상태로 /extra_files
디렉터리에 저장됩니다.
예를 들어 extraFilesToStage
를 다음 경로로 설정하면 파일이 각 작업자의 /extra_files
디렉터리에 file.txt
및 SECRET_ID라는 파일 이름으로 저장됩니다.
gs://BUCKET_NAME/file.txt,projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID
SSL 인증서 구성
JDBC를 사용하여 읽고 쓰는 템플릿이 있는 경우 extraFilesToStage
템플릿 매개변수를 사용하여 인증서를 작업자 VM의 로컬 파일로 스테이징한 다음 JDBC 연결 URL 또는 연결 속성에서 로컬 파일 이름을 참조할 수 있습니다.
JDBC SSL 연결은 데이터베이스에 따라 다릅니다. 이 섹션에서는 PostgreSQL 및 MySQL 데이터베이스의 예를 제공합니다.
Java 시스템 속성을 설정해야 하는 경우 JvmInitializer
를 사용하세요.
JvmInitializer
를 사용하여 모든 Dataflow Java 작업자에서 일회성 초기화를 실행할 수 있습니다.
PostgreSQL
PostgreSQL 데이터베이스의 SSL 연결에는 ssl
, sslmode
, sslcert
, sslkey
, sslrootcert
매개변수를 사용할 수 있습니다.
- 연결에서 SSL을 사용해야 하며 어떤 모드를 사용해야 하는지 지정하려면
ssl
및sslmode
매개변수를 사용합니다. - 클라이언트 유효성 검사에는
sslcert
및sslkey
매개변수를 사용합니다. - 서버 유효성 검사의 경우
sslrootcert
매개변수를 사용합니다.
PostgreSQL에 연결할 때 다음 매개변수를 설정합니다.
extraFilesToStage=gs://BUCKET_NAME/root_cert.crt,gs://BUCKET_NAME/cert.crt,gs://BUCKET_NAME/key.key
connectionUrl=jdbc:postgresql://HOST/DATABASE?ssl=true&sslrootcert=/extra_files/root_cert.crt&sslcert=/extra_files/cert.crt&sslkey=/extra_files/key.key&OTHER_PARAMETERS...
추가 PostgreSQL JDBC 구성 매개변수와 매개변수에 관한 자세한 내용은 JDBC PostgreSQL 문서의 연결 매개변수를 참고하세요.
MySQL
MySQL 데이터베이스의 SSL 연결에는 sslmode
, trustCertificateKeyStoreUrl
, clientCertificateKeyStoreUrl
매개변수를 사용할 수 있습니다.
- 연결에서 SSL을 사용해야 하며 어떤 모드를 사용해야 하는지 지정하려면
sslmode
매개변수를 사용합니다. - 클라이언트 유효성 검사의 경우
clientCertificateKeyStoreUrl
매개변수를 사용합니다. - 서버 유효성 검사의 경우
trustCertificateKeyStoreUrl
매개변수를 사용합니다.
MySQL에 연결할 때 다음 매개변수를 설정합니다.
extraFilesToStage=gs://BUCKET_NAME/truststore.jks,gs://BUCKET_NAME/cert.crt,gs://BUCKET_NAME/keystore.jks
connectionUrl=jdbc:mysql://HOST/DATABASE?sslmode=REQUIRED&trustCertificateKeyStoreUrl=file:/extra_files/truststore.jks&sslcert=file:/extra_files/keystore.jks&OTHER_PARAMETERS...
추가 MySQL JDBC 구성 매개변수와 매개변수에 관한 자세한 내용은 MySQL 문서의 보안 커넥터 페이지를 참고하세요.
SSL 연결 예
다음 예에서는 MySQL 데이터베이스에서 SSL 연결을 사용하여 Pub/Sub to JDBC 템플릿을 실행하는 방법을 보여줍니다.
#!/bin/bash
gcloud config set project PROJECT_ID
echo "Running template ..."
gcloud dataflow flex-template run my-job \
--template-file-gcs-location="gs://dataflow-templates-REGION_NAME/latest/flex/Pubsub_to_Jdbc" \
--region="REGION" \
--parameters= \
driverClassName="com.mysql.jdbc.Driver",\
connectionUrl="jdbc:mysql://HOST/DATABASE?sslmode=REQUIRED&trustCertificateKeyStoreUrl=file:/extra_files/truststore.jks&sslcert=file:/extra_files/keystore.jks",\
driverJars="gs://BUCKET_NAME/mysql.jar",\
statement="INSERT INTO tableName (column1, column2) VALUES (?,?)",\
inputSubscription="projects/PROJECT_ID/subscriptions/subscription",\
outputDeadletterTopic="projects/PROJECT_ID/topics/topic",\
extraFilesToStage="gs://BUCKET_NAME/truststore.jks,gs://BUCKET_NAME/cert.crt,gs://BUCKET_NAME/keystore.jks"