feat(dash): Terraform AWS Beanstalk split 84/35684/5
authorPeter Mikus <pmikus@cisco.com>
Wed, 16 Mar 2022 15:42:57 +0000 (16:42 +0100)
committerPeter Mikus <pmikus@cisco.com>
Thu, 17 Mar 2022 13:06:15 +0000 (13:06 +0000)
Signed-off-by: Peter Mikus <pmikus@cisco.com>
Change-Id: I6a9f54be0f734cd267c7ea5aa7f9933e04a8e139

39 files changed:
fdio.infra.terraform/1n_aws_t3/fdio-csit-dash-app-base/main.tf [new file with mode: 0644]
fdio.infra.terraform/1n_aws_t3/fdio-csit-dash-app-base/output.tf [new file with mode: 0644]
fdio.infra.terraform/1n_aws_t3/fdio-csit-dash-app-base/providers.tf [new file with mode: 0644]
fdio.infra.terraform/1n_aws_t3/fdio-csit-dash-app-base/variables.tf [new file with mode: 0644]
fdio.infra.terraform/1n_aws_t3/fdio-csit-dash-app-base/versions.tf [new file with mode: 0644]
fdio.infra.terraform/1n_aws_t3/fdio-csit-dash-env/main.tf
fdio.infra.terraform/1n_aws_t3/fdio-csit-dash-env/output.tf
fdio.infra.terraform/1n_aws_t3/output.tf [deleted file]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/README.md [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/example/main.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/example/output.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/example/providers.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/example/variables.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/example/versions.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/main.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/output.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/variables.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/versions.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/README.md [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/example/main.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/example/output.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/example/providers.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/example/variables.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/example/versions.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/main.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/output.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/variables.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/versions.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/README.md [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/example/main.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/example/output.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/example/providers.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/example/variables.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/example/versions.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/main.tf [moved from fdio.infra.terraform/1n_aws_t3/main.tf with 92% similarity]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/output.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/variables.tf [moved from fdio.infra.terraform/1n_aws_t3/variables.tf with 98% similarity]
fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/versions.tf [moved from fdio.infra.terraform/1n_aws_t3/versions.tf with 100% similarity]
resources/tools/dash/app/app.ini

diff --git a/fdio.infra.terraform/1n_aws_t3/fdio-csit-dash-app-base/main.tf b/fdio.infra.terraform/1n_aws_t3/fdio-csit-dash-app-base/main.tf
new file mode 100644 (file)
index 0000000..63d30e4
--- /dev/null
@@ -0,0 +1,11 @@
+data "vault_aws_access_credentials" "creds" {
+  backend = "${var.vault_name}-path"
+  role    = "${var.vault_name}-role"
+}
+
+module "elastic_beanstalk_application_version" {
+  source                   = "../../terraform-aws-elastic-beanstalk-application-version"
+  application_description  = "FD.io CSIT Results Dashboard"
+  application_name         = "fdio-csit-dash-app"
+  application_version_name = "fdio-csit-dash-app-base"
+}
diff --git a/fdio.infra.terraform/1n_aws_t3/fdio-csit-dash-app-base/output.tf b/fdio.infra.terraform/1n_aws_t3/fdio-csit-dash-app-base/output.tf
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/fdio.infra.terraform/1n_aws_t3/fdio-csit-dash-app-base/providers.tf b/fdio.infra.terraform/1n_aws_t3/fdio-csit-dash-app-base/providers.tf
new file mode 100644 (file)
index 0000000..7241b27
--- /dev/null
@@ -0,0 +1,11 @@
+provider "aws" {
+  region     = var.region
+  access_key = data.vault_aws_access_credentials.creds.access_key
+  secret_key = data.vault_aws_access_credentials.creds.secret_key
+}
+
+provider "vault" {
+  address         = var.vault_provider_address
+  skip_tls_verify = var.vault_provider_skip_tls_verify
+  token           = var.vault_provider_token
+}
diff --git a/fdio.infra.terraform/1n_aws_t3/fdio-csit-dash-app-base/variables.tf b/fdio.infra.terraform/1n_aws_t3/fdio-csit-dash-app-base/variables.tf
new file mode 100644 (file)
index 0000000..2579029
--- /dev/null
@@ -0,0 +1,28 @@
+variable "region" {
+  description = "AWS Region."
+  type        = string
+  default     = "us-east-1"
+}
+
+variable "vault_provider_address" {
+  description = "Vault cluster address."
+  type        = string
+  default     = "http://10.30.51.28:8200"
+}
+
+variable "vault_provider_skip_tls_verify" {
+  description = "Verification of the Vault server's TLS certificate."
+  type        = bool
+  default     = false
+}
+
+variable "vault_provider_token" {
+  description = "Vault root token."
+  type        = string
+  sensitive   = true
+}
+
+variable "vault_name" {
+  type    = string
+  default = "dynamic-aws-creds-vault-fdio-csit-jenkins"
+}
diff --git a/fdio.infra.terraform/1n_aws_t3/fdio-csit-dash-app-base/versions.tf b/fdio.infra.terraform/1n_aws_t3/fdio-csit-dash-app-base/versions.tf
new file mode 100644 (file)
index 0000000..4afbbc0
--- /dev/null
@@ -0,0 +1,17 @@
+terraform {
+  backend "consul" {
+    address = "10.32.8.14:8500"
+    scheme  = "http"
+    path    = "terraform/dash"
+  }
+  required_providers {
+    aws = {
+      source  = "hashicorp/aws"
+      version = ">= 4.3.0"
+    }
+    vault = {
+      version = ">= 3.2.1"
+    }
+  }
+  required_version = ">= 1.1.4"
+}
index 01b2351..fa7bcea 100644 (file)
@@ -7,8 +7,19 @@ data "vault_aws_access_credentials" "creds" {
   role    = "${var.vault_name}-role"
 }
 
+module "elastic_beanstalk_application" {
+  source = "../../terraform-aws-elastic-beanstalk-application"
+
+  # application
+  application_description                    = "FD.io CSIT Results Dashboard"
+  application_name                           = "fdio-csit-dash-app"
+  appversion_lifecycle_service_role_arn      = ""
+  appversion_lifecycle_max_count             = 2
+  appversion_lifecycle_delete_source_from_s3 = false
+}
+
 module "elastic_beanstalk_environment" {
-  source = "../"
+  source = "../../terraform-aws-elastic-beanstalk-environment"
 
   # vpc
   vpc_cidr_block           = "192.168.0.0/24"
@@ -19,15 +30,9 @@ module "elastic_beanstalk_environment" {
   # subnet
   subnet_availability_zone = "us-east-1a"
 
-  # application
-  application_description                    = "FD.io CSIT Results Dashboard"
-  application_name                           = "fdio-csit-dash-app"
-  appversion_lifecycle_service_role_arn      = ""
-  appversion_lifecycle_max_count             = 2
-  appversion_lifecycle_delete_source_from_s3 = false
-
   # environment
-  environment_description            = "FD.io CSIT Results Dashboard"
+  environment_application            = module.elastic_beanstalk_application.application_name
+  environment_description            = module.elastic_beanstalk_application.application_description
   environment_name                   = "fdio-csit-dash-env"
   environment_solution_stack_name    = "64bit Amazon Linux 2 v3.3.11 running Python 3.8"
   environment_tier                   = "WebServer"
@@ -35,7 +40,7 @@ module "elastic_beanstalk_environment" {
   environment_version_label          = ""
 
   # aws:ec2:instances
-  instances_instance_types = "t3a.2xlarge"
+  instances_instance_types = "t3a.xlarge"
 
   # aws:ec2:vpc
   associate_public_ip_address = true
index adcfc4b..094c8f5 100644 (file)
@@ -1,9 +1,4 @@
 output "elastic_beanstalk_environment_hostname" {
   description = "DNS hostname"
-  value       = module.elastic_beanstalk_environment.cname
+  value       = module.elastic_beanstalk_environment.environment_cname
 }
-
-output "elastic_beanstalk_environment_name" {
-  description = "Name of the Elastic Beanstalk environment"
-  value       = module.elastic_beanstalk_environment.envName
-}
\ No newline at end of file
diff --git a/fdio.infra.terraform/1n_aws_t3/output.tf b/fdio.infra.terraform/1n_aws_t3/output.tf
deleted file mode 100644 (file)
index 58d6627..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-output "cname" {
-  value = aws_elastic_beanstalk_environment.environment.cname
-}
-
-output "envName" {
-  value = aws_elastic_beanstalk_environment.environment.name
-}
-
-output "asgName" {
-  value = aws_elastic_beanstalk_environment.environment.autoscaling_groups[0]
-}
-
-output "lbarn" {
-  value = aws_elastic_beanstalk_environment.environment.load_balancers[0]
-}
\ No newline at end of file
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/README.md b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/README.md
new file mode 100644 (file)
index 0000000..0ab18bd
--- /dev/null
@@ -0,0 +1,38 @@
+<!-- BEGIN_TF_DOCS -->
+## Requirements
+
+| Name | Version |
+|------|---------|
+| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.1.4 |
+| <a name="requirement_aws"></a> [aws](#requirement\_aws) | ~> 4.3.0 |
+
+## Providers
+
+| Name | Version |
+|------|---------|
+| <a name="provider_aws"></a> [aws](#provider\_aws) | ~> 4.3.0 |
+
+## Modules
+
+No modules.
+
+## Resources
+
+| Name | Type |
+|------|------|
+| [aws_elastic_beanstalk_application_version.application_version](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/elastic_beanstalk_application_version) | resource |
+| [aws_s3_bucket.bucket](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket) | resource |
+| [aws_s3_object.object](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_object) | resource |
+
+## Inputs
+
+| Name | Description | Type | Default | Required |
+|------|-------------|------|---------|:--------:|
+| <a name="input_application_description"></a> [application\_description](#input\_application\_description) | Short description of the Application Version. | `string` | `"Beanstalk Application"` | no |
+| <a name="input_application_name"></a> [application\_name](#input\_application\_name) | Name of the Beanstalk Application the version is associated. | `string` | `"Beanstalk"` | no |
+| <a name="input_application_version_name"></a> [application\_version\_name](#input\_application\_version\_name) | Unique name for the this Application Version. | `string` | `"Beanstalk Version"` | no |
+
+## Outputs
+
+No outputs.
+<!-- END_TF_DOCS -->
\ No newline at end of file
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/example/main.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/example/main.tf
new file mode 100644 (file)
index 0000000..6525092
--- /dev/null
@@ -0,0 +1,4 @@
+module "elastic_beanstalk_application_version" {
+  source                  = "../"
+  application_description = var.application_description
+}
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/example/output.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/example/output.tf
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/example/providers.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/example/providers.tf
new file mode 100644 (file)
index 0000000..5ff54f0
--- /dev/null
@@ -0,0 +1,3 @@
+provider "aws" {
+  region = var.region
+}
\ No newline at end of file
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/example/variables.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/example/variables.tf
new file mode 100644 (file)
index 0000000..12af1d6
--- /dev/null
@@ -0,0 +1,11 @@
+variable "region" {
+  description = "AWS Region."
+  type        = string
+  default     = "us-east-1"
+}
+
+variable "application_description" {
+  description = "Short description of the application."
+  type        = string
+  default     = "Beanstalk Application"
+}
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/example/versions.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/example/versions.tf
new file mode 100644 (file)
index 0000000..af1be4a
--- /dev/null
@@ -0,0 +1,9 @@
+terraform {
+  required_providers {
+    aws = {
+      source  = "hashicorp/aws"
+      version = ">= 4.3.0"
+    }
+  }
+  required_version = ">= 1.1.4"
+}
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/main.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/main.tf
new file mode 100644 (file)
index 0000000..4a9f473
--- /dev/null
@@ -0,0 +1,31 @@
+locals {
+  bucket = "${var.application_name}-bucket"
+  key    = "${var.application_name}.zip"
+  source = "app.zip"
+  tags = {
+    "Name"        = "${var.application_name}"
+    "Environment" = "${var.application_name}"
+  }
+}
+
+# Create elastic beanstalk Application Version
+resource "aws_s3_bucket" "bucket" {
+  bucket = local.bucket
+  tags   = local.tags
+}
+
+resource "aws_s3_object" "object" {
+  bucket = aws_s3_bucket.bucket.id
+  key    = local.key
+  source = local.source
+  tags   = local.tags
+}
+
+resource "aws_elastic_beanstalk_application_version" "application_version" {
+  application = var.application_name
+  description = var.application_description
+  bucket      = aws_s3_bucket.bucket.id
+  key         = aws_s3_object.object.id
+  name        = var.application_version_name
+  tags        = local.tags
+}
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/output.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/output.tf
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/variables.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/variables.tf
new file mode 100644 (file)
index 0000000..6ac2ae7
--- /dev/null
@@ -0,0 +1,17 @@
+variable "application_description" {
+  description = "Short description of the Application Version."
+  type        = string
+  default     = "Beanstalk Application"
+}
+
+variable "application_name" {
+  description = "Name of the Beanstalk Application the version is associated."
+  type        = string
+  default     = "Beanstalk"
+}
+
+variable "application_version_name" {
+  description = "Unique name for the this Application Version."
+  type        = string
+  default     = "Beanstalk Version"
+}
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/versions.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application-version/versions.tf
new file mode 100644 (file)
index 0000000..66b9c17
--- /dev/null
@@ -0,0 +1,9 @@
+terraform {
+  required_providers {
+    aws = {
+      source  = "hashicorp/aws"
+      version = "~> 4.3.0"
+    }
+  }
+  required_version = ">= 1.1.4"
+}
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/README.md b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/README.md
new file mode 100644 (file)
index 0000000..d149d90
--- /dev/null
@@ -0,0 +1,41 @@
+<!-- BEGIN_TF_DOCS -->
+## Requirements
+
+| Name | Version |
+|------|---------|
+| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.1.4 |
+| <a name="requirement_aws"></a> [aws](#requirement\_aws) | ~> 4.3.0 |
+
+## Providers
+
+| Name | Version |
+|------|---------|
+| <a name="provider_aws"></a> [aws](#provider\_aws) | ~> 4.3.0 |
+
+## Modules
+
+No modules.
+
+## Resources
+
+| Name | Type |
+|------|------|
+| [aws_elastic_beanstalk_application.application](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/elastic_beanstalk_application) | resource |
+
+## Inputs
+
+| Name | Description | Type | Default | Required |
+|------|-------------|------|---------|:--------:|
+| <a name="input_application_description"></a> [application\_description](#input\_application\_description) | Short description of the application. | `string` | `"Beanstalk Application"` | no |
+| <a name="input_application_name"></a> [application\_name](#input\_application\_name) | The name of the application, must be unique within account. | `string` | `"Beanstalk"` | no |
+| <a name="input_appversion_lifecycle_delete_source_from_s3"></a> [appversion\_lifecycle\_delete\_source\_from\_s3](#input\_appversion\_lifecycle\_delete\_source\_from\_s3) | Whether to delete application versions from S3 source. | `bool` | `false` | no |
+| <a name="input_appversion_lifecycle_max_count"></a> [appversion\_lifecycle\_max\_count](#input\_appversion\_lifecycle\_max\_count) | The max number of application versions to keep. | `number` | `2` | no |
+| <a name="input_appversion_lifecycle_service_role_arn"></a> [appversion\_lifecycle\_service\_role\_arn](#input\_appversion\_lifecycle\_service\_role\_arn) | The service role ARN to use for application version cleanup. If left empty, the `appversion_lifecycle` block will not be created. | `string` | `""` | no |
+
+## Outputs
+
+| Name | Description |
+|------|-------------|
+| <a name="output_application_description"></a> [application\_description](#output\_application\_description) | n/a |
+| <a name="output_application_name"></a> [application\_name](#output\_application\_name) | n/a |
+<!-- END_TF_DOCS -->
\ No newline at end of file
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/example/main.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/example/main.tf
new file mode 100644 (file)
index 0000000..410d1ab
--- /dev/null
@@ -0,0 +1,4 @@
+module "elastic_beanstalk_application" {
+  source                  = "../"
+  application_description = var.application_description
+}
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/example/output.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/example/output.tf
new file mode 100644 (file)
index 0000000..290e2a1
--- /dev/null
@@ -0,0 +1,9 @@
+output "elastic_beanstalk_application_name" {
+  value       = module.elastic_beanstalk_application.application_name
+  description = "Elastic Beanstalk Application name"
+}
+
+output "elastic_beanstalk_application_description" {
+  value       = module.elastic_beanstalk_application.application_description
+  description = "Elastic Beanstalk Application description"
+}
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/example/providers.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/example/providers.tf
new file mode 100644 (file)
index 0000000..5ff54f0
--- /dev/null
@@ -0,0 +1,3 @@
+provider "aws" {
+  region = var.region
+}
\ No newline at end of file
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/example/variables.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/example/variables.tf
new file mode 100644 (file)
index 0000000..12af1d6
--- /dev/null
@@ -0,0 +1,11 @@
+variable "region" {
+  description = "AWS Region."
+  type        = string
+  default     = "us-east-1"
+}
+
+variable "application_description" {
+  description = "Short description of the application."
+  type        = string
+  default     = "Beanstalk Application"
+}
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/example/versions.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/example/versions.tf
new file mode 100644 (file)
index 0000000..af1be4a
--- /dev/null
@@ -0,0 +1,9 @@
+terraform {
+  required_providers {
+    aws = {
+      source  = "hashicorp/aws"
+      version = ">= 4.3.0"
+    }
+  }
+  required_version = ">= 1.1.4"
+}
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/main.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/main.tf
new file mode 100644 (file)
index 0000000..909d6fc
--- /dev/null
@@ -0,0 +1,21 @@
+locals {
+  tags = {
+    "Name"        = "${var.application_name}"
+    "Environment" = "${var.application_name}"
+  }
+}
+
+resource "aws_elastic_beanstalk_application" "application" {
+  name        = var.application_name
+  description = var.application_description
+  tags        = local.tags
+
+  dynamic "appversion_lifecycle" {
+    for_each = var.appversion_lifecycle_service_role_arn != "" ? ["true"] : []
+    content {
+      service_role          = var.appversion_lifecycle_service_role_arn
+      max_count             = var.appversion_lifecycle_max_count
+      delete_source_from_s3 = var.appversion_lifecycle_delete_source_from_s3
+    }
+  }
+}
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/output.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/output.tf
new file mode 100644 (file)
index 0000000..ce7f978
--- /dev/null
@@ -0,0 +1,7 @@
+output "application_name" {
+  value = aws_elastic_beanstalk_application.application.name
+}
+
+output "application_description" {
+  value = aws_elastic_beanstalk_application.application.description
+}
\ No newline at end of file
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/variables.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/variables.tf
new file mode 100644 (file)
index 0000000..38090c9
--- /dev/null
@@ -0,0 +1,29 @@
+variable "application_description" {
+  description = "Short description of the application."
+  type        = string
+  default     = "Beanstalk Application"
+}
+
+variable "application_name" {
+  description = "The name of the application, must be unique within account."
+  type        = string
+  default     = "Beanstalk"
+}
+
+variable "appversion_lifecycle_service_role_arn" {
+  description = "The service role ARN to use for application version cleanup. If left empty, the `appversion_lifecycle` block will not be created."
+  type        = string
+  default     = ""
+}
+
+variable "appversion_lifecycle_max_count" {
+  description = "The max number of application versions to keep."
+  type        = number
+  default     = 2
+}
+
+variable "appversion_lifecycle_delete_source_from_s3" {
+  description = "Whether to delete application versions from S3 source."
+  type        = bool
+  default     = false
+}
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/versions.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-application/versions.tf
new file mode 100644 (file)
index 0000000..66b9c17
--- /dev/null
@@ -0,0 +1,9 @@
+terraform {
+  required_providers {
+    aws = {
+      source  = "hashicorp/aws"
+      version = "~> 4.3.0"
+    }
+  }
+  required_version = ">= 1.1.4"
+}
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/README.md b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/README.md
new file mode 100644 (file)
index 0000000..f3bc3e2
--- /dev/null
@@ -0,0 +1,106 @@
+<!-- BEGIN_TF_DOCS -->
+## Requirements
+
+| Name | Version |
+|------|---------|
+| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.1.4 |
+| <a name="requirement_aws"></a> [aws](#requirement\_aws) | ~> 4.3.0 |
+| <a name="requirement_vault"></a> [vault](#requirement\_vault) | >= 3.2.1 |
+
+## Providers
+
+| Name | Version |
+|------|---------|
+| <a name="provider_aws"></a> [aws](#provider\_aws) | ~> 4.3.0 |
+
+## Modules
+
+No modules.
+
+## Resources
+
+| Name | Type |
+|------|------|
+| [aws_elastic_beanstalk_environment.environment](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/elastic_beanstalk_environment) | resource |
+| [aws_iam_instance_profile.ec2_iam_instance_profile](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_instance_profile) | resource |
+| [aws_iam_role.ec2](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |
+| [aws_iam_role.service](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |
+| [aws_iam_role_policy.default](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy) | resource |
+| [aws_iam_role_policy_attachment.ecr_readonly](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
+| [aws_iam_role_policy_attachment.enhanced_health](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
+| [aws_iam_role_policy_attachment.multicontainer_docker](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
+| [aws_iam_role_policy_attachment.service](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
+| [aws_iam_role_policy_attachment.ssm_automation](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
+| [aws_iam_role_policy_attachment.ssm_ec2](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
+| [aws_iam_role_policy_attachment.web_tier](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
+| [aws_iam_role_policy_attachment.worker_tier](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
+| [aws_internet_gateway.internet_gateway](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/internet_gateway) | resource |
+| [aws_route.route](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route) | resource |
+| [aws_ssm_activation.ec2](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ssm_activation) | resource |
+| [aws_subnet.subnet](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/subnet) | resource |
+| [aws_vpc.vpc](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc) | resource |
+| [aws_iam_policy_document.default](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |
+| [aws_iam_policy_document.ec2](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |
+| [aws_iam_policy_document.service](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |
+
+## Inputs
+
+| Name | Description | Type | Default | Required |
+|------|-------------|------|---------|:--------:|
+| <a name="input_application_description"></a> [application\_description](#input\_application\_description) | Short description of the application. | `string` | `"Beanstalk Application"` | no |
+| <a name="input_application_name"></a> [application\_name](#input\_application\_name) | The name of the application, must be unique within account. | `string` | `"Beanstalk"` | no |
+| <a name="input_appversion_lifecycle_delete_source_from_s3"></a> [appversion\_lifecycle\_delete\_source\_from\_s3](#input\_appversion\_lifecycle\_delete\_source\_from\_s3) | Whether to delete application versions from S3 source | `bool` | `false` | no |
+| <a name="input_appversion_lifecycle_max_count"></a> [appversion\_lifecycle\_max\_count](#input\_appversion\_lifecycle\_max\_count) | The max number of application versions to keep | `number` | `2` | no |
+| <a name="input_appversion_lifecycle_service_role_arn"></a> [appversion\_lifecycle\_service\_role\_arn](#input\_appversion\_lifecycle\_service\_role\_arn) | The service role ARN to use for application version cleanup. If left empty, the `appversion_lifecycle` block will not be created. | `string` | `""` | no |
+| <a name="input_associate_public_ip_address"></a> [associate\_public\_ip\_address](#input\_associate\_public\_ip\_address) | Whether to associate public IP addresses to the instances. | `bool` | `true` | no |
+| <a name="input_autoscaling_asg_maxsize"></a> [autoscaling\_asg\_maxsize](#input\_autoscaling\_asg\_maxsize) | Maximum instances to launch | `number` | `2` | no |
+| <a name="input_autoscaling_asg_minsize"></a> [autoscaling\_asg\_minsize](#input\_autoscaling\_asg\_minsize) | Minumum instances to launch | `number` | `1` | no |
+| <a name="input_autoscaling_trigger_lower_breach_scale_increment"></a> [autoscaling\_trigger\_lower\_breach\_scale\_increment](#input\_autoscaling\_trigger\_lower\_breach\_scale\_increment) | How many Amazon EC2 instances to remove when performing a scaling activity. | `number` | `-1` | no |
+| <a name="input_autoscaling_trigger_lower_threshold"></a> [autoscaling\_trigger\_lower\_threshold](#input\_autoscaling\_trigger\_lower\_threshold) | Minimum level of autoscale metric to remove an instance | `number` | `20` | no |
+| <a name="input_autoscaling_trigger_measure_name"></a> [autoscaling\_trigger\_measure\_name](#input\_autoscaling\_trigger\_measure\_name) | Metric used for your Auto Scaling trigger | `string` | `"CPUUtilization"` | no |
+| <a name="input_autoscaling_trigger_statistic"></a> [autoscaling\_trigger\_statistic](#input\_autoscaling\_trigger\_statistic) | Statistic the trigger should use, such as Average | `string` | `"Average"` | no |
+| <a name="input_autoscaling_trigger_unit"></a> [autoscaling\_trigger\_unit](#input\_autoscaling\_trigger\_unit) | Unit for the trigger measurement, such as Bytes | `string` | `"Percent"` | no |
+| <a name="input_autoscaling_trigger_upper_breach_scale_increment"></a> [autoscaling\_trigger\_upper\_breach\_scale\_increment](#input\_autoscaling\_trigger\_upper\_breach\_scale\_increment) | How many Amazon EC2 instances to add when performing a scaling activity | `number` | `1` | no |
+| <a name="input_autoscaling_trigger_upper_threshold"></a> [autoscaling\_trigger\_upper\_threshold](#input\_autoscaling\_trigger\_upper\_threshold) | Maximum level of autoscale metric to add an instance | `number` | `80` | no |
+| <a name="input_cloudwatch_logs_delete_on_terminate"></a> [cloudwatch\_logs\_delete\_on\_terminate](#input\_cloudwatch\_logs\_delete\_on\_terminate) | Whether to delete the log groups when the environment is terminated. If false, the logs are kept RetentionInDays days | `bool` | `true` | no |
+| <a name="input_cloudwatch_logs_health_delete_on_terminate"></a> [cloudwatch\_logs\_health\_delete\_on\_terminate](#input\_cloudwatch\_logs\_health\_delete\_on\_terminate) | Whether to delete the log group when the environment is terminated. If false, the health data is kept RetentionInDays days. | `bool` | `true` | no |
+| <a name="input_cloudwatch_logs_health_health_streaming_enabled"></a> [cloudwatch\_logs\_health\_health\_streaming\_enabled](#input\_cloudwatch\_logs\_health\_health\_streaming\_enabled) | For environments with enhanced health reporting enabled, whether to create a group in CloudWatch Logs for environment health and archive Elastic Beanstalk environment health data. For information about enabling enhanced health, see aws:elasticbeanstalk:healthreporting:system. | `bool` | `true` | no |
+| <a name="input_cloudwatch_logs_health_retention_in_days"></a> [cloudwatch\_logs\_health\_retention\_in\_days](#input\_cloudwatch\_logs\_health\_retention\_in\_days) | The number of days to keep the archived health data before it expires. | `number` | `3` | no |
+| <a name="input_cloudwatch_logs_retention_in_days"></a> [cloudwatch\_logs\_retention\_in\_days](#input\_cloudwatch\_logs\_retention\_in\_days) | The number of days to keep log events before they expire. | `number` | `3` | no |
+| <a name="input_cloudwatch_logs_stream_logs"></a> [cloudwatch\_logs\_stream\_logs](#input\_cloudwatch\_logs\_stream\_logs) | Whether to create groups in CloudWatch Logs for proxy and deployment logs, and stream logs from each instance in your environment | `bool` | `true` | no |
+| <a name="input_default_listener_enabled"></a> [default\_listener\_enabled](#input\_default\_listener\_enabled) | Set to false to disable the listener. You can use this option to disable the default listener on port 80. | `bool` | `true` | no |
+| <a name="input_elb_scheme"></a> [elb\_scheme](#input\_elb\_scheme) | Specify `internal` if you want to create an internal load balancer in your Amazon VPC so that your Elastic Beanstalk application cannot be accessed from outside your Amazon VPC. | `string` | `"public"` | no |
+| <a name="input_environment_application"></a> [environment\_application](#input\_environment\_application) | The name of the application, must be unique within account. | `string` | `"Beanstalk Application"` | no |
+| <a name="input_environment_description"></a> [environment\_description](#input\_environment\_description) | Short description of the environment. | `string` | `"Beanstalk Environment"` | no |
+| <a name="input_environment_loadbalancer_type"></a> [environment\_loadbalancer\_type](#input\_environment\_loadbalancer\_type) | Load Balancer type, e.g. 'application' or 'classic'. | `string` | `"network"` | no |
+| <a name="input_environment_name"></a> [environment\_name](#input\_environment\_name) | A unique name for this Environment. This name is used in the application URL. | `string` | `"Beanstalk-env"` | no |
+| <a name="input_environment_process_default_healthcheck_interval"></a> [environment\_process\_default\_healthcheck\_interval](#input\_environment\_process\_default\_healthcheck\_interval) | The interval of time, in seconds, that Elastic Load Balancing checks the health of the Amazon EC2 instances of your application. | `number` | `10` | no |
+| <a name="input_environment_process_default_healthy_threshold_count"></a> [environment\_process\_default\_healthy\_threshold\_count](#input\_environment\_process\_default\_healthy\_threshold\_count) | The number of consecutive successful requests before Elastic Load Balancing changes the instance health status. | `number` | `3` | no |
+| <a name="input_environment_process_default_port"></a> [environment\_process\_default\_port](#input\_environment\_process\_default\_port) | Port application is listening on. | `number` | `5000` | no |
+| <a name="input_environment_process_default_unhealthy_threshold_count"></a> [environment\_process\_default\_unhealthy\_threshold\_count](#input\_environment\_process\_default\_unhealthy\_threshold\_count) | The number of consecutive unsuccessful requests before Elastic Load Balancing changes the instance health status. | `number` | `3` | no |
+| <a name="input_environment_solution_stack_name"></a> [environment\_solution\_stack\_name](#input\_environment\_solution\_stack\_name) | A solution stack to base your environment off of. | `string` | `"64bit Amazon Linux 2 v3.3.11 running Python 3.8"` | no |
+| <a name="input_environment_tier"></a> [environment\_tier](#input\_environment\_tier) | The environment tier specified. | `string` | `"WebServer"` | no |
+| <a name="input_environment_type"></a> [environment\_type](#input\_environment\_type) | Environment type, e.g. 'LoadBalanced' or 'SingleInstance'. If setting to 'SingleInstance', `rolling_update_type` must be set to 'Time', `updating_min_in_service` must be set to 0, and `loadbalancer_subnets` will be unused (it applies to the ELB, which does not exist in SingleInstance environments). | `string` | `"LoadBalanced"` | no |
+| <a name="input_environment_variables"></a> [environment\_variables](#input\_environment\_variables) | Map of custom ENV variables to be provided to the application. | `map(string)` | `{}` | no |
+| <a name="input_environment_version_label"></a> [environment\_version\_label](#input\_environment\_version\_label) | The name of the Elastic Beanstalk Application Version to use in deployment. | `string` | `""` | no |
+| <a name="input_environment_wait_for_ready_timeout"></a> [environment\_wait\_for\_ready\_timeout](#input\_environment\_wait\_for\_ready\_timeout) | The maximum duration to wait for the Elastic Beanstalk Environment to be in a ready state before timing out | `string` | `"20m"` | no |
+| <a name="input_healthreporting_system_type"></a> [healthreporting\_system\_type](#input\_healthreporting\_system\_type) | Whether to enable enhanced health reporting for this environment | `string` | `"enhanced"` | no |
+| <a name="input_hostmanager_log_publication_control"></a> [hostmanager\_log\_publication\_control](#input\_hostmanager\_log\_publication\_control) | Copy the log files for your application's Amazon EC2 instances to the Amazon S3 bucket associated with your application | `bool` | `true` | no |
+| <a name="input_instances_instance_types"></a> [instances\_instance\_types](#input\_instances\_instance\_types) | Instances type | `string` | `"t3.medium"` | no |
+| <a name="input_managedactions_managed_actions_enabled"></a> [managedactions\_managed\_actions\_enabled](#input\_managedactions\_managed\_actions\_enabled) | Enable managed platform updates. When you set this to true, you must also specify a `PreferredStartTime` and `UpdateLevel` | `bool` | `true` | no |
+| <a name="input_managedactions_platformupdate_instance_refresh_enabled"></a> [managedactions\_platformupdate\_instance\_refresh\_enabled](#input\_managedactions\_platformupdate\_instance\_refresh\_enabled) | Enable weekly instance replacement. | `bool` | `true` | no |
+| <a name="input_managedactions_platformupdate_update_level"></a> [managedactions\_platformupdate\_update\_level](#input\_managedactions\_platformupdate\_update\_level) | The highest level of update to apply with managed platform updates | `string` | `"minor"` | no |
+| <a name="input_managedactions_preferred_start_time"></a> [managedactions\_preferred\_start\_time](#input\_managedactions\_preferred\_start\_time) | Configure a maintenance window for managed actions in UTC | `string` | `"Sun:10:00"` | no |
+| <a name="input_subnet_availability_zone"></a> [subnet\_availability\_zone](#input\_subnet\_availability\_zone) | AWS availability zone | `string` | `"us-east-1a"` | no |
+| <a name="input_vpc_cidr_block"></a> [vpc\_cidr\_block](#input\_vpc\_cidr\_block) | The CIDR block for the association. | `string` | `"192.168.0.0/24"` | no |
+| <a name="input_vpc_enable_dns_hostnames"></a> [vpc\_enable\_dns\_hostnames](#input\_vpc\_enable\_dns\_hostnames) | Whether or not the VPC has DNS hostname support. | `bool` | `true` | no |
+| <a name="input_vpc_enable_dns_support"></a> [vpc\_enable\_dns\_support](#input\_vpc\_enable\_dns\_support) | Whether or not the VPC has DNS support. | `bool` | `true` | no |
+| <a name="input_vpc_instance_tenancy"></a> [vpc\_instance\_tenancy](#input\_vpc\_instance\_tenancy) | The allowed tenancy of instances launched into the selected VPC. | `string` | `"default"` | no |
+
+## Outputs
+
+| Name | Description |
+|------|-------------|
+| <a name="output_environment_cname"></a> [environment\_cname](#output\_environment\_cname) | n/a |
+| <a name="output_environment_name"></a> [environment\_name](#output\_environment\_name) | n/a |
+<!-- END_TF_DOCS -->
\ No newline at end of file
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/example/main.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/example/main.tf
new file mode 100644 (file)
index 0000000..c6fcbf8
--- /dev/null
@@ -0,0 +1,12 @@
+module "elastic_beanstalk_application" {
+  source                  = "../../terraform-aws-elastic-beanstalk-application"
+  application_description = "FD.io CSIT Results Dashboard"
+  application_name        = "fdio-csit-dash-app"
+}
+
+module "elastic_beanstalk_environment" {
+  source                  = "../"
+  environment_application = module.elastic_beanstalk_application.application_name
+  environment_description = module.elastic_beanstalk_application.application_description
+  environment_name        = "fdio-csit-dash-env"
+}
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/example/output.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/example/output.tf
new file mode 100644 (file)
index 0000000..290e2a1
--- /dev/null
@@ -0,0 +1,9 @@
+output "elastic_beanstalk_application_name" {
+  value       = module.elastic_beanstalk_application.application_name
+  description = "Elastic Beanstalk Application name"
+}
+
+output "elastic_beanstalk_application_description" {
+  value       = module.elastic_beanstalk_application.application_description
+  description = "Elastic Beanstalk Application description"
+}
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/example/providers.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/example/providers.tf
new file mode 100644 (file)
index 0000000..5ff54f0
--- /dev/null
@@ -0,0 +1,3 @@
+provider "aws" {
+  region = var.region
+}
\ No newline at end of file
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/example/variables.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/example/variables.tf
new file mode 100644 (file)
index 0000000..3c07178
--- /dev/null
@@ -0,0 +1,23 @@
+variable "region" {
+  description = "AWS Region."
+  type        = string
+  default     = "us-east-1"
+}
+
+variable "environment_application" {
+  description = "The name of the application, must be unique within account."
+  type        = string
+  default     = "Beanstalk Application"
+}
+
+variable "application_description" {
+  description = "Short description of the application."
+  type        = string
+  default     = "Beanstalk Application"
+}
+
+variable "application_name" {
+  description = "The name of the application, must be unique within account."
+  type        = string
+  default     = "Beanstalk"
+}
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/example/versions.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/example/versions.tf
new file mode 100644 (file)
index 0000000..af1be4a
--- /dev/null
@@ -0,0 +1,9 @@
+terraform {
+  required_providers {
+    aws = {
+      source  = "hashicorp/aws"
+      version = ">= 4.3.0"
+    }
+  }
+  required_version = ">= 1.1.4"
+}
@@ -1,5 +1,4 @@
 locals {
-  bucket = "${var.application_name}-bucket"
   tags = {
     "Name"        = "${var.application_name}"
     "Environment" = "${var.application_name}"
@@ -305,51 +304,6 @@ resource "aws_iam_role_policy" "default" {
   role   = aws_iam_role.ec2.id
 }
 
-# Create elastic beanstalk Application
-resource "aws_s3_bucket" "bucket" {
-  bucket = local.bucket
-  tags   = local.tags
-}
-
-resource "aws_s3_object" "object" {
-  bucket = aws_s3_bucket.bucket.id
-  key    = "beanstalk/app.zip"
-  source = "app.zip"
-  tags   = local.tags
-}
-
-resource "aws_elastic_beanstalk_application_version" "application_version" {
-  depends_on = [
-    aws_elastic_beanstalk_application.application
-  ]
-  name        = "${var.application_name}-base"
-  application = var.application_name
-  description = var.application_description
-  bucket      = aws_s3_bucket.bucket.id
-  key         = aws_s3_object.object.id
-  tags        = local.tags
-}
-
-resource "aws_elastic_beanstalk_application" "application" {
-  depends_on = [
-    aws_vpc.vpc,
-    aws_subnet.subnet,
-    aws_ssm_activation.ec2
-  ]
-  name        = var.application_name
-  description = var.application_description
-
-  dynamic "appversion_lifecycle" {
-    for_each = var.appversion_lifecycle_service_role_arn != "" ? ["true"] : []
-    content {
-      service_role          = var.appversion_lifecycle_service_role_arn
-      max_count             = var.appversion_lifecycle_max_count
-      delete_source_from_s3 = var.appversion_lifecycle_delete_source_from_s3
-    }
-  }
-  tags = local.tags
-}
-
 # Create elastic beanstalk Environment
 resource "aws_elastic_beanstalk_environment" "environment" {
   depends_on = [
@@ -357,7 +311,7 @@ resource "aws_elastic_beanstalk_environment" "environment" {
     aws_subnet.subnet,
     aws_ssm_activation.ec2
   ]
-  application            = aws_elastic_beanstalk_application.application.name
+  application            = var.environment_application
   description            = var.environment_description
   name                   = var.environment_name
   solution_stack_name    = var.environment_solution_stack_name
diff --git a/fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/output.tf b/fdio.infra.terraform/terraform-aws-elastic-beanstalk-environment/output.tf
new file mode 100644 (file)
index 0000000..de7cdae
--- /dev/null
@@ -0,0 +1,7 @@
+output "environment_cname" {
+  value = aws_elastic_beanstalk_environment.environment.cname
+}
+
+output "environment_name" {
+  value = aws_elastic_beanstalk_environment.environment.name
+}
\ No newline at end of file
@@ -31,6 +31,12 @@ variable "subnet_availability_zone" {
 }
 
 # Variables for elastic beanstalk Application
+variable "environment_application" {
+  description = "The name of the application, must be unique within account."
+  type        = string
+  default     = "Beanstalk Application"
+}
+
 variable "application_description" {
   description = "Short description of the application."
   type        = string
index 0df9d83..bff7c12 100644 (file)
@@ -5,7 +5,7 @@ ini = :pal
 module = wsgi:app
 
 processes = 2
-threads = 2
+threads = 4
 plugin = python3
 
 master = true