如何 运行 GCP 上受防护的 VM 中的模板化 Cloud Dataflow 作业

How to run a templated Cloud Dataflow job in a Shielded VMs on GCP

根据 public documentation,可以在 GCP 上的受防护 VM 中 运行 Cloud Dataflow 作业。

对于非模板作业,如 Quick Start manual for Java 中所述,可以通过提交 --dataflowServiceOptions=enable_secure_boot 标志来实现,如下所示:

mvn -Pdataflow-runner compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount -Djava.util.logging.config.file=logging.properties -Dexec.args="--project=${PROJECT_ID} \
--gcpTempLocation=gs://${BUCKET_NAME}/temp/ \
--output=gs://${BUCKET_NAME}/output \
--runner=DataflowRunner \
--region=${REGION} \
--dataflowServiceOptions=enable_secure_boot"

但是当使用模板作业时,例如开始使用 gcloud 或 Terraform:

gcloud dataflow jobs run word-count --gcs-location gs://dataflow-templates-europe-west3/latest/Word_Count --region ${REGION} --staging-location gs://${BUCKET_NAME}/temp --parameters inputFile=gs://${BUCKET_NAME}/sample.txt,output=gs://${BUCKET_NAME}/sample-output

启动的 VM 未受保护(在 运行 时查看其“安全启动”标志时)。

我如何运行 GCP 上受防护的 VM 中的模板化 Dataflow 作业?

gcloud

要在受防护的 VM 上部署 Dataflow 作业,必须将 additional-experiments 标志设置为 enable_secure_boot。我对此进行了测试,并能够看到安全启动在作业运行时处于打开状态。

gcloud dataflow jobs run word-count-on-shielded-vm-from-gcloud --project=project-id \
--gcs-location gs://dataflow-templates-europe-west3/latest/Word_Count \
--region us-central1 --staging-location gs://bucket-name/temp \
--parameters inputFile=gs://apache-beam-samples/shakespeare/kinglear.txt,output=gs://bucket-name/sample-output \
--additional-experiments=enable_secure_boot

地形

通过将带有 enable_secure_bootadditional_experiments 参数添加到 google_dataflow_job 资源,Dataflow 作业可以部署在受保护的 VM 上。

resource "google_dataflow_job" "word_count_job" {
  name              = "sample-dataflow-wordcount-job"
  template_gcs_path = "gs://dataflow-templates-europe-west3/latest/Word_Count"
  temp_gcs_location = "${google_storage_bucket.bucket.url}/temp"
  parameters = {
    inputFile = "${google_storage_bucket.bucket.url}/input_file.txt",
    output = "${google_storage_bucket.bucket.url}/word_count.txt"
  }
  additional_experiments = [
    "enable_secure_boot"
  ]
}