Parameters: AppMeshMeshName: Type: String Description: Mesh name ProjectName: Type: String Description: Project name to link stacks Resources: Mesh: Type: AWS::AppMesh::Mesh Properties: MeshName: !Sub '${AppMeshMeshName}' Spec: ServiceDiscovery: IpPreference: "IPv4_ONLY" ColorGateway: Type: AWS::AppMesh::VirtualGateway Properties: MeshName: !GetAtt Mesh.MeshName Spec: Listeners: - PortMapping: Port: 9080 Protocol: http VirtualGatewayName: colorgateway-vg RedGatewayRoute: DependsOn: - ColorGateway - VirtualServiceRed Type: AWS::AppMesh::GatewayRoute Properties: GatewayRouteName: colorgateway-route-red MeshName: !GetAtt Mesh.MeshName Spec: HttpRoute: Match: Prefix: "/red" Action: Target: VirtualService: VirtualServiceName: 'colorteller-1.default.svc.cluster.local' VirtualGatewayName: !GetAtt ColorGateway.VirtualGatewayName OrangeGatewayRoute: DependsOn: - ColorGateway - VirtualServiceOrange Type: AWS::AppMesh::GatewayRoute Properties: GatewayRouteName: colorgateway-route-orange MeshName: !GetAtt Mesh.MeshName Spec: HttpRoute: Match: Prefix: "/orange" Action: Target: VirtualService: VirtualServiceName: 'colorteller-2.default.svc.cluster.local' VirtualGatewayName: !GetAtt ColorGateway.VirtualGatewayName YellowGatewayRoute: DependsOn: - ColorGateway - VirtualServiceYellow Type: AWS::AppMesh::GatewayRoute Properties: GatewayRouteName: colorgateway-route-yellow MeshName: !GetAtt Mesh.MeshName Spec: HttpRoute: Match: Prefix: "/yellow" Action: Target: VirtualService: VirtualServiceName: 'colorteller-3.default.svc.cluster.local' VirtualGatewayName: !GetAtt ColorGateway.VirtualGatewayName GreenGatewayRoute: DependsOn: - ColorGateway - VirtualServiceGreen Type: AWS::AppMesh::GatewayRoute Properties: GatewayRouteName: colorgateway-route-green MeshName: !GetAtt Mesh.MeshName Spec: HttpRoute: Match: Prefix: "/green" Action: Target: VirtualService: VirtualServiceName: 'colorteller-4.default.svc.cluster.local' VirtualGatewayName: !GetAtt ColorGateway.VirtualGatewayName BlueGatewayRoute: DependsOn: - ColorGateway - VirtualServiceBlue Type: AWS::AppMesh::GatewayRoute Properties: GatewayRouteName: colorgateway-route-blue MeshName: !GetAtt Mesh.MeshName Spec: HttpRoute: Match: Prefix: "/blue" Action: Target: VirtualService: VirtualServiceName: 'colorteller-5.default.svc.cluster.local' VirtualGatewayName: !GetAtt ColorGateway.VirtualGatewayName PurpleGatewayRoute: DependsOn: - ColorGateway - VirtualServicePurple Type: AWS::AppMesh::GatewayRoute Properties: GatewayRouteName: colorgateway-route-purple MeshName: !GetAtt Mesh.MeshName Spec: HttpRoute: Match: Prefix: "/purple" Action: Target: VirtualService: VirtualServiceName: 'colorteller-6.default.svc.cluster.local' VirtualGatewayName: !GetAtt ColorGateway.VirtualGatewayName ColorServerRedNode: Type: AWS::AppMesh::VirtualNode Properties: MeshName: !GetAtt Mesh.MeshName VirtualNodeName: colorteller-red-vn Spec: Listeners: - PortMapping: Port: 9080 Protocol: http HealthCheck: HealthyThreshold: 2 IntervalMillis: 5000 TimeoutMillis: 2000 UnhealthyThreshold: 2 Path: '/ping' Protocol: http ServiceDiscovery: AWSCloudMap: NamespaceName: 'default.svc.cluster.local.cloud' ServiceName: colorteller-red IpPreference: "IPv4_PREFERRED" ColorServerOrangeNode: Type: AWS::AppMesh::VirtualNode Properties: MeshName: !GetAtt Mesh.MeshName VirtualNodeName: colorteller-orange-vn Spec: Listeners: - PortMapping: Port: 9080 Protocol: http HealthCheck: HealthyThreshold: 2 IntervalMillis: 5000 TimeoutMillis: 2000 UnhealthyThreshold: 2 Path: '/ping' Protocol: http ServiceDiscovery: AWSCloudMap: NamespaceName: 'default.svc.cluster.local.cloud' ServiceName: colorteller-orange IpPreference: "IPv4_PREFERRED" ColorServerYellowNode: Type: AWS::AppMesh::VirtualNode Properties: MeshName: !GetAtt Mesh.MeshName VirtualNodeName: colorteller-yellow-vn Spec: Listeners: - PortMapping: Port: 9080 Protocol: http HealthCheck: HealthyThreshold: 2 IntervalMillis: 5000 TimeoutMillis: 2000 UnhealthyThreshold: 2 Path: '/ping' Protocol: http ServiceDiscovery: AWSCloudMap: NamespaceName: 'default.svc.cluster.local.cloud' ServiceName: colorteller-yellow IpPreference: "IPv6_PREFERRED" ColorServerGreenNode: Type: AWS::AppMesh::VirtualNode Properties: MeshName: !GetAtt Mesh.MeshName VirtualNodeName: colorteller-green-vn Spec: Listeners: - PortMapping: Port: 9080 Protocol: http HealthCheck: HealthyThreshold: 2 IntervalMillis: 5000 TimeoutMillis: 2000 UnhealthyThreshold: 2 Path: '/ping' Protocol: http ServiceDiscovery: AWSCloudMap: NamespaceName: 'default.svc.cluster.local.cloud' ServiceName: colorteller-green ColorServerBlueNode: Type: AWS::AppMesh::VirtualNode Properties: MeshName: !GetAtt Mesh.MeshName VirtualNodeName: colorteller-blue-vn Spec: Listeners: - PortMapping: Port: 9080 Protocol: http HealthCheck: HealthyThreshold: 2 IntervalMillis: 5000 TimeoutMillis: 2000 UnhealthyThreshold: 2 Path: '/ping' Protocol: http ServiceDiscovery: AWSCloudMap: NamespaceName: 'default.svc.cluster.local.cloud' ServiceName: colorteller-blue ColorServerPurpleNode: Type: AWS::AppMesh::VirtualNode Properties: MeshName: !GetAtt Mesh.MeshName VirtualNodeName: colorteller-purple-vn Spec: Listeners: - PortMapping: Port: 9080 Protocol: http HealthCheck: HealthyThreshold: 2 IntervalMillis: 5000 TimeoutMillis: 2000 UnhealthyThreshold: 2 Path: '/ping' Protocol: http ServiceDiscovery: AWSCloudMap: NamespaceName: 'default.svc.cluster.local.cloud' ServiceName: colorteller-purple VirtualServiceRed: DependsOn: - ColorServerRedNode Type: AWS::AppMesh::VirtualService Properties: MeshName: !GetAtt Mesh.MeshName VirtualServiceName: 'colorteller-1.default.svc.cluster.local' Spec: Provider: VirtualNode: VirtualNodeName: colorteller-red-vn VirtualServiceOrange: DependsOn: - ColorServerOrangeNode Type: AWS::AppMesh::VirtualService Properties: MeshName: !GetAtt Mesh.MeshName VirtualServiceName: 'colorteller-2.default.svc.cluster.local' Spec: Provider: VirtualNode: VirtualNodeName: colorteller-orange-vn VirtualServiceYellow: DependsOn: - ColorServerYellowNode Type: AWS::AppMesh::VirtualService Properties: MeshName: !GetAtt Mesh.MeshName VirtualServiceName: 'colorteller-3.default.svc.cluster.local' Spec: Provider: VirtualNode: VirtualNodeName: colorteller-yellow-vn VirtualServiceGreen: DependsOn: - ColorServerGreenNode Type: AWS::AppMesh::VirtualService Properties: MeshName: !GetAtt Mesh.MeshName VirtualServiceName: 'colorteller-4.default.svc.cluster.local' Spec: Provider: VirtualNode: VirtualNodeName: colorteller-green-vn VirtualServiceBlue: DependsOn: - ColorServerBlueNode Type: AWS::AppMesh::VirtualService Properties: MeshName: !GetAtt Mesh.MeshName VirtualServiceName: 'colorteller-5.default.svc.cluster.local' Spec: Provider: VirtualNode: VirtualNodeName: colorteller-blue-vn VirtualServicePurple: DependsOn: - ColorServerPurpleNode Type: AWS::AppMesh::VirtualService Properties: MeshName: !GetAtt Mesh.MeshName VirtualServiceName: 'colorteller-6.default.svc.cluster.local' Spec: Provider: VirtualNode: VirtualNodeName: colorteller-purple-vn