diff --git a/ecs/cloudformation.go b/ecs/cloudformation.go index 40263728..82803207 100644 --- a/ecs/cloudformation.go +++ b/ecs/cloudformation.go @@ -206,7 +206,7 @@ func (b *ecsAPIService) convert(project *types.Project) (*cloudformation.Templat desiredCount = int(*service.Deploy.Replicas) } - for _, dependency := range service.DependsOn { + for dependency := range service.DependsOn { dependsOn = append(dependsOn, serviceResourceName(dependency)) } @@ -312,6 +312,14 @@ func computeRollingUpdateLimits(service types.ServiceConfig) (int, int, error) { func getLoadBalancerType(project *types.Project) string { for _, service := range project.Services { for _, port := range service.Ports { + protocol := port.Protocol + v, ok := port.Extensions[extensionProtocol] + if ok { + protocol = v.(string) + } + if protocol == "http" || protocol == "https" { + continue + } if port.Published != 80 && port.Published != 443 { return elbv2.LoadBalancerTypeEnumNetwork } diff --git a/ecs/cloudformation_test.go b/ecs/cloudformation_test.go index f12ff4a4..7f227564 100644 --- a/ecs/cloudformation_test.go +++ b/ecs/cloudformation_test.go @@ -181,19 +181,37 @@ networks: } func TestLoadBalancerTypeApplication(t *testing.T) { - template := convertYaml(t, ` -services: + cases := []string{ + `services: test: image: nginx ports: - 80:80 -`) - lb := template.Resources["TestLoadBalancer"] - assert.Check(t, lb != nil) - loadBalancer := *lb.(*elasticloadbalancingv2.LoadBalancer) - assert.Check(t, len(loadBalancer.Name) <= 32) - assert.Check(t, loadBalancer.Type == elbv2.LoadBalancerTypeEnumApplication) - assert.Check(t, len(loadBalancer.SecurityGroups) > 0) +`, + `services: + test: + image: nginx + ports: + - target: 8080 + protocol: http +`, + `services: + test: + image: nginx + ports: + - target: 8080 + x-aws-protocol: http +`, + } + for _, y := range cases { + template := convertYaml(t, y) + lb := template.Resources["TestLoadBalancer"] + assert.Check(t, lb != nil) + loadBalancer := *lb.(*elasticloadbalancingv2.LoadBalancer) + assert.Check(t, len(loadBalancer.Name) <= 32) + assert.Check(t, loadBalancer.Type == elbv2.LoadBalancerTypeEnumApplication) + assert.Check(t, len(loadBalancer.SecurityGroups) > 0) + } } func TestNoLoadBalancerIfNoPortExposed(t *testing.T) { diff --git a/ecs/local/compose.go b/ecs/local/compose.go index 080318de..c89db488 100644 --- a/ecs/local/compose.go +++ b/ecs/local/compose.go @@ -92,7 +92,9 @@ func (e ecsLocalSimulation) Convert(ctx context.Context, project *types.Project) service.Networks["credentials_network"] = &types.ServiceNetworkConfig{ Ipv4Address: fmt.Sprintf("169.254.170.%d", i+3), } - service.DependsOn = append(service.DependsOn, "ecs-local-endpoints") + service.DependsOn["ecs-local-endpoints"] = types.ServiceDependency{ + Condition: types.ServiceConditionStarted, + } service.Environment["AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"] = aws.String("/creds") service.Environment["ECS_CONTAINER_METADATA_URI"] = aws.String("http://169.254.170.2/v3") project.Services[i] = service diff --git a/ecs/x.go b/ecs/x.go index 63af9c2e..5fdeeab2 100644 --- a/ecs/x.go +++ b/ecs/x.go @@ -21,6 +21,7 @@ const ( extensionVPC = "x-aws-vpc" extensionPullCredentials = "x-aws-pull_credentials" extensionLB = "x-aws-loadbalancer" + extensionProtocol = "x-aws-protocol" extensionCluster = "x-aws-cluster" extensionKeys = "x-aws-keys" extensionMinPercent = "x-aws-min_percent" diff --git a/go.mod b/go.mod index adea637a..99165396 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( github.com/aws/aws-sdk-go v1.34.8 github.com/awslabs/goformation/v4 v4.14.0 github.com/buger/goterm v0.0.0-20200322175922-2f3e71b85129 - github.com/compose-spec/compose-go v0.0.0-20200824075806-a70cd5945c25 + github.com/compose-spec/compose-go v0.0.0-20200907084823-057e1edc5b6f github.com/containerd/console v1.0.0 github.com/containerd/containerd v1.3.5 // indirect github.com/docker/cli v0.0.0-20200528204125-dd360c7c0de8 @@ -35,7 +35,7 @@ require ( github.com/gobwas/pool v0.2.0 // indirect github.com/gobwas/ws v1.0.3 github.com/golang/protobuf v1.4.2 - github.com/google/go-cmp v0.5.1 + github.com/google/go-cmp v0.5.2 github.com/google/uuid v1.1.1 github.com/gorilla/mux v1.7.4 // indirect github.com/hashicorp/go-multierror v1.1.0 diff --git a/go.sum b/go.sum index b85de99b..c80171bb 100644 --- a/go.sum +++ b/go.sum @@ -87,8 +87,8 @@ github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/compose-spec/compose-go v0.0.0-20200824075806-a70cd5945c25 h1:mVlGrHJuNGPJNEvCCIrDIZX5FYtNTwFd++y+fJaGTXM= -github.com/compose-spec/compose-go v0.0.0-20200824075806-a70cd5945c25/go.mod h1:P7PZ0svgjrZ8nv/XvxObbl8o0DCIE9ZbL8pllg6uL4w= +github.com/compose-spec/compose-go v0.0.0-20200907084823-057e1edc5b6f h1:YsU3/17YA/skXpCQbRcrzWJxslWZ2lmvQK0bRiCyC38= +github.com/compose-spec/compose-go v0.0.0-20200907084823-057e1edc5b6f/go.mod h1:voTGL1mRFcKRaFbi1lXGlR1YffS/9YD1jnVl4N/rYzw= github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f h1:tSNMc+rJDfmYntojat8lljbt1mgKNpTxUZJsSzJ9Y1s= github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= @@ -193,8 +193,8 @@ github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=