我们的应用可能分布在不同VPC,甚至可能在另一个 AWS 账户中运行,运行着BI或ETL工具。
使用Redshift managed VPC Endpoints
(背后是AWS PrivateLink)能连接到VPC内的私有Redshift 集群,可以从同一AWS 账户或另一个 AWS 账户的VPC走内网访问 Redshift,无需使用公共 IP。
当创建Redshift managed VPC Endpoints
时,endpoint将显示为目标 VPC(连接Redshift的VPC) 中的私有 IP 地址的ENI。
本节我们将实现以下网络架构,上一节我们在私有子网里创建了Redshift,本节我们创建一个具有公网和私网的VPC,并在里面创建Managed VPC Endpoints
,通过它连接到Redshift:
在VPC页面创建VPC,命名为redshift-connect
, IP CIDR为172.31.0.0/16
, 具有两个公网和两个私网:
创建完成后,记下来private1 subnet
的CIDR,用于下一步在Redshift中创建Managed Endpoints
:
进入public1 subnet
,开启自动分配公网IP,我们将在后面创建一台EC2, 并登录到EC2通过Managed Endpoint连接到Redshift:
编辑子网设置:
开启自动分配公网IP:
为VPC创建出来的默认安全组(default)上添加一条规则,允许本VPC网段访问5439
端口(后面在同一vpc上创建EC2访问Endpoint):
使用Redshift-managed VPC endpoint
时,一个前提条件是开启Cluster Relocation,它可以让集群转移到另一个AZ中。在Redshift的Maintenance -> backup details
页面,开启Cluster Relocation
:
刚才我们创建了一个Redshift connect
VPC,我们要为这个VPC创建一个subnet group:
为这个subnet group命名为redshift-connect-subnet-group
,添加VPC的第一个私网(上面创建VPC的步骤已经复制出来CIDR)
进入Redshift的configurations
页面,点击Create endpoint
:
n the Endpoint settings section, give it a name as redshift-managed-endpoint
and specify the target account and choose the Target VPC and subnet group to deploy the endpoint against.
命名为redshift-managed-endpoint
, 选择自己的帐号,VPC选择本节新创建的,subnet group选择上面创建的,安全组选择default(我们已经提前放开5439端口对本VPC CIDR的访问):
点击创建,创建完成后,显示出来Endpoint URL和JDBC URL等:
我们在redshift-connect
VPC的公网里创建一台EC2或Cloud 9,然后测试连接到Redshift。
这里以创建Cloud 9为例:
VPC选择redshift-connect-vpc
, 子网选择第一个公网(我们已经开启自动分配IP):
创建完成后,打开Cloud 9页面,然后安装PSQL工具:
sudo amazon-linux-extras install postgresql10
通过Redshift-managed VPC endpoint
连接到集群:
psql -h redshift-managed-endpoint-endpoint-ltcxd3jclql1y0hf3wbh.czi0m4pk0wjc.us-west-2.redshift.amazonaws.com -U awsuser -p 5439 -d dev # 注意要显示使用5439端口,默认会用5432端口连接
测试可以连接成功,并执行sql命令:
假设我们的connect VPC在自己帐号或其他帐号,我们也可以通过VPC Peering将两个VPC打通,然后连接到Redshift上面去,使用VPC Peering和Redshift-managed VPC endpoint
,两种方式有何区别呢?
Redshift-managed VPC endpoint
优点: 如果使用VPC Peering,我们还要配置路由表,另外两个VPC完全打通会带来额外的安全风险。而使用Redshift-managed VPC endpoint
,不用配路由,也足够安全,connect VPC访问不到Redshift VPC中其他的资源。Redshift-managed VPC endpoint
缺点:VPC Peering只收0.01$/GB的流量费,而且同AZ不收费。Redshift-managed VPC endpoint
除了每小时的0.01$外,还收0.01$/GB的流量费,同AZ也收费。参考: https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-cross-vpc.html