Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在私有子网上运行数据流python?_Python_Google Cloud Dataflow_Apache Beam - Fatal编程技术网

如何在私有子网上运行数据流python?

如何在私有子网上运行数据流python?,python,google-cloud-dataflow,apache-beam,Python,Google Cloud Dataflow,Apache Beam,Apache Beam 2.1.0增加了对在私有子网上的Dataflow runner上提交作业的支持,并且没有公共IP,这是我们需要满足防火墙规则的。我计划使用squid代理访问apt get,pip,等等来安装python依赖项;代理实例已经在运行,我们在setup.py脚本中设置代理 python $DIR/submit.py \ --runner DataflowRunner \ --no_use_public_ips \ --subnetwor

Apache Beam 2.1.0增加了对在私有子网上的Dataflow runner上提交作业的支持,并且没有公共IP,这是我们需要满足防火墙规则的。我计划使用squid代理访问
apt get
pip
,等等来安装python依赖项;代理实例已经在运行,我们在setup.py脚本中设置代理

python $DIR/submit.py \
       --runner DataflowRunner \
       --no_use_public_ips \
       --subnetwork regions/us-central1/subnetworks/$PRIVATESUBNET \
       --staging_location $BUCKET/staging \
       --temp_location $BUCKET/temp \
       --project $PROJECT \
       --setup_file $DIR/setup.py \
       --job_name $JOB_NAME
当我尝试通过pythonapi运行时,我在worker启动期间出错,然后才有机会启用代理。在我看来,每个工作人员都会首先尝试安装dataflow sdk:

在此期间,它尝试更新
请求
,但未能连接到
pip


我的代码目前还没有执行,因此在设置代理之前,我无法找到避免此错误的方法。有没有办法在私有子网上启动dataflow python workers?

我用NAT网关而不是代理解决了这个问题。按照-下的说明,我必须编辑以下步骤之一,以便通过网关自动路由Dataflow worker实例:

gcloud compute routes create no-ip-internet-route --network my-network \
    --destination-range 0.0.0.0/0 \
    --next-hop-instance nat-gateway \
    --next-hop-instance-zone us-central1-a \
    --tags dataflow --priority 800
我使用了标签
dataflow
,而不是
no-ip
,这是所有数据流工作者的网络标签


在这种情况下,NAT网关似乎比代理更容易解决,因为它将路由流量,而无需配置工作者。

现在仍然可以使用云NAT来完成此操作,如下所示:

$REGION\u ID
是任何GCP区域,例如
us-central1

如果您需要将静态IP地址分配给云NAT(也许,在防火墙规则中将NAT IP地址列入白名单),您也可以这样做:

gcloud compute addresses create nat-ip-address --network=$NETWORK_NAME

gcloud compute routers nats create nat-config \
   --router=nat-router \
   --nat-custom-subnet-ip-ranges=$SUBNET \
   --nat-external-ip-pool=nat-ip-address # from above
   --region=$REGION_ID
资源:

gcloud compute addresses create nat-ip-address --network=$NETWORK_NAME

gcloud compute routers nats create nat-config \
   --router=nat-router \
   --nat-custom-subnet-ip-ranges=$SUBNET \
   --nat-external-ip-pool=nat-ip-address # from above
   --region=$REGION_ID