mu
mu copied to clipboard
Support Multiple ALB Path Patterns in mu.yml
Description
Currently mu only supports one path pattern for the service ALB, as the generation of the CloudFormation template passes your mu.yml pathPatterns:
array directly into the AWS::ElasticLoadBalancingV2::ListenerRule
> Conditions
> Values
property, which despite it's name only accepts one path pattern.
If mu's internals are refactored slightly to generate a new ElbHttp(s)PathListenerRule
for each path pattern in mu.yml and the pathPatterns:
node n mu.yml is changed from an array to a map, it should be possible to support this use case and preserve the ability to target rules in Cfn, eg:
service:
name: my-service
port: 80
pathPatterns:
app: /app*
assets: /assets*
Could become the following Cfn
ElbHttpPathListenerRule-app:
Condition: HasElbHttpPathListener
Properties:
Actions:
- TargetGroupArn:
Ref: ElbTargetGroup
Type: forward
Conditions:
- Field: path-pattern
Values:
Ref: /app*
ListenerArn:
Fn::ImportValue:
Fn::Sub: ${ElbHttpListenerArn}
Priority:
Ref: PathListenerRulePriority
Type: AWS::ElasticLoadBalancingV2::ListenerRule
ElbHttpPathListenerRule-assets:
Condition: HasElbHttpPathListener
Properties:
Actions:
- TargetGroupArn:
Ref: ElbTargetGroup
Type: forward
Conditions:
- Field: path-pattern
Values:
Ref: /assets*
ListenerArn:
Fn::ImportValue:
Fn::Sub: ${ElbHttpListenerArn}
Priority:
Ref: PathListenerRulePriority
Type: AWS::ElasticLoadBalancingV2::ListenerRule
I think the priority
should be specified for each path, so maybe:
pathPatterns:
- name: app
pathPattern: /app*
priority: 100
- name: assets
pathPattern: /assets*
priority: 200