CDK新栈添加现有ECS服务至已有负载均衡器的方案咨询
可行解决方案
两个限制本质都是CDK导入资源时返回的最小接口类型没有暴露全量高层方法,完全可以绕开类型约束实现需求,具体处理方式如下:
解决导入IEc2Service无法加入应用目标组的问题
- 不要尝试直接把导入得到的
IEc2Service实例传入目标组的addTargets方法,绕开高层方法的类型校验:- 在原有ECS服务栈导出服务属性时,除了服务ARN,额外导出服务关联的自动扩缩容组ID、服务使用的安全组ID、服务容器监听端口三个属性,作为新资源栈的输入参数
- 在新栈创建目标组时,直接用
asgTargets配置项传入上述拿到的自动扩缩容组ID、端口信息,不需要传入IEc2Service类型的实例,目标组就能正常绑定对应ECS服务的实例
解决导入IApplicationListener无法配置加权转发规则的问题
- 不要依赖
IApplicationListener接口提供的addTargets、addTargetGroups这类高层方法,直接使用L1级别的CfnListenerRule构造资源即可:- 从导入得到的
IApplicationListener实例上直接读取listenerArn属性,作为规则绑定的监听器标识 - 实例化
CfnListenerRule时,在动作配置块直接指定动作类型为weighted-forward,把要转发的多个目标组ARN、对应流量权重填到转发配置的目标组列表里,再按需求配置路径/主机头匹配条件、规则优先级即可
- 从导入得到的
部署前注意检查跨栈资源权限:要给新栈的执行角色授予对应监听器的规则编辑权限、目标组的关联权限,避免部署时出现权限拒绝错误。
内容的提问来源于stack exchange,提问作者erdavila
相关产品推荐
相关产品推荐

