问题描述
我正在尝试建立一个由应用程序负载均衡器、目标组和 ECS 服务组成的小型 Cloudformation 堆栈。但是,堆栈无法创建 WidgetsServiceLbListenerRule
资源并显示以下错误:
"Invalid request provided: AWS::ElasticLoadBalancingV2::ListenerRule Validation exception" (RequestToken: 98057bbb-ad4f-5f09-3e89-cc6b645c6e7f,HandlerErrorCode: InvalidRequest)
为什么无法创建侦听器规则?
这是相关的堆栈代码:
Resources:
# The load balancer
Lb:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Name: !Join ['',[!Ref Env,'-rest-api-lb-rev',!Ref Rev]]
Scheme: internet-facing
SecurityGroups:
- !Ref LbSg
subnets:
- Fn::ImportValue: !Sub "${VpcStackName}-Pubsubnet1Id"
- Fn::ImportValue: !Sub "${VpcStackName}-Pubsubnet2Id"
- Fn::ImportValue: !Sub "${VpcStackName}-Pubsubnet3Id"
Type: application
LbListener:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
DefaultActions:
- Type: fixed-response
FixedResponseConfig:
ContentType: text/plain
MessageBody: The specified route doesn't exist
StatusCode: 404
LoadBalancerArn: !Ref Lb
Port: 80
Protocol: HTTP
# Widgets service
WidgetsServiceLbTargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
HealthCheckPath: /actuator/health
Name: !Join ['','-widgets-rev',!Ref Rev]]
Port: 80
Protocol: HTTP
VpcId:
Fn::ImportValue: !Sub "${VpcStackName}-VpcId"
# THIS ONE FAILS TO CREATE
WidgetsServiceLbListenerRule:
Type: AWS::ElasticLoadBalancingV2::ListenerRule
Properties:
Actions:
- Type: forward
TargetGroupArn: !Ref WidgetsServiceLbTargetGroup
Conditions:
- Field: path-pattern
Values:
- '/widgets*'
ListenerArn: Ref !LbListener
Priority: 1
<ECS service and other assets omitted for brevity>
更多信息
- 我们的 AWS 账户中有几个使用几乎完全相同代码的现有堆栈。这些和这个之间没有任何有意义的区别,它们运行良好。
- 我创建了一个没有
WidgetsServiceLbListenerRule
的堆栈,然后尝试将其作为更改集重新添加。这也产生了同样的错误。 - 我能够使用以下 AWS CLI 命令成功创建规则:
aws --profile clexp elbv2 create-rule --listener-arn <arn> --priority 1 --conditions file://conditions.json --actions file://actions.json
conditions.json:
[{"Type": "forward","TargetGroupArn": "<arn>"}]
actions.json:
[{"Field": "path-pattern","Values": ["/widgets*"]}]
非常感谢任何帮助。
解决方法
代替:
ListenerArn: Ref !LbListener
应该是:
ListenerArn: !Ref LbListener