Browse Source

Register services with a known port with SRV record

see
https://github.com/docker/docker_aws/issues/15#issuecomment-634357859

Signed-off-by: Nicolas De Loof <[email protected]>
Nicolas De Loof 5 years ago
parent
commit
a798c95963

+ 21 - 12
ecs/pkg/amazon/cloudformation.go

@@ -131,18 +131,31 @@ func (c client) Convert(project *compose.Project) (*cloudformation.Template, err
 		}
 
 		serviceRegistration := fmt.Sprintf("%sServiceDiscoveryEntry", service.Name)
+		records := []cloudmap.Service_DnsRecord{
+			{
+				TTL:  60,
+				Type: cloudmapapi.RecordTypeA,
+			},
+		}
+		serviceRegistry := ecs.Service_ServiceRegistry{
+			RegistryArn: cloudformation.GetAtt(serviceRegistration, "Arn"),
+		}
+
+		if len(service.Ports) > 0 {
+			records = append(records, cloudmap.Service_DnsRecord{
+				TTL:  60,
+				Type: cloudmapapi.RecordTypeSrv,
+			})
+			serviceRegistry.Port = int(service.Ports[0].Target)
+		}
+
 		template.Resources[serviceRegistration] = &cloudmap.Service{
 			Description:       fmt.Sprintf("%q service discovery entry in Cloud Map", service.Name),
 			HealthCheckConfig: healthCheck,
 			Name:              service.Name,
 			NamespaceId:       cloudformation.Ref("CloudMap"),
 			DnsConfig: &cloudmap.Service_DnsConfig{
-				DnsRecords: []cloudmap.Service_DnsRecord{
-					{
-						TTL:  300,
-						Type: cloudmapapi.RecordTypeA,
-					},
-				},
+				DnsRecords:    records,
 				RoutingPolicy: cloudmapapi.RoutingPolicyMultivalue,
 			},
 		}
@@ -169,12 +182,8 @@ func (c client) Convert(project *compose.Project) (*cloudformation.Template, err
 			},
 			SchedulingStrategy: ecsapi.SchedulingStrategyReplica,
 			ServiceName:        service.Name,
-			ServiceRegistries: []ecs.Service_ServiceRegistry{
-				{
-					RegistryArn: cloudformation.GetAtt(serviceRegistration, "Arn"),
-				},
-			},
-			TaskDefinition: cloudformation.Ref(taskDefinition),
+			ServiceRegistries:  []ecs.Service_ServiceRegistry{serviceRegistry},
+			TaskDefinition:     cloudformation.Ref(taskDefinition),
 		}
 	}
 	return template, nil

+ 1 - 1
ecs/pkg/amazon/testdata/simple/simple-cloudformation-conversion.golden

@@ -135,7 +135,7 @@
         "DnsConfig": {
           "DnsRecords": [
             {
-              "TTL": 300,
+              "TTL": 60,
               "Type": "A"
             }
           ],

+ 1 - 1
ecs/pkg/amazon/testdata/simple/simple-cloudformation-with-overrides-conversion.golden

@@ -135,7 +135,7 @@
         "DnsConfig": {
           "DnsRecords": [
             {
-              "TTL": 300,
+              "TTL": 60,
               "Type": "A"
             }
           ],