From 7d665c6811cbe72a86e437ee0b7913625bfb0da8 Mon Sep 17 00:00:00 2001 From: Igor Serko Date: Fri, 5 May 2017 17:51:16 +0100 Subject: [PATCH] Set Load Balancer internal/external per process instead of per application Introduces EMPIRE_X_EXPOSURE which needs to be either `internal` or `internet-facing` (kept AWS terminology here). If that environment variable is not set, we fallback to the default selection via application (where you use `domain-add`). Fixes #1076 --- .gitignore | 2 ++ procfile/README.md | 9 +++++++++ releases.go | 16 ++++++++++++---- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 2a8d72219..ebcf9a945 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ build *.dump *.key *.cert +\#*\# +.\#* diff --git a/procfile/README.md b/procfile/README.md index decab6dec..c431fa0a2 100644 --- a/procfile/README.md +++ b/procfile/README.md @@ -78,3 +78,12 @@ This allows you to set process specific environment variables. If these are set environment: EMPIRE_X_LOAD_BALANCER_TYPE: "alb" ``` + +We support the following environment variables per process: + +Name | Default value | Available options | Description +---- | ------------- | ----------- +`EMPIRE_X_LOAD_BALANCER_TYPE` | `elb` | `alb`, `elb`| Determines whether you will use an ALB or ELB +`EMPIRE_X_EXPOSURE` | not set | `public` | Sets whether your ALB or ELB will be a public one, the default is internal. +`EMPIRE_X_TASK_DEFINITION_TYPE` | not set | `custom` | Determines whether we use the Custom::ECSTaskDefinition (better explanation needed) +`EMPIRE_X_TASK_ROLE_ARN` | not set | any IAM role ARN | Sets the IAM role for that app/process. **Your ECS cluster MUST have this enabled!** diff --git a/releases.go b/releases.go index 845044f0b..9bea258b5 100644 --- a/releases.go +++ b/releases.go @@ -367,12 +367,12 @@ func newSchedulerProcess(release *Release, name string, p Process) (*twelvefacto ) // For `web` processes defined in the standard procfile, we'll // generate a default exposure setting and also set the PORT - // environment variable for backwards compatability. + // environment variable for backwards compatibility. if name == webProcessType && len(p.Ports) == 0 { exposure = standardWebExposure(release.App) env["PORT"] = "8080" } else { - exposure, err = processExposure(release.App, name, p) + exposure, err = processExposure(release.App, name, p, env) if err != nil { return nil, err } @@ -437,7 +437,7 @@ func standardWebExposure(app *App) *twelvefactor.Exposure { } } -func processExposure(app *App, name string, process Process) (*twelvefactor.Exposure, error) { +func processExposure(app *App, name string, process Process, env map[string]string) (*twelvefactor.Exposure, error) { // No ports == not exposed if len(process.Ports) == 0 { return nil, nil @@ -474,8 +474,16 @@ func processExposure(app *App, name string, process Process) (*twelvefactor.Expo Protocol: protocol, }) } + + external := app.Exposure == exposePublic + if v, ok := env["EMPIRE_X_EXPOSURE"]; ok { + if v == exposePublic { + external = true + } + } + return &twelvefactor.Exposure{ - External: app.Exposure == exposePublic, + External: external, Ports: ports, }, nil }