in java/alb-multi-rule-response/src/main/java/com/myorg/ALBProjectStack.java [35:151]
public ALBProjectStack(final Construct scope, final String id, final StackProps props) {
super(scope, id, props);
// property loader
PropertyLoader propertyLoad = new PropertyLoader();
// create ALB and all anciliarry services
Vpc vpc = Vpc.Builder.create(this, "VPC").build();
AutoScalingGroup asg =
AutoScalingGroup.Builder.create(this, "ASG")
.vpc(vpc)
.instanceType(InstanceType.of(InstanceClass.BURSTABLE2, InstanceSize.MICRO))
.userData(propertyLoad.getUserData())
.machineImage(new AmazonLinuxImage())
.build();
ApplicationLoadBalancer lb =
ApplicationLoadBalancer.Builder.create(this, "LB")
.vpc(vpc)
.internetFacing(Boolean.TRUE)
.loadBalancerName("myalb")
.build();
List<IApplicationLoadBalancerTarget> targets = new ArrayList<IApplicationLoadBalancerTarget>();
targets.add(asg);
ApplicationTargetGroup webTargetGroup =
new ApplicationTargetGroup(
this,
"MyTargetGroup",
ApplicationTargetGroupProps.builder()
.vpc(vpc)
.targetType(TargetType.INSTANCE)
.targets(targets)
.port(80)
.protocol(ApplicationProtocol.HTTP)
.build());
List<IApplicationTargetGroup> targetGroups = new ArrayList<IApplicationTargetGroup>();
targetGroups.add(webTargetGroup);
// default listener
ApplicationListener http =
ApplicationListener.Builder.create(this, "HTTP")
.port(80)
.protocol(ApplicationProtocol.HTTP)
.open(true)
.loadBalancer(lb)
.defaultTargetGroups(targetGroups)
.build();
// adding application listern rules
ApplicationListenerRule alrProdApi =
ApplicationListenerRule.Builder.create(this, "prodApi")
.conditions(Arrays.asList(
ListenerCondition.pathPatterns(Arrays.asList("/production")),
ListenerCondition.hostHeaders(Arrays.asList(propertyLoad.getRestAPIHostHeader())))
)
.priority(1)
.listener(http)
.build();
ApplicationListenerRule alrProdM =
ApplicationListenerRule.Builder.create(this, "prodMobile")
.conditions(Arrays.asList(
ListenerCondition.pathPatterns(Arrays.asList("/production")),
ListenerCondition.hostHeaders(Arrays.asList(propertyLoad.getRestMobileHostHeader())))
)
.priority(2)
.listener(http)
.build();
ApplicationListenerRule alrSandboxApi =
ApplicationListenerRule.Builder.create(this, "sandboxApi")
.conditions(Arrays.asList(
ListenerCondition.pathPatterns(Arrays.asList("/sandbox")),
ListenerCondition.hostHeaders(Arrays.asList(propertyLoad.getRestAPIHostHeader())))
)
.priority(3)
.listener(http)
.build();
ApplicationListenerRule alrSandboxM =
ApplicationListenerRule.Builder.create(this, "sandboxMobile")
.conditions(Arrays.asList(
ListenerCondition.pathPatterns(Arrays.asList("/sandbox")),
ListenerCondition.hostHeaders(Arrays.asList(propertyLoad.getRestMobileHostHeader())))
)
.priority(4)
.listener(http)
.build();
// adding fixed responses
alrProdApi.configureAction(
ListenerAction.fixedResponse(200, FixedResponseOptions.builder()
.contentType("application/json")
.messageBody(propertyLoad.getProdApiMessageBody())
.build()));
alrProdM.configureAction(
ListenerAction.fixedResponse(200, FixedResponseOptions.builder()
.contentType("application/json")
.messageBody(propertyLoad.getProdMobileMessageBody())
.build()));
alrSandboxApi.configureAction(
ListenerAction.fixedResponse(200, FixedResponseOptions.builder()
.contentType("application/json")
.messageBody(propertyLoad.getSandboxApiMessageBody())
.build()));
alrSandboxM.configureAction(
ListenerAction.fixedResponse(200, FixedResponseOptions.builder()
.contentType("application/json")
.messageBody(propertyLoad.getSandboxMobileMessageBody())
.build()));
}