Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/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
Google cloud platform 从云运行连接到Memorystore_Google Cloud Platform_Google Cloud Run - Fatal编程技术网

Google cloud platform 从云运行连接到Memorystore

Google cloud platform 从云运行连接到Memorystore,google-cloud-platform,google-cloud-run,Google Cloud Platform,Google Cloud Run,我想在Google Cloud run上运行一个服务,使用Cloud Memorystore作为缓存 我在与Cloud Run相同的区域创建了一个Memorystore实例,并使用示例代码进行连接:这不起作用 接下来,我创建了一个无服务器的VPC访问连接器,但没有任何帮助。我在没有GKE集群的情况下使用Cloud Run,因此无法更改任何配置 有没有从云运行连接到Memorystore的方法?要将云运行(完全管理)连接到Memorystore,您需要使用称为“无服务器VPC访问”或“VPC连接器

我想在Google Cloud run上运行一个服务,使用Cloud Memorystore作为缓存

我在与Cloud Run相同的区域创建了一个Memorystore实例,并使用示例代码进行连接:这不起作用

接下来,我创建了一个无服务器的VPC访问连接器,但没有任何帮助。我在没有GKE集群的情况下使用Cloud Run,因此无法更改任何配置

有没有从云运行连接到Memorystore的方法?

要将云运行(完全管理)连接到Memorystore,您需要使用称为“无服务器VPC访问”或“VPC连接器”的机制

截至2020年5月,Cloud Run(完全管理)对无服务器VPC访问提供了测试版支持。有关更多信息,请参阅

使用此测试版的替代方案包括:

  • 使用,如果为Memorystore配置了群集,则在何处连接到Memorystore
  • 保持在完全管理的无服务器环境中,但使用GA版本的无服务器VPC访问功能

如果您的专有网络需要一些东西,您也可以启动

它比Redis云成本更高(特别是对于集群而言),但如果您必须将数据保留在VPC中,它是一个临时解决方案

在等待时-谷歌昨天表示将在近期发布公告-您可以通过GCE使用SSH隧道从云运行连接到Memorystore

基本方法如下

首先,在GCE上创建一个转发器实例

gcloud compute instances create vpc-forwarder --machine-type=f1-micro --zone=us-central1-a
不要忘记在防火墙策略中打开端口22(默认情况下是打开的)

然后通过Dockerfile安装gcloud CLI

下面是一个Rails应用程序的示例。Dockerfile使用脚本作为入口点

#使用官方的轻量级Ruby映像。
# https://hub.docker.com/_/ruby
来自ruby:2.5.5
#安装gcloud
长卷https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz >/tmp/google-cloud-sdk.tar.gz
运行mkdir-p/usr/local/gcloud\
&&tar-C/usr/local/gcloud-xvf/tmp/google-cloud-sdk.tar.gz\
&&/usr/local/gcloud/google cloud sdk/install.sh
环境路径$PATH:/usr/local/gcloud/googlecloudsdk/bin
#生成SSH隧道使用的SSH密钥(请参阅entrypoint.sh)
运行mkdir-p/home/.ssh&&ssh-keygen-b 2048-t rsa-f/home/.ssh/google\u compute\u engine-q-N“”
#安装捆绑机
运行gem更新--系统
运行gem安装bundler
#安装生产依赖项。
WORKDIR/usr/src/app
复制Gemfile Gemfile.lock/
环境包\u冻结=真
运行包安装
#将本地代码复制到容器映像。
复制/
#在容器启动时运行web服务。
CMD[“bash”,“entrypoint.sh”]
最后在entrypoint.sh脚本中打开到Redis的SSH隧道


# !/bin/bash
#内存存储配置
MEMORYSTORE_IP=10.0.0.5
MEMORYSTORE\u远程\u端口=6379
内存存储\本地\端口=6379
#转发器配置
转发器\u ID=专有网络转发器
转运商_区=us-central1-a
#在后台启动到Redis Memorystore的隧道
gcloudcomputessh\
--区域=${FORWARDER_zone}\
--ssh flag=“-N-L${MEMORYSTORE\u LOCAL\u PORT}:${MEMORYSTORE\u IP}:${MEMORYSTORE\u REMOTE\u PORT}”\
${FORWARDER\u ID}&
#运行迁移并启动Puma
bundle-exec-rake-db:migrate&&bundle-exec-puma-p 8080
使用上述解决方案,您的应用程序可以在
localhost:6379
上使用Memorystore

不过有一些注意事项

  • 这种方法要求在云运行服务上配置的服务帐户具有非常强大的
    角色/compute.instanceAdmin
    角色
  • SSH密钥被备份到映像中以加快容器启动时间。这并不理想
  • 如果转发器崩溃,则不会进行故障切换

  • 我已经在一篇文章中编写了一个更长、更详细的方法,该方法提高了总体安全性并添加了故障切换功能。该解决方案使用普通SSH而不是
    gcloud
    CLI。

    此VPC连接器支持功能是否有任何更新?(2019年10月)还没有,我会在发布消息时更新。所以没有办法在云上运行Memorystore吗/@Grayside任何粗略的预计到达时间,我们可以期待这个支持是可用的吗?这刚刚达到测试版之前的文件。文档发布后,我将更新答案。鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及为什么存在。始终引用重要链接中最相关的部分,以防无法访问目标站点或永久脱机。请参阅:。由于Google Cloud Run containers(尚未)无法连接到VPC,我不认为这在这种情况下会有什么帮助。