diff --git a/e2e/apprunner/back-end/main.go b/e2e/apprunner/back-end/main.go
index 65571639e4e..9805d393a08 100644
--- a/e2e/apprunner/back-end/main.go
+++ b/e2e/apprunner/back-end/main.go
@@ -17,7 +17,7 @@ func HealthCheck(w http.ResponseWriter, req *http.Request) {
w.WriteHeader(http.StatusOK)
}
-// ServiceDiscoveryGet just returns true no matter what
+// ServiceDiscoveryGet just returns true no matter what.
func ServiceDiscoveryGet(w http.ResponseWriter, req *http.Request) {
log.Printf("Get on ServiceDiscovery endpoint Succeeded with message %s\n", message)
w.WriteHeader(http.StatusOK)
diff --git a/e2e/apprunner/front-end/main.go b/e2e/apprunner/front-end/main.go
index 5d86bb48858..648f13a2b5b 100644
--- a/e2e/apprunner/front-end/main.go
+++ b/e2e/apprunner/front-end/main.go
@@ -29,7 +29,7 @@ const (
postgresDriver = "postgres"
)
-// SimpleGet just returns true no matter what
+// SimpleGet just returns true no matter what.
func SimpleGet(w http.ResponseWriter, req *http.Request) {
log.Println("Get Succeeded")
w.WriteHeader(http.StatusOK)
diff --git a/e2e/exec/exec_test.go b/e2e/exec/exec_test.go
index 4e441a19dce..dd5a47b28fa 100644
--- a/e2e/exec/exec_test.go
+++ b/e2e/exec/exec_test.go
@@ -157,6 +157,7 @@ var _ = Describe("exec flow", func() {
})
Expect(err).NotTo(HaveOccurred())
Expect(len(svc.Routes)).To(Equal(1))
+ Expect(len(svc.ServiceConnects)).To(Equal(0))
route := svc.Routes[0]
Expect(route.Environment).To(Equal(envName))
diff --git a/e2e/internal/client/outputs.go b/e2e/internal/client/outputs.go
index bc89f6aa92e..d7019a0d7cb 100644
--- a/e2e/internal/client/outputs.go
+++ b/e2e/internal/client/outputs.go
@@ -65,7 +65,8 @@ type SvcShowOutput struct {
Type string `json:"type"`
AppName string `json:"application"`
Configs []SvcShowConfigurations `json:"configurations"`
- ServiceDiscoveries []SvcShowServiceDiscoveries `json:"serviceDiscovery"`
+ ServiceDiscoveries []SvcShowServiceEndpoints `json:"serviceDiscovery"`
+ ServiceConnects []SvcShowServiceEndpoints `json:"serviceConnect"`
Routes []SvcShowRoutes `json:"routes"`
Variables []SvcShowVariables `json:"variables"`
Resources map[string][]*SvcShowResourceInfo `json:"resources"`
@@ -86,8 +87,8 @@ type SvcShowRoutes struct {
URL string `json:"url"`
}
-// SvcShowServiceDiscoveries contains serialized service discovery info for an service.
-type SvcShowServiceDiscoveries struct {
+// SvcShowServiceEndpoints contains serialized endpoint info for a service.
+type SvcShowServiceEndpoints struct {
Environment []string `json:"environment"`
Endpoint string `json:"endpoint"`
}
diff --git a/e2e/multi-svc-app/back-end/main.go b/e2e/multi-svc-app/back-end/main.go
index 95ca94caa81..de0c5fb5936 100644
--- a/e2e/multi-svc-app/back-end/main.go
+++ b/e2e/multi-svc-app/back-end/main.go
@@ -16,24 +16,24 @@ func HealthCheck(w http.ResponseWriter, req *http.Request, ps httprouter.Params)
w.WriteHeader(http.StatusOK)
}
-// SimpleGet just returns true no matter what
+// SimpleGet just returns true no matter what.
func SimpleGet(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
log.Println("Get Succeeded")
w.WriteHeader(http.StatusOK)
w.Write([]byte("back-end"))
}
-// ServiceDiscoveryGet just returns true no matter what
-func ServiceDiscoveryGet(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
- log.Println("Get on ServiceDiscovery endpoint Succeeded")
+// Get just returns true no matter what.
+func Get(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
+ log.Println("Get on service endpoint Succeeded")
w.WriteHeader(http.StatusOK)
- w.Write([]byte("back-end-service-discovery"))
+ w.Write([]byte("back-end-service"))
}
func main() {
router := httprouter.New()
router.GET("/back-end/", SimpleGet)
- router.GET("/service-discovery/", ServiceDiscoveryGet)
+ router.GET("/service-endpoint/", Get)
// Health Check
router.GET("/", HealthCheck)
diff --git a/e2e/multi-svc-app/copilot/front-end/manifest.yml b/e2e/multi-svc-app/copilot/front-end/manifest.yml
index 59e225f337d..baf1e1d4547 100644
--- a/e2e/multi-svc-app/copilot/front-end/manifest.yml
+++ b/e2e/multi-svc-app/copilot/front-end/manifest.yml
@@ -22,6 +22,9 @@ http:
# To match all requests you can use the "/" path.
path: '/'
+network:
+ connect: true
+
# Number of CPU units for the task.
cpu: 256
# Amount of memory in MiB used by the task.
diff --git a/e2e/multi-svc-app/front-end/main.go b/e2e/multi-svc-app/front-end/main.go
index 09a34e4574d..ea70298dc3e 100644
--- a/e2e/multi-svc-app/front-end/main.go
+++ b/e2e/multi-svc-app/front-end/main.go
@@ -23,27 +23,35 @@ var (
volumeName = "efsTestVolume"
)
-// SimpleGet just returns true no matter what
+// SimpleGet just returns true no matter what.
func SimpleGet(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
log.Println("Get Succeeded")
w.WriteHeader(http.StatusOK)
w.Write([]byte("front-end"))
}
-// ServiceDiscoveryGet calls the back-end service, via service-discovery.
+// ServiceGet calls the back-end service, via service-connect and service-discovery.
// This call should succeed and return the value from the backend service.
-// This test assumes the backend app is called "back-end". The 'service-discovery' endpoint
-// of the back-end service is unreachable from the LB, so the only way to get it is
-// through service discovery. The response should be `back-end-service-discovery`
-func ServiceDiscoveryGet(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
- endpoint := fmt.Sprintf("http://back-end.%s/service-discovery/", os.Getenv("COPILOT_SERVICE_DISCOVERY_ENDPOINT"))
- resp, err := http.Get(endpoint)
+// This test assumes the backend app is called "back-end". The 'service-connect' and
+// 'service-discovery' endpoint of the back-end service is unreachable from the LB,
+// so the only way to get it is through service connect and service discovery.
+// The response should be `back-end-service`
+func ServiceGet(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
+ resp, err := http.Get("http://back-end/service-endpoint/")
+ if err != nil {
+ log.Printf("🚨 could call service connect endpoint: err=%s\n", err)
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ log.Println("Get on service connect endpoint Succeeded")
+ sdEndpoint := fmt.Sprintf("http://back-end.%s/service-endpoint/", os.Getenv("COPILOT_SERVICE_DISCOVERY_ENDPOINT"))
+ resp, err = http.Get(sdEndpoint)
if err != nil {
log.Printf("🚨 could call service discovery endpoint: err=%s\n", err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
- log.Println("Get on ServiceDiscovery endpoint Succeeded")
+ log.Println("Get on service discovery endpoint Succeeded")
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
w.WriteHeader(http.StatusOK)
@@ -123,7 +131,7 @@ func PutEFSCheck(w http.ResponseWriter, req *http.Request, ps httprouter.Params)
func main() {
router := httprouter.New()
router.GET("/", SimpleGet)
- router.GET("/service-discovery-test", ServiceDiscoveryGet)
+ router.GET("/service-endpoint-test", ServiceGet)
router.GET("/magicwords/", GetMagicWords)
router.GET("/job-checker/", GetJobCheck)
router.GET("/job-setter/", SetJobCheck)
diff --git a/e2e/multi-svc-app/multi_svc_app_suite_test.go b/e2e/multi-svc-app/multi_svc_app_suite_test.go
index 7db1b3199f5..c0be22da1de 100644
--- a/e2e/multi-svc-app/multi_svc_app_suite_test.go
+++ b/e2e/multi-svc-app/multi_svc_app_suite_test.go
@@ -17,7 +17,7 @@ var cli *client.CLI
var aws *client.AWS
var appName string
-/**
+/*
The multi svc suite runs through several tests focusing on creating multiple
services in one app.
*/
diff --git a/e2e/multi-svc-app/multi_svc_app_test.go b/e2e/multi-svc-app/multi_svc_app_test.go
index ef47aee8411..4954b436d6a 100644
--- a/e2e/multi-svc-app/multi_svc_app_test.go
+++ b/e2e/multi-svc-app/multi_svc_app_test.go
@@ -199,6 +199,11 @@ var _ = Describe("Multiple Service App", func() {
routeURL string
)
BeforeAll(func() {
+ _, backEndDeployErr = cli.SvcDeploy(&client.SvcDeployInput{
+ Name: "back-end",
+ EnvName: "test",
+ ImageTag: "gallopinggurdey",
+ })
_, frontEndDeployErr = cli.SvcDeploy(&client.SvcDeployInput{
Name: "front-end",
EnvName: "test",
@@ -214,11 +219,6 @@ var _ = Describe("Multiple Service App", func() {
EnvName: "test",
ImageTag: "gallopinggurdey",
})
- _, backEndDeployErr = cli.SvcDeploy(&client.SvcDeployInput{
- Name: "back-end",
- EnvName: "test",
- ImageTag: "gallopinggurdey",
- })
})
It("svc deploy should succeed", func() {
@@ -301,15 +301,15 @@ var _ = Describe("Multiple Service App", func() {
Expect(svcs["back-end"].Type).To(Equal("Backend Service"))
})
- It("service discovery should be enabled and working", func() {
+ It("service internal endpoint should be enabled and working", func() {
// The front-end service is set up to have a path called
- // "/front-end/service-discovery-test" - this route
+ // "/front-end/service-endpoint-test" - this route
// calls a function which makes a call via the service
- // discovery endpoint, "back-end.local". If that back-end
+ // connect/discovery endpoint, "back-end.local". If that back-end
// call succeeds, the back-end returns a response
- // "back-end-service-discovery". This should be forwarded
+ // "back-end-service". This should be forwarded
// back to us via the front-end api.
- // [test] -- http req -> [front-end] -- service-discovery -> [back-end]
+ // [test] -- http req -> [front-end] -- service-connect -> [back-end]
svcName := "front-end"
svc, svcShowErr := cli.SvcShow(&client.SvcShowRequest{
AppName: appName,
@@ -317,15 +317,17 @@ var _ = Describe("Multiple Service App", func() {
})
Expect(svcShowErr).NotTo(HaveOccurred())
Expect(len(svc.Routes)).To(Equal(1))
+ Expect(len(svc.ServiceConnects)).To(Equal(1))
+ Expect(svc.ServiceConnects[0].Endpoint).To(Equal(fmt.Sprintf("%s:80", svcName)))
- // Calls the front end's service discovery endpoint - which should connect
+ // Calls the front end's service connect/discovery endpoint - which should connect
// to the backend, and pipe the backend response to us.
route := svc.Routes[0]
Expect(route.Environment).To(Equal("test"))
routeURL = route.URL
- resp, fetchErr := http.Get(fmt.Sprintf("%s/service-discovery-test/", route.URL))
+ resp, fetchErr := http.Get(fmt.Sprintf("%s/service-endpoint-test/", route.URL))
Expect(fetchErr).NotTo(HaveOccurred())
Expect(resp.StatusCode).To(Equal(200))
@@ -333,8 +335,7 @@ var _ = Describe("Multiple Service App", func() {
// name as the value.
bodyBytes, err := ioutil.ReadAll(resp.Body)
Expect(err).NotTo(HaveOccurred())
- Expect(string(bodyBytes)).To(Equal("back-end-service-discovery"))
-
+ Expect(string(bodyBytes)).To(Equal("back-end-service"))
})
It("should be able to write to EFS volume", func() {
diff --git a/e2e/multi-svc-app/www/main.go b/e2e/multi-svc-app/www/main.go
index cf90a599c90..63572211d7d 100644
--- a/e2e/multi-svc-app/www/main.go
+++ b/e2e/multi-svc-app/www/main.go
@@ -10,7 +10,7 @@ import (
"github.com/julienschmidt/httprouter"
)
-// SimpleGet just returns true no matter what
+// SimpleGet just returns true no matter what.
func SimpleGet(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
log.Println("Get Succeeded")
w.WriteHeader(http.StatusOK)
diff --git a/regression/multi-svc-app/back-end/main.go b/regression/multi-svc-app/back-end/main.go
index 95ca94caa81..ebd467bc4e6 100644
--- a/regression/multi-svc-app/back-end/main.go
+++ b/regression/multi-svc-app/back-end/main.go
@@ -16,14 +16,14 @@ func HealthCheck(w http.ResponseWriter, req *http.Request, ps httprouter.Params)
w.WriteHeader(http.StatusOK)
}
-// SimpleGet just returns true no matter what
+// SimpleGet just returns true no matter what.
func SimpleGet(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
log.Println("Get Succeeded")
w.WriteHeader(http.StatusOK)
w.Write([]byte("back-end"))
}
-// ServiceDiscoveryGet just returns true no matter what
+// ServiceDiscoveryGet just returns true no matter what.
func ServiceDiscoveryGet(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
log.Println("Get on ServiceDiscovery endpoint Succeeded")
w.WriteHeader(http.StatusOK)
diff --git a/regression/multi-svc-app/back-end/swap/main.go b/regression/multi-svc-app/back-end/swap/main.go
index 3630891c110..ca7dd847993 100644
--- a/regression/multi-svc-app/back-end/swap/main.go
+++ b/regression/multi-svc-app/back-end/swap/main.go
@@ -16,14 +16,14 @@ func HealthCheck(w http.ResponseWriter, req *http.Request, ps httprouter.Params)
w.WriteHeader(http.StatusOK)
}
-// SimpleGet just returns true no matter what
+// SimpleGet just returns true no matter what.
func SimpleGet(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
log.Println("Get Succeeded")
w.WriteHeader(http.StatusOK)
w.Write([]byte("back-end oraoraora")) // NOTE: response body appended with "oraoraora"
}
-// ServiceDiscoveryGet just returns true no matter what
+// ServiceDiscoveryGet just returns true no matter what.
func ServiceDiscoveryGet(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
log.Println("Get on ServiceDiscovery endpoint Succeeded")
w.WriteHeader(http.StatusOK)
diff --git a/regression/multi-svc-app/front-end/main.go b/regression/multi-svc-app/front-end/main.go
index ef83f9f3f53..6b28fc7708d 100644
--- a/regression/multi-svc-app/front-end/main.go
+++ b/regression/multi-svc-app/front-end/main.go
@@ -13,7 +13,7 @@ import (
"github.com/julienschmidt/httprouter"
)
-// SimpleGet just returns true no matter what
+// SimpleGet just returns true no matter what.
func SimpleGet(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
log.Println("Get Succeeded")
w.WriteHeader(http.StatusOK)
diff --git a/regression/multi-svc-app/front-end/swap/main.go b/regression/multi-svc-app/front-end/swap/main.go
index 1c3a3daa542..e9209405b48 100644
--- a/regression/multi-svc-app/front-end/swap/main.go
+++ b/regression/multi-svc-app/front-end/swap/main.go
@@ -13,7 +13,7 @@ import (
"github.com/julienschmidt/httprouter"
)
-// SimpleGet just returns true no matter what
+// SimpleGet just returns true no matter what.
func SimpleGet(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
log.Println("Get Succeeded")
w.WriteHeader(http.StatusOK)
diff --git a/regression/multi-svc-app/www/main.go b/regression/multi-svc-app/www/main.go
index cf90a599c90..63572211d7d 100644
--- a/regression/multi-svc-app/www/main.go
+++ b/regression/multi-svc-app/www/main.go
@@ -10,7 +10,7 @@ import (
"github.com/julienschmidt/httprouter"
)
-// SimpleGet just returns true no matter what
+// SimpleGet just returns true no matter what.
func SimpleGet(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
log.Println("Get Succeeded")
w.WriteHeader(http.StatusOK)
diff --git a/regression/multi-svc-app/www/swap/main.go b/regression/multi-svc-app/www/swap/main.go
index dd440fe85ae..dbd4fe3bc94 100644
--- a/regression/multi-svc-app/www/swap/main.go
+++ b/regression/multi-svc-app/www/swap/main.go
@@ -10,7 +10,7 @@ import (
"github.com/julienschmidt/httprouter"
)
-// SimpleGet just returns true no matter what
+// SimpleGet just returns true no matter what.
func SimpleGet(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
log.Println("Get Succeeded")
w.WriteHeader(http.StatusOK)
diff --git a/site/content/docs/manifest/environment.en.md b/site/content/docs/manifest/environment.en.md
index 2f7ec380a89..692fc7563b7 100644
--- a/site/content/docs/manifest/environment.en.md
+++ b/site/content/docs/manifest/environment.en.md
@@ -194,9 +194,24 @@ ports: 80
network.vpc.security_group.