// findServiceArn finds a service arn from a more human // readable name func findServiceArn(svc *ecs.ECS, clusterArn string, serviceName string) (string, error) { params := &ecs.ListServicesInput{ Cluster: aws.String(clusterArn), } services, err := svc.ListServices(params) if err != nil { return "", err } for _, serviceId := range services.ServiceArns { var pattern string = `/` + serviceName + `$` matched, _ := regexp.MatchString(pattern, *serviceId) if matched { return *serviceId, nil } } return "", errors.New("Could not find service with name: " + serviceName) }
// GetServices will return a slice of ECS Services for a given cluster func GetServices(svc *ecs.ECS, cluster *string) ([]*ecs.Service, error) { var serviceArns []*string // List clusters reqParams := &ecs.ListServicesInput{ Cluster: cluster, MaxResults: aws.Int64(10), NextToken: aws.String(""), } // Loop through tokens until no more results remain for { resp, err := svc.ListServices(reqParams) // Error check if err != nil { return nil, fmt.Errorf("ecs.ListServices: %s", err.Error()) } // Expand slice of services and append to our comprehensive list serviceArns = append(serviceArns, resp.ServiceArns...) // Cycle token if resp.NextToken != nil { reqParams.NextToken = resp.NextToken } else { // Kill loop ... out of response pages break } } // Describe the services that we just got back resp, err := svc.DescribeServices(&ecs.DescribeServicesInput{ Cluster: cluster, Services: serviceArns, }) if err != nil { return nil, fmt.Errorf("ecs.DescribeServices: %s", err.Error()) } return resp.Services, nil }