SpringBoot建立SSH通道整合S3Elasticache(Redis),并实现Redis多库切换


一、背景

使用Spring Boot自带的redis框架,访问S3的Elasticache(Redis),并从Redis的多个DB中同时取数据。

1、问题

  • S3的Redis缓存服务,官方文档中指出Elasticache不能从外部访问(复杂、不成功)
  • 但是可以通过同一个VPC下的AWS EC2来进行访问
  • 本地开发调试的时候怎么去连redis呢?

在这里插入图片描述

在这里插入图片描述

2、解决

  • 可以建立ssh通道,通过EC2作为跳板机进行端口转发,来访问AWS的Redis缓存服务

二、建立SSH通道

1、pom引入依赖

        <!-- ssh -->
        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.55</version>
        </dependency>

2、创建sshconfig

  • ssh.yml
sshconfig:
  #监听的本地端口
  local-port: 10010
  
  #远程的redis地址
  remote-host: xxxxxxxxxxxx.cache.amazonaws.com.cn
  
  #远程redis端口号
  remote-port: 6379
  
  ssh:
  	#EC2实例的地址
    host: xxxxxxxxxxxxxx.compute.amazonaws.com.cn
    port: 22
    user: ubuntu
    password:
    #EC2的秘钥对
    pem_file_path: /root/.aws/xxxxxxx-devops.pem

3、SSHConnection 程序

  • 这样当从程序启动的时候,可以将createSSH() 写入静态代码快,直接加载开启通道
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import lombok.extern.slf4j.Slf4j;

import java.io.InputStream;
import java.util.Properties;

/**
 * Through EC2 as a jumpServer, create SSH tunnel to access redis service.
 */

@Slf4j
public class SSHConnection {
   
    private static Integer localPort;
    private static String remoteHost;
    private static int remotePort;
    private static String user;
    private static String password;
    private static String path;
    private static String host;
    private static int port;
    private static Session session = null;

    static {
   
        try {
   
            // Get ss configuration file path.
            InputStream is = SSHConnection.class.getClassLoader().getResourceAsStream("ssh.yml");
            Properties prop = new Properties();
            prop.load(is);

            // Get each value.
            localPort = Integer.valueOf(prop.getProperty("local-port"));
            remoteHost = prop.getProperty("remote-host");
            remotePort = Integer.valueOf(prop.getProperty("remote-port"));

            user = prop.getProperty("user");
            password = prop.getProperty("password");
            path = prop.getProperty("pem_file_path");
            host = prop.getProperty("host");
            port = Integer.valueOf(prop.getProperty("port"));
        } catch (Exception e) {
   
            log.error("File not found exception: " + e);
        }
    }

    /**
     * Create ssh connection and set port forwarding.
     */
    public static void createSSH() {
   
        JSch jsch = new JSch();
        try {
   
            if (path != null) {
   
                jsch.addIdentity(path);
            }
            session = jsch.getSession(user, host, port);
            if (path == null) {
   
                session.setPassword(password);
            }

            session.setConfig("StrictHostKeyChecking", "no");
            session.connect();
            int assinged_port = ses
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值