如何从App Engine标准环境访问memorystore?

时间:2019-08-19 08:12:17

标签: google-app-engine redis google-cloud-platform google-cloud-memorystore

我们在Google App Engine标准环境上部署了我们的应用程序。我们需要从我们的应用程序引擎访问Memorystore(redis)。

在文档之后,我们创建无服务器VPC访问连接器并配置应用程序引擎:

<vpc-access-connector>
  <name>projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME</name>
</vpc-access-connector>

并设置IAM权限。但是我们仍然无法使用jedis连接到私有IP(如10.0.0.4)上的redis实例:

Jedis jedis = new Jedis("10.0.0.4");

1 个答案:

答案 0 :(得分:1)

如果与gcloud beta app deploy target/SNAPSHOT一起部署,它应该可以工作。

我准备并上传了sample in Github

我如何在新项目中做到这一点:

  1. 已启用App Engine,已选择地区us-central(对应于us-central1)
  2. 在us-central1地区创建的Memorystore实例
  3. 在区域us-central1中创建了VPC Connector(目前无法选择其他区域,因此App Engine和Memorystore都必须位于us-central1中)
  4. appengine-web.xml中添加了VPC连接器:
<vpc-access-connector>
  <name>projects/PROJECT_ID/locations/us-central1/connectors/CONNECTOR_NAME</name>
</vpc-access-connector>
  1. 修改后的pom.xml,添加了以下依赖项:
    <dependency>
       <groupId>redis.clients</groupId>
       <artifactId>jedis</artifactId>
       <version>3.1.0</version>
       <type>jar</type>
       <scope>compile</scope>
    </dependency>
  1. 修改了servlet.java文件:
import java.io.IOException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import redis.clients.jedis.Jedis;

@WebServlet(
    name = "Redis",
    description = "Redis: Connect to Redis",
    urlPatterns = "/redis"
)
public class RedisServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        String s;
        try{
                Jedis jedis = new Jedis("10.0.0.4");
                jedis.set("myKey", "It's alive");
                s = "Life test: "+ jedis.get("myKey");
        }catch(Exception e){s = "Couldn't connect "; e.printStackTrace();}

       resp.getWriter().write(s);
  }
}
  1. 运行以下内容进行打包和部署:

mvn package(这将创建一个“目标”文件夹)

gcloud beta app deploy target/ARTIFACT_ID-1.0-SNAPSHOT

请注意,它仍处于测试版中,可能无法十分可靠地工作。