Use service registry for discovery

This commit is contained in:
Cedric Ziel
2020-05-12 09:51:23 +02:00
parent 8c6ee60e36
commit 093b9b27a6

View File

@@ -59,7 +59,7 @@ Parameters:
Default: nginx
Description: The url of a docker image that contains the application process that
will handle the traffic for this service
ContainerPort:
WebContainerPort:
Type: Number
Default: 8080
Description: What port number the application inside the docker container is binding to
@@ -136,11 +136,23 @@ Parameters:
Default: ""
Description: (Optional) An IAM role to give the service's containers if the code within needs to
access other AWS resources like S3 buckets, DynamoDB tables, etc
WebLogGroup:
Type: String
Default: "rs-web"
Conditions:
HasCustomRole: !Not [ !Equals [!Ref 'Role', ''] ]
Resources:
Registry:
Type: AWS::ServiceDiscovery::PrivateDnsNamespace
Properties:
Description: RobotShop registry for ecs
Name: robot-shop
Vpc:
Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'VPCId']]
# MongoDB service
MongoDbTaskDefinition:
Type: AWS::ECS::TaskDefinition
@@ -157,7 +169,7 @@ Resources:
- Name: !Ref 'MongoDbServiceName'
Cpu: !Ref 'ContainerCpu'
Memory: !Ref 'ContainerMemory'
Image: robotshop/rs-mongodb
Image: robotshop/rs-mongodb:0.4.17
PortMappings:
- ContainerPort: !Ref 'MongoDbContainerPort'
LogConfiguration:
@@ -245,6 +257,7 @@ Resources:
Family: !Ref 'CatalogueServiceName'
Cpu: !Ref 'ContainerCpu'
Memory: !Ref 'ContainerMemory'
NetworkMode: awsvpc
TaskRoleArn:
Fn::If:
- 'HasCustomRole'
@@ -254,21 +267,45 @@ Resources:
- Name: !Ref 'CatalogueServiceName'
Cpu: !Ref 'ContainerCpu'
Memory: !Ref 'ContainerMemory'
Image: robotshop/rs-catalogue
Image: robotshop/rs-catalogue:0.4.17
PortMappings:
- ContainerPort: !Ref 'CatalogueContainerPort'
LogConfiguration:
LogDriver: json-file
CatalogueService:
Type: AWS::ECS::Service
DependsOn: LoadBalancerRule
DependsOn: [LoadBalancerRule, CatalogueRegistryService]
Properties:
ServiceName: !Ref 'CatalogueServiceName'
NetworkConfiguration:
AwsvpcConfiguration:
Subnets:
- Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'PrivateSubnetOne']]
- Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'PrivateSubnetTwo']]
ServiceRegistries:
- ContainerName: !Ref 'CatalogueServiceName'
ContainerPort: !Ref 'CatalogueContainerPort'
RegistryArn: !GetAtt CatalogueRegistryService.Arn
Cluster:
Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'ClusterName']]
DesiredCount: 1
TaskDefinition: !Ref 'CatalogueTaskDefinition'
CatalogueRegistryService:
Type: AWS::ServiceDiscovery::Service
DependsOn: Registry
Properties:
Name: !Ref 'CatalogueServiceName'
DnsConfig:
NamespaceId: !GetAtt Registry.Id
DnsRecords:
- TTL: 10
Type: SRV
- TTL: 10
Type: A
RoutingPolicy: WEIGHTED
# user service
UserTaskDefinition:
@@ -278,6 +315,7 @@ Resources:
Family: !Ref 'UserServiceName'
Cpu: !Ref 'ContainerCpu'
Memory: !Ref 'ContainerMemory'
NetworkMode: awsvpc
TaskRoleArn:
Fn::If:
- 'HasCustomRole'
@@ -287,21 +325,45 @@ Resources:
- Name: !Ref 'UserServiceName'
Cpu: !Ref 'ContainerCpu'
Memory: !Ref 'ContainerMemory'
Image: robotshop/rs-user
Image: robotshop/rs-user:0.4.17
PortMappings:
- ContainerPort: !Ref 'UserContainerPort'
LogConfiguration:
LogDriver: json-file
UserService:
Type: AWS::ECS::Service
DependsOn: LoadBalancerRule
DependsOn: [LoadBalancerRule, UserRegistryService]
Properties:
ServiceName: !Ref 'UserServiceName'
NetworkConfiguration:
AwsvpcConfiguration:
Subnets:
- Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'PrivateSubnetOne']]
- Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'PrivateSubnetTwo']]
ServiceRegistries:
- ContainerName: !Ref 'UserServiceName'
ContainerPort: !Ref 'UserContainerPort'
RegistryArn: !GetAtt UserRegistryService.Arn
Cluster:
Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'ClusterName']]
DesiredCount: 1
TaskDefinition: !Ref 'UserTaskDefinition'
UserRegistryService:
Type: AWS::ServiceDiscovery::Service
DependsOn: Registry
Properties:
Name: !Ref 'UserServiceName'
DnsConfig:
NamespaceId: !GetAtt Registry.Id
DnsRecords:
- TTL: 10
Type: SRV
- TTL: 10
Type: A
RoutingPolicy: WEIGHTED
# cart service
CartTaskDefinition:
@@ -311,6 +373,7 @@ Resources:
Family: !Ref 'CartServiceName'
Cpu: !Ref 'ContainerCpu'
Memory: !Ref 'ContainerMemory'
NetworkMode: awsvpc
TaskRoleArn:
Fn::If:
- 'HasCustomRole'
@@ -320,21 +383,45 @@ Resources:
- Name: !Ref 'CartServiceName'
Cpu: !Ref 'ContainerCpu'
Memory: !Ref 'ContainerMemory'
Image: robotshop/rs-cart
Image: robotshop/rs-cart:0.4.17
PortMappings:
- ContainerPort: !Ref 'CartContainerPort'
LogConfiguration:
LogDriver: json-file
CartService:
Type: AWS::ECS::Service
DependsOn: LoadBalancerRule
DependsOn: [LoadBalancerRule, CartRegistryService]
Properties:
ServiceName: !Ref 'CartServiceName'
NetworkConfiguration:
AwsvpcConfiguration:
Subnets:
- Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'PrivateSubnetOne']]
- Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'PrivateSubnetTwo']]
ServiceRegistries:
- ContainerName: !Ref 'CartServiceName'
ContainerPort: !Ref 'CartContainerPort'
RegistryArn: !GetAtt CartRegistryService.Arn
Cluster:
Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'ClusterName']]
DesiredCount: 1
TaskDefinition: !Ref 'CartTaskDefinition'
CartRegistryService:
Type: AWS::ServiceDiscovery::Service
DependsOn: Registry
Properties:
Name: !Ref 'CartServiceName'
DnsConfig:
NamespaceId: !GetAtt Registry.Id
DnsRecords:
- TTL: 10
Type: SRV
- TTL: 10
Type: A
RoutingPolicy: WEIGHTED
# mysql service
MySqlTaskDefinition:
@@ -356,7 +443,7 @@ Resources:
Capabilities:
Add:
- NET_ADMIN
Image: robotshop/rs-mysql-db
Image: robotshop/rs-mysql-db:0.4.17
PortMappings:
- ContainerPort: !Ref 'MySqlContainerPort'
LogConfiguration:
@@ -380,6 +467,7 @@ Resources:
Family: !Ref 'ShippingServiceName'
Cpu: !Ref 'ContainerCpu'
Memory: !Ref 'ContainerMemory'
NetworkMode: awsvpc
TaskRoleArn:
Fn::If:
- 'HasCustomRole'
@@ -389,21 +477,45 @@ Resources:
- Name: !Ref 'ShippingServiceName'
Cpu: !Ref 'ContainerCpu'
Memory: !Ref 'ContainerMemory'
Image: robotshop/rs-shipping
Image: robotshop/rs-shipping:0.4.17
PortMappings:
- ContainerPort: !Ref 'ShippingContainerPort'
LogConfiguration:
LogDriver: json-file
ShippingService:
Type: AWS::ECS::Service
DependsOn: LoadBalancerRule
DependsOn: [LoadBalancerRule, ShippingRegistryService]
Properties:
ServiceName: !Ref 'ShippingServiceName'
NetworkConfiguration:
AwsvpcConfiguration:
Subnets:
- Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'PrivateSubnetOne']]
- Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'PrivateSubnetTwo']]
ServiceRegistries:
- ContainerName: !Ref 'ShippingServiceName'
ContainerPort: !Ref 'ShippingContainerPort'
RegistryArn: !GetAtt ShippingRegistryService.Arn
Cluster:
Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'ClusterName']]
DesiredCount: 1
TaskDefinition: !Ref 'ShippingTaskDefinition'
ShippingRegistryService:
Type: AWS::ServiceDiscovery::Service
DependsOn: Registry
Properties:
Name: !Ref 'ShippingServiceName'
DnsConfig:
NamespaceId: !GetAtt Registry.Id
DnsRecords:
- TTL: 10
Type: SRV
- TTL: 10
Type: A
RoutingPolicy: WEIGHTED
# ratings service
RatingsTaskDefinition:
@@ -413,6 +525,7 @@ Resources:
Family: !Ref 'RatingsServiceName'
Cpu: !Ref 'ContainerCpu'
Memory: !Ref 'ContainerMemory'
NetworkMode: awsvpc
TaskRoleArn:
Fn::If:
- 'HasCustomRole'
@@ -422,21 +535,45 @@ Resources:
- Name: !Ref 'RatingsServiceName'
Cpu: !Ref 'ContainerCpu'
Memory: !Ref 'ContainerMemory'
Image: robotshop/rs-ratings
Image: robotshop/rs-ratings:0.4.17
PortMappings:
- ContainerPort: !Ref 'RatingsContainerPort'
LogConfiguration:
LogDriver: json-file
RatingsService:
Type: AWS::ECS::Service
DependsOn: LoadBalancerRule
DependsOn: [LoadBalancerRule, RatingsRegistryService]
Properties:
ServiceName: !Ref 'RatingsServiceName'
NetworkConfiguration:
AwsvpcConfiguration:
Subnets:
- Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'PrivateSubnetOne']]
- Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'PrivateSubnetTwo']]
ServiceRegistries:
- ContainerName: !Ref 'RatingsServiceName'
ContainerPort: !Ref 'RatingsContainerPort'
RegistryArn: !GetAtt RatingsRegistryService.Arn
Cluster:
Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'ClusterName']]
DesiredCount: 1
TaskDefinition: !Ref 'RatingsTaskDefinition'
RatingsRegistryService:
Type: AWS::ServiceDiscovery::Service
DependsOn: Registry
Properties:
Name: !Ref 'RatingsServiceName'
DnsConfig:
NamespaceId: !GetAtt Registry.Id
DnsRecords:
- TTL: 10
Type: SRV
- TTL: 10
Type: A
RoutingPolicy: WEIGHTED
# payment service
PaymentTaskDefinition:
@@ -446,6 +583,7 @@ Resources:
Family: !Ref 'PaymentServiceName'
Cpu: !Ref 'ContainerCpu'
Memory: !Ref 'ContainerMemory'
NetworkMode: awsvpc
TaskRoleArn:
Fn::If:
- 'HasCustomRole'
@@ -455,22 +593,47 @@ Resources:
- Name: !Ref 'PaymentServiceName'
Cpu: !Ref 'ContainerCpu'
Memory: !Ref 'ContainerMemory'
Image: robotshop/rs-payment
Image: robotshop/rs-payment:0.4.17
PortMappings:
- ContainerPort: !Ref 'PaymentContainerPort'
LogConfiguration:
LogDriver: json-file
PaymentService:
Type: AWS::ECS::Service
DependsOn: LoadBalancerRule
DependsOn: [LoadBalancerRule, PaymentRegistryService]
Properties:
ServiceName: !Ref 'PaymentServiceName'
NetworkConfiguration:
AwsvpcConfiguration:
Subnets:
- Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'PrivateSubnetOne']]
- Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'PrivateSubnetTwo']]
ServiceRegistries:
- ContainerName: !Ref 'PaymentServiceName'
ContainerPort: !Ref 'PaymentContainerPort'
RegistryArn: !GetAtt PaymentRegistryService.Arn
Cluster:
Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'ClusterName']]
DesiredCount: 1
TaskDefinition: !Ref 'PaymentTaskDefinition'
PaymentRegistryService:
Type: AWS::ServiceDiscovery::Service
DependsOn: Registry
Properties:
Name: !Ref 'PaymentServiceName'
DnsConfig:
NamespaceId: !GetAtt Registry.Id
DnsRecords:
- TTL: 10
Type: SRV
- TTL: 10
Type: A
RoutingPolicy: WEIGHTED
# dispatch service
DispatchTaskDefinition:
Type: AWS::ECS::TaskDefinition
@@ -488,7 +651,7 @@ Resources:
- Name: !Ref 'DispatchServiceName'
Cpu: !Ref 'ContainerCpu'
Memory: !Ref 'ContainerMemory'
Image: robotshop/rs-dispatch
Image: robotshop/rs-dispatch:0.4.17
PortMappings:
- ContainerPort: !Ref 'DispatchContainerPort'
LogConfiguration:
@@ -519,14 +682,32 @@ Resources:
- Name: !Ref 'WebServiceName'
Cpu: !Ref 'ContainerCpu'
Memory: !Ref 'ContainerMemory'
Image: robotshop/rs-web
Image: robotshop/rs-web:0.4.17
Environment:
- Name: CATALOGUE_HOST
Value: catalogue.robot-shop
- Name: USER_HOST
Value: user.robot-shop
- Name: CART_HOST
Value: cart.robot-shop
- Name: SHIPPING_HOST
Value: shipping.robot-shop
- Name: PAYMENT_HOST
Value: payment.robot-shop
- Name: RATINGS_HOST
Value: ratings.robot-shop
PortMappings:
- ContainerPort: !Ref 'ContainerPort'
- ContainerPort: !Ref 'WebContainerPort'
LogConfiguration:
LogDriver: json-file
LogDriver: awslogs
Options:
awslogs-create-group: true
awslogs-region: !Ref AWS::Region
awslogs-group: !Ref WebLogGroup
awslogs-stream-prefix: ecs
WebService:
Type: AWS::ECS::Service
DependsOn: LoadBalancerRule
DependsOn: ['LoadBalancerRule', 'CatalogueService']
Properties:
ServiceName: !Ref 'WebServiceName'
Cluster:
@@ -539,7 +720,7 @@ Resources:
TaskDefinition: !Ref 'WebTaskDefinition'
LoadBalancers:
- ContainerName: !Ref 'WebServiceName'
ContainerPort: !Ref 'ContainerPort'
ContainerPort: !Ref 'WebContainerPort'
TargetGroupArn: !Ref 'WebTargetGroup'
WebTargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
@@ -550,7 +731,7 @@ Resources:
HealthCheckTimeoutSeconds: 5
HealthyThresholdCount: 2
Name: !Ref 'WebServiceName'
Port: 8080
Port: !Ref 'WebContainerPort'
Protocol: HTTP
UnhealthyThresholdCount: 2
VpcId:
@@ -567,5 +748,5 @@ Resources:
Values: [!Ref 'Path']
ListenerArn:
Fn::ImportValue:
!Join [':', [!Ref 'StackName', 'PrivateListener']]
!Join [':', [!Ref 'StackName', 'PublicListener']]
Priority: !Ref 'Priority'