公司有两个AWS账号,有各自不同的 VPC 域。其中一个账号用到了 Aurora Postgres Serveless 的数据库。
现在另一个账号也需要用到posgres数据库,最直接的想法是在本域再搭一套postgres,或者ec2新加一台,上面安装posgres。
先去检查了一下已有的postgres serverless服务,结果使用率才23%,当下就直接想复用它了。
那能不能单独再开一个db,单独给第二个账号用呢,查了半天资料。可以的,但是吧,chatgpt真的是满嘴胡说八道,连带gemini也是。
aws家的东西都是开源经过魔改,跟网上占大多数的资料是不同的,这直接导致 chatgpt 按照网上大多数文档来进行推理,导致错误!!!
还有就是aws家的东西更新修改很快,最新的文档和之前的文档不同,也导致 chatpt 按照网上大多数的旧文档来进行推理,导致错误!!!
这个东西的架构图如上,右边的VPC里面连着 aurora 服务,它实际是target group的一个目标,然后上联到nlb,nlb再上联到endpoint service,对外提供服务.
然后左面VPC中建endpoint,通过PrivateLink连接到右边的EndpointService,这样通过私有的dns name和security group再进行控制,就可以直接连到右边的endpoint service服务资源了。
具体的做法步骤如下:
一、第一步,右边的VPC中
1、建立EndpointService
到VPC中,左边的Endpoint Services,点击:
点击Create endpoint service新建一个
名字:postgresql-serverless-endpoint-service,由于现在还没有nlb,需要再新建一个;点击Create new load balancer
2、建立nlb
点击:Create load balancer新建
这个类型,只能是nlb
我们这个nlb,不放在公网,不公开,所以选私有的Internal,只有IPV4,不提供IPV6.
网络选该VPC,子网选择三个private的子网
Security groups选择一下,这里rds-sg的inbound规则是允许TCP端口5432的进入,如果没有就新建一个SG
到最后了,居然还没有target group,那又要建一个了,点击Create target group建立
3、建立target group
名字叫做:postgres-target-group
我们选IP addresses,因为要连到后面的postgres服务
然后选好TCP,Port 5432, IPV4,VPC,其它保持缺省,然后建立
4、注册target group
target group建立好以后,我们要把Postgres的服务IP给注册上去
点击Register targets新建
我们把posgres serverless服务解析出来的IP地址天上去,端口也填上5432,然后注册上去即可。
注册好了以后会看到状态healthy
是绿色的。这样就ok了
4、完成nlb
target group好了以后,我们返回nlb,其余保持初始值,完成创建
5、完成endpoint service
nlb好了以后,我们返回endpoint service,刷新nlb,然后选中新建的nlb,然后下面不选Supported Regions,因为这个跨多个region的,我们两个vpc都在同一区域。
选中Acceptance required,意思是需要批准endpoint的连入请求,再选中支持IPV4,然后点击创建
5、赋予endpoint service访问权限
建好后,我们去查看这个Endpoint service服务
先点击,Allow principals 的 tab 页,然后点击Allow principals新建
添加另一个vpc的账号:arn:aws:iam::01234567981011:root
注意中间iam后面的一串数字,就是另一个账号登录后的accound id,也就是AWS_PROFILE
中值中的那串数字
这样另一个vpc域的所有资源都可以访问到这个endpoint service了
之后还要在Endpoint connections 的 tab 页中批准新连接。
同时把Service name给拷贝下来:com.amazonaws.vpce.ap-southeast-1.vpce-svc-11111111111
二、左边的VPC中
1、建立Endpoint
去到VPC,建endpoint,点击Create ednpoint新建
名字:my-endpoint-postgres
,选择类型是Endpoint services that use NLBs and GWLBs
然后Service settings输入右边VPC 上 endpoint service 拷贝的service name,进行验证:com.amazonaws.vpce.ap-southeast-1.vpce-svc-11111111111
然后就得去登录右边vpc的账号,在Endpoint connections中批准这个新连接。
然后再返回来,选VPC,选子网,选SG。这里我们同样选私网的三个子网。SG同样是inbound是TCP 放行5432端口,没有就新建一个
这样endpoint就建好了。查看它detail的tab页,拷贝下来DNS names
2、测试
我们在左边VPC的机器里起个shell,用dns name连接5432端口,测通即可
1telnet vpce-xxxx.vpce-svc-xxxx.ap-southeast-1.vpce.amazonaws.com 5432