walkthroughs/howto-servicediscovery-cloudmap/mesh.yaml (137 lines of code) (raw):
---
Resources:
Mesh:
Type: AWS::AppMesh::Mesh
Properties:
MeshName: !Ref AWS::StackName
ColorTellerBlueNode:
Type: AWS::AppMesh::VirtualNode
DependsOn:
- Mesh
Properties:
MeshName: !Ref AWS::StackName
VirtualNodeName: "colorteller-blue-node"
Spec:
ServiceDiscovery:
AWSCloudMap:
ServiceName: "colorteller"
NamespaceName: !Sub "${AWS::StackName}.local"
Attributes:
- Key: "ECS_TASK_DEFINITION_FAMILY"
Value: "blue"
Listeners:
- PortMapping:
Port: 9080
Protocol: http
HealthCheck:
Protocol: http
Path: "/ping"
HealthyThreshold: 2
UnhealthyThreshold: 2
TimeoutMillis: 2000
IntervalMillis: 5000
ColorTellerGreenNode:
Type: AWS::AppMesh::VirtualNode
DependsOn:
- Mesh
Properties:
MeshName: !Ref AWS::StackName
VirtualNodeName: "colorteller-green-node"
Spec:
ServiceDiscovery:
AWSCloudMap:
ServiceName: "colorteller"
NamespaceName: !Sub "${AWS::StackName}.local"
Attributes:
- Key: "ECS_TASK_DEFINITION_FAMILY"
Value: "green"
Listeners:
- PortMapping:
Port: 9080
Protocol: http
HealthCheck:
Protocol: http
Path: "/ping"
HealthyThreshold: 2
UnhealthyThreshold: 2
TimeoutMillis: 2000
IntervalMillis: 5000
ColorGateway:
Type: AWS::AppMesh::VirtualGateway
DependsOn:
- Mesh
Properties:
MeshName: !Ref AWS::StackName
VirtualGatewayName: "colorgateway"
Spec:
Listeners:
- PortMapping:
Port: 9080
Protocol: http
HealthCheck:
Protocol: http
Path: "/ping"
HealthyThreshold: 2
UnhealthyThreshold: 2
TimeoutMillis: 2000
IntervalMillis: 5000
ColorGatewayRoute:
Type: AWS::AppMesh::GatewayRoute
DependsOn:
- ColorTellerService
- ColorGateway
Properties:
GatewayRouteName: gatewayroute
MeshName: !Ref AWS::StackName
Spec:
HttpRoute:
Action:
Target:
VirtualService:
VirtualServiceName: !GetAtt ColorTellerService.VirtualServiceName
Match:
Prefix: /
VirtualGatewayName: colorgateway
ColorTellerService:
Type: AWS::AppMesh::VirtualService
DependsOn:
- ColorTellerRouter
Properties:
MeshName: !Ref AWS::StackName
VirtualServiceName: !Sub "colorteller.${AWS::StackName}.local"
Spec:
Provider:
VirtualRouter:
VirtualRouterName: "colorteller-virtual-router"
ColorTellerRouter:
Type: AWS::AppMesh::VirtualRouter
DependsOn:
- Mesh
Properties:
MeshName: !Ref AWS::StackName
VirtualRouterName: "colorteller-virtual-router"
Spec:
Listeners:
- PortMapping:
Port: 9080
Protocol: http
ColorTellerRoute:
Type: AWS::AppMesh::Route
DependsOn:
- ColorTellerRouter
- ColorTellerBlueNode
- ColorTellerGreenNode
Properties:
MeshName: !Ref AWS::StackName
VirtualRouterName: "colorteller-virtual-router"
RouteName: "colorteller-route"
Spec:
HttpRoute:
Match:
Prefix: "/"
Action:
WeightedTargets:
- VirtualNode: "colorteller-blue-node"
Weight: 50
- VirtualNode: "colorteller-green-node"
Weight: 50