diff --git a/project.clj b/project.clj index 5d4ca5ed..c8bd772f 100644 --- a/project.clj +++ b/project.clj @@ -13,6 +13,7 @@ org.slf4j/log4j-over-slf4j]] [compojure "1.6.2" :exclusions [ring ring/ring-core]] + [com.unbounce/clojure-dogstatsd-client "0.7.0"] [bidi "2.1.6"] [ring/ring-defaults "0.3.2" :exclusions [ring ring/ring-core]] [mount "0.1.16"] diff --git a/src/clj/auto_ap/graphql.clj b/src/clj/auto_ap/graphql.clj index 1b2d12bb..8f554d17 100644 --- a/src/clj/auto_ap/graphql.clj +++ b/src/clj/auto_ap/graphql.clj @@ -34,7 +34,8 @@ [com.walmartlabs.lacinia.util :refer [attach-resolvers]] [datomic.api :as d] [unilog.context :as lc] - [yang.time :refer [time-it]]) + [yang.time :refer [time-it]] + [com.unbounce.dogstatsd.core :as statsd]) (:import (clojure.lang IPersistentMap))) @@ -1329,27 +1330,29 @@ ([id q] (query id q nil)) ([id q v] - (lc/with-context {:query q} - (log/info "Executing query" q) - (try - (let [[result time] (time-it (simplify (execute schema q v {:id id})))] - (info-event "Query completed" - {:time (:time time) - :errors (seq (:errors result))}) - (when (seq (:errors result)) - (throw (ex-info "GraphQL error" {:result result}))) - result) + (statsd/increment "queries") + (statsd/time! [(subs q 0 (min 50 (count q))) {}] + (lc/with-context {:query q} + (log/info "Executing query" q) + (try + (let [[result time] (time-it (simplify (execute schema q v {:id id})))] + (info-event "Query completed" + {:time (:time time) + :errors (seq (:errors result))}) + (when (seq (:errors result)) + (throw (ex-info "GraphQL error" {:result result}))) + result) - (catch Exception e - (if-let [v (or (:validation-error (ex-data e)) - (:validation-error (ex-data (.getCause e))))] - - (do - (warn-event "validation error" {:validation-error v - :data (ex-data e)}) - (throw e) - #_{:errors [{:message v}]}) - (do - (error-event "query error" {:error e}) + (catch Exception e + (if-let [v (or (:validation-error (ex-data e)) + (:validation-error (ex-data (.getCause e))))] + + (do + (warn-event "validation error" {:validation-error v + :data (ex-data e)}) + (throw e) + #_{:errors [{:message v}]}) + (do + (error-event "query error" {:error e}) - (throw e)))))))) + (throw e))))))))) diff --git a/src/clj/auto_ap/server.clj b/src/clj/auto_ap/server.clj index ede4b6bb..5b7feda1 100644 --- a/src/clj/auto_ap/server.clj +++ b/src/clj/auto_ap/server.clj @@ -7,6 +7,7 @@ [auto-ap.background.requests :as requests] [auto-ap.background.sysco :as sysco] [auto-ap.background.vendor :as vendor] + [auto-ap.background.metrics :as metrics] [auto-ap.square.core :as square] [auto-ap.datomic.migrate :as migrate] [auto-ap.import.yodlee :as yodlee] diff --git a/terraform/staging-background-worker-taskdef.json b/terraform/staging-background-worker-taskdef.json index 9f69fe1c..17008103 100644 --- a/terraform/staging-background-worker-taskdef.json +++ b/terraform/staging-background-worker-taskdef.json @@ -1,37 +1,58 @@ - [ +[ + { + "environment": [ { - "name": "integreat-app", - "image": "679918342773.dkr.ecr.us-east-1.amazonaws.com/integreat", - "portMappings": [ - { - "containerPort": 9000, - "hostPort": 9000, - "protocol": "tcp" - }, - { - "containerPort": 9090, - "hostPort": 9090, - "protocol": "tcp" - } - - - ], - "essential": true, - "environment": [ - { - "name": "config", - "value": "/usr/local/config/staging-background-worker.edn" - } - ], - "mountPoints": [], - "volumesFrom": [], - "logConfiguration": { - "logDriver": "awslogs", - "options": { - "awslogs-group": "/ecs/integreat-background-worker-staging", - "awslogs-region": "us-east-1", - "awslogs-stream-prefix": "ecs" - } - } + "name": "config", + "value": "/usr/local/config/staging-background-worker.edn" + }, + { + "name": "which_env", + "value": "staging" } - ] + ], + "essential": true, + "image": "679918342773.dkr.ecr.us-east-1.amazonaws.com/integreat:staging", + "logConfiguration": { + "logDriver": "awslogs", + "options": { + "awslogs-group": "/ecs/integreat-background-worker-staging", + "awslogs-region": "us-east-1", + "awslogs-stream-prefix": "ecs" + } + }, + "mountPoints": [], + "name": "integreat-app", + "portMappings": [ + { + "containerPort": 9000, + "hostPort": 9000, + "protocol": "tcp" + }, + { + "containerPort": 9090, + "hostPort": 9090, + "protocol": "tcp" + } + ], + "volumesFrom": [] + }, + { + "environment": [ + { + "name": "DD_API_KEY", + "value": "ce10d932c47b358e81081ae67bd8c112" + }, + { + "name": "ECS_FARGATE", + "value": "true" + }, + { + "name": "DD_DOCKER_ENV_AS_TAGS", + "value": "{\"which_env\":\"environment\"}" + } + ], + "essential": true, + "image": "public.ecr.aws/datadog/agent:latest", + "name": "datadog-agent" + } +] diff --git a/terraform/staging-taskdef.json b/terraform/staging-taskdef.json index 0ffea933..3a1b3183 100644 --- a/terraform/staging-taskdef.json +++ b/terraform/staging-taskdef.json @@ -1,35 +1,58 @@ - [ +[ + { + "environment": [ { - "name": "integreat-app", - "image": "679918342773.dkr.ecr.us-east-1.amazonaws.com/integreat", - "portMappings": [ - { - "containerPort": 3000, - "hostPort": 3000, - "protocol": "tcp" - }, - { - "containerPort": 9000, - "hostPort": 9000, - "protocol": "tcp" - } - ], - "essential": true, - "environment": [ - { - "name": "config", - "value": "/usr/local/config/staging.edn" - } - ], - "mountPoints": [], - "volumesFrom": [], - "logConfiguration": { - "logDriver": "awslogs", - "options": { - "awslogs-group": "/ecs/integreat-app-staging", - "awslogs-region": "us-east-1", - "awslogs-stream-prefix": "ecs" - } - } + "name": "config", + "value": "/usr/local/config/staging.edn" + }, + { + "name": "which_env", + "value": "staging" } - ] + ], + "essential": true, + "image": "679918342773.dkr.ecr.us-east-1.amazonaws.com/integreat:staging", + "logConfiguration": { + "logDriver": "awslogs", + "options": { + "awslogs-group": "/ecs/integreat-app-staging", + "awslogs-region": "us-east-1", + "awslogs-stream-prefix": "ecs" + } + }, + "mountPoints": [], + "name": "integreat-app", + "portMappings": [ + { + "containerPort": 3000, + "hostPort": 3000, + "protocol": "tcp" + }, + { + "containerPort": 9000, + "hostPort": 9000, + "protocol": "tcp" + } + ], + "volumesFrom": [] + }, + { + "environment": [ + { + "name": "DD_API_KEY", + "value": "ce10d932c47b358e81081ae67bd8c112" + }, + { + "name": "ECS_FARGATE", + "value": "true" + }, + { + "name": "DD_DOCKER_ENV_AS_TAGS", + "value": "{\"which_env\":\"environment\"}" + } + ], + "essential": true, + "image": "public.ecr.aws/datadog/agent:latest", + "name": "datadog-agent" + } +] diff --git a/terraform/terraform.tfstate.d/staging/terraform.tfstate b/terraform/terraform.tfstate.d/staging/terraform.tfstate index 520b1c4e..53ce6dad 100644 --- a/terraform/terraform.tfstate.d/staging/terraform.tfstate +++ b/terraform/terraform.tfstate.d/staging/terraform.tfstate @@ -1,7 +1,7 @@ { "version": 4, "terraform_version": "0.14.4", - "serial": 84, + "serial": 89, "lineage": "91d10fe0-8033-8778-c202-78d5a81632e8", "outputs": { "aws_access_key_id": { @@ -151,9 +151,9 @@ "registry_arn": "arn:aws:servicediscovery:us-east-1:679918342773:service/srv-nsn252bfk4r6bzpj" } ], - "tags": null, + "tags": {}, "tags_all": {}, - "task_definition": "arn:aws:ecs:us-east-1:679918342773:task-definition/integreat_app_staging:81", + "task_definition": "arn:aws:ecs:us-east-1:679918342773:task-definition/integreat_app_staging:97", "timeouts": { "delete": null }, @@ -230,9 +230,9 @@ "registry_arn": "arn:aws:servicediscovery:us-east-1:679918342773:service/srv-4cuqgdwqo5acwqtq" } ], - "tags": null, + "tags": {}, "tags_all": {}, - "task_definition": "arn:aws:ecs:us-east-1:679918342773:task-definition/integreat_background-worker_staging:1", + "task_definition": "arn:aws:ecs:us-east-1:679918342773:task-definition/integreat_background-worker_staging:17", "timeouts": { "delete": null }, @@ -256,8 +256,8 @@ { "schema_version": 1, "attributes": { - "arn": "arn:aws:ecs:us-east-1:679918342773:task-definition/integreat_app_staging:81", - "container_definitions": "[{\"cpu\":0,\"environment\":[{\"name\":\"config\",\"value\":\"/usr/local/config/staging.edn\"}],\"essential\":true,\"image\":\"679918342773.dkr.ecr.us-east-1.amazonaws.com/integreat\",\"logConfiguration\":{\"logDriver\":\"awslogs\",\"options\":{\"awslogs-group\":\"/ecs/integreat-app-staging\",\"awslogs-region\":\"us-east-1\",\"awslogs-stream-prefix\":\"ecs\"}},\"mountPoints\":[],\"name\":\"integreat-app\",\"portMappings\":[{\"containerPort\":3000,\"hostPort\":3000,\"protocol\":\"tcp\"},{\"containerPort\":9000,\"hostPort\":9000,\"protocol\":\"tcp\"}],\"volumesFrom\":[]}]", + "arn": "arn:aws:ecs:us-east-1:679918342773:task-definition/integreat_app_staging:98", + "container_definitions": "[{\"cpu\":0,\"environment\":[{\"name\":\"config\",\"value\":\"/usr/local/config/staging.edn\"},{\"name\":\"which_env\",\"value\":\"staging\"}],\"essential\":true,\"image\":\"679918342773.dkr.ecr.us-east-1.amazonaws.com/integreat:staging\",\"logConfiguration\":{\"logDriver\":\"awslogs\",\"options\":{\"awslogs-group\":\"/ecs/integreat-app-staging\",\"awslogs-region\":\"us-east-1\",\"awslogs-stream-prefix\":\"ecs\"}},\"mountPoints\":[],\"name\":\"integreat-app\",\"portMappings\":[{\"containerPort\":3000,\"hostPort\":3000,\"protocol\":\"tcp\"},{\"containerPort\":9000,\"hostPort\":9000,\"protocol\":\"tcp\"}],\"volumesFrom\":[]},{\"cpu\":0,\"environment\":[{\"name\":\"DD_API_KEY\",\"value\":\"ce10d932c47b358e81081ae67bd8c112\"},{\"name\":\"DD_DOCKER_ENV_AS_TAGS\",\"value\":\"{\\\"which_env\\\":\\\"environment\\\"}\"},{\"name\":\"ECS_FARGATE\",\"value\":\"true\"}],\"essential\":true,\"image\":\"public.ecr.aws/datadog/agent:latest\",\"mountPoints\":[],\"name\":\"datadog-agent\",\"portMappings\":[],\"volumesFrom\":[]}]", "cpu": "2048", "ephemeral_storage": [], "execution_role_arn": "arn:aws:iam::679918342773:role/ecsTaskExecutionRole", @@ -273,7 +273,7 @@ "requires_compatibilities": [ "FARGATE" ], - "revision": 81, + "revision": 98, "runtime_platform": [], "tags": null, "tags_all": {}, @@ -294,8 +294,8 @@ { "schema_version": 1, "attributes": { - "arn": "arn:aws:ecs:us-east-1:679918342773:task-definition/integreat_background-worker_staging:1", - "container_definitions": "[{\"cpu\":0,\"environment\":[{\"name\":\"config\",\"value\":\"/usr/local/config/staging-background-worker.edn\"}],\"essential\":true,\"image\":\"679918342773.dkr.ecr.us-east-1.amazonaws.com/integreat\",\"logConfiguration\":{\"logDriver\":\"awslogs\",\"options\":{\"awslogs-group\":\"/ecs/integreat-background-worker-staging\",\"awslogs-region\":\"us-east-1\",\"awslogs-stream-prefix\":\"ecs\"}},\"mountPoints\":[],\"name\":\"integreat-app\",\"portMappings\":[{\"containerPort\":9000,\"hostPort\":9000,\"protocol\":\"tcp\"},{\"containerPort\":9090,\"hostPort\":9090,\"protocol\":\"tcp\"}],\"volumesFrom\":[]}]", + "arn": "arn:aws:ecs:us-east-1:679918342773:task-definition/integreat_background-worker_staging:18", + "container_definitions": "[{\"cpu\":0,\"environment\":[{\"name\":\"config\",\"value\":\"/usr/local/config/staging-background-worker.edn\"},{\"name\":\"which_env\",\"value\":\"staging\"}],\"essential\":true,\"image\":\"679918342773.dkr.ecr.us-east-1.amazonaws.com/integreat:staging\",\"logConfiguration\":{\"logDriver\":\"awslogs\",\"options\":{\"awslogs-group\":\"/ecs/integreat-background-worker-staging\",\"awslogs-region\":\"us-east-1\",\"awslogs-stream-prefix\":\"ecs\"}},\"mountPoints\":[],\"name\":\"integreat-app\",\"portMappings\":[{\"containerPort\":9000,\"hostPort\":9000,\"protocol\":\"tcp\"},{\"containerPort\":9090,\"hostPort\":9090,\"protocol\":\"tcp\"}],\"volumesFrom\":[]},{\"cpu\":0,\"environment\":[{\"name\":\"DD_API_KEY\",\"value\":\"ce10d932c47b358e81081ae67bd8c112\"},{\"name\":\"DD_DOCKER_ENV_AS_TAGS\",\"value\":\"{\\\"which_env\\\":\\\"environment\\\"}\"},{\"name\":\"ECS_FARGATE\",\"value\":\"true\"}],\"essential\":true,\"image\":\"public.ecr.aws/datadog/agent:latest\",\"mountPoints\":[],\"name\":\"datadog-agent\",\"portMappings\":[],\"volumesFrom\":[]}]", "cpu": "1024", "ephemeral_storage": [], "execution_role_arn": "arn:aws:iam::679918342773:role/ecsTaskExecutionRole", @@ -311,7 +311,7 @@ "requires_compatibilities": [ "FARGATE" ], - "revision": 1, + "revision": 18, "runtime_platform": [], "tags": null, "tags_all": {}, @@ -649,7 +649,10 @@ "sensitive_attributes": [], "private": "bnVsbA==", "dependencies": [ - "aws_lb_listener.https" + "aws_acm_certificate.cert", + "aws_lb.integreat_app", + "aws_lb_listener.https", + "aws_lb_target_group.integreat_app" ] } ] @@ -947,7 +950,7 @@ "id": "srv-4cuqgdwqo5acwqtq", "name": "integreat-background-worker-staging", "namespace_id": "ns-gv2z744em7myo2jp", - "tags": null, + "tags": {}, "tags_all": {} }, "sensitive_attributes": [], @@ -988,7 +991,7 @@ "id": "srv-nsn252bfk4r6bzpj", "name": "integreat-app-staging", "namespace_id": "ns-gv2z744em7myo2jp", - "tags": null, + "tags": {}, "tags_all": {} }, "sensitive_attributes": [], @@ -1084,7 +1087,7 @@ "receive_wait_time_seconds": 0, "redrive_policy": "", "sqs_managed_sse_enabled": false, - "tags": null, + "tags": {}, "tags_all": {}, "url": "https://sqs.us-east-1.amazonaws.com/679918342773/integreat-background-request-staging", "visibility_timeout_seconds": 30 diff --git a/terraform/terraform.tfstate.d/staging/terraform.tfstate.backup b/terraform/terraform.tfstate.d/staging/terraform.tfstate.backup index eb77bae5..520b1c4e 100644 --- a/terraform/terraform.tfstate.d/staging/terraform.tfstate.backup +++ b/terraform/terraform.tfstate.d/staging/terraform.tfstate.backup @@ -1,12 +1,13 @@ { "version": 4, "terraform_version": "0.14.4", - "serial": 70, + "serial": 84, "lineage": "91d10fe0-8033-8778-c202-78d5a81632e8", "outputs": { "aws_access_key_id": { "value": "AKIAJIS67OSJARD2E6VQ", - "type": "string" + "type": "string", + "sensitive": true }, "aws_default_region": { "value": "us-east-1", @@ -14,7 +15,8 @@ }, "aws_secret_access_key": { "value": "Z+AOjQU9M4SwKVU2meYtyNxXtz1Axu/9xohvteXf", - "type": "string" + "type": "string", + "sensitive": true }, "queue_url": { "value": "https://sqs.us-east-1.amazonaws.com/679918342773/integreat-mail-staging", @@ -33,7 +35,7 @@ "attributes": { "account_id": "679918342773", "arn": "arn:aws:iam::679918342773:user/bryce", - "id": "2020-09-25 00:21:01.39516 +0000 UTC", + "id": "679918342773", "user_id": "AIDAJPUJFTOKO4IRADMV4" }, "sensitive_attributes": [] @@ -72,6 +74,7 @@ "status": "ISSUED", "subject_alternative_names": [], "tags": {}, + "tags_all": {}, "validation_emails": [], "validation_method": "DNS" }, @@ -91,6 +94,12 @@ "attributes": { "capacity_provider_strategy": [], "cluster": "arn:aws:ecs:us-east-1:679918342773:cluster/default", + "deployment_circuit_breaker": [ + { + "enable": false, + "rollback": false + } + ], "deployment_controller": [ { "type": "ECS" @@ -100,10 +109,11 @@ "deployment_minimum_healthy_percent": 100, "desired_count": 1, "enable_ecs_managed_tags": false, + "enable_execute_command": false, "force_new_deployment": null, "health_check_grace_period_seconds": 600, "iam_role": "aws-service-role", - "id": "arn:aws:ecs:us-east-1:679918342773:service/integreat_app_staging", + "id": "arn:aws:ecs:us-east-1:679918342773:service/default/integreat_app_staging", "launch_type": "FARGATE", "load_balancer": [ { @@ -138,20 +148,101 @@ "container_name": "", "container_port": 0, "port": 0, - "registry_arn": "arn:aws:servicediscovery:us-east-1:679918342773:service/srv-6auj2wqsh55k2nuj" + "registry_arn": "arn:aws:servicediscovery:us-east-1:679918342773:service/srv-nsn252bfk4r6bzpj" } ], - "tags": {}, - "task_definition": "arn:aws:ecs:us-east-1:679918342773:task-definition/integreat_app_staging:3", + "tags": null, + "tags_all": {}, + "task_definition": "arn:aws:ecs:us-east-1:679918342773:task-definition/integreat_app_staging:81", "timeouts": { "delete": null - } + }, + "wait_for_steady_state": false }, "sensitive_attributes": [], "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjoxMjAwMDAwMDAwMDAwfX0=", "dependencies": [ "aws_ecs_task_definition.integreat_app", - "aws_lb_target_group.integreat_app" + "aws_lb_target_group.integreat_app", + "aws_service_discovery_service.service" + ] + } + ] + }, + { + "mode": "managed", + "type": "aws_ecs_service", + "name": "integreat_background_worker", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "capacity_provider_strategy": [], + "cluster": "arn:aws:ecs:us-east-1:679918342773:cluster/default", + "deployment_circuit_breaker": [ + { + "enable": false, + "rollback": false + } + ], + "deployment_controller": [ + { + "type": "ECS" + } + ], + "deployment_maximum_percent": 200, + "deployment_minimum_healthy_percent": 100, + "desired_count": 1, + "enable_ecs_managed_tags": false, + "enable_execute_command": false, + "force_new_deployment": null, + "health_check_grace_period_seconds": 0, + "iam_role": "aws-service-role", + "id": "arn:aws:ecs:us-east-1:679918342773:service/default/integreat_background_worker_staging", + "launch_type": "FARGATE", + "load_balancer": [], + "name": "integreat_background_worker_staging", + "network_configuration": [ + { + "assign_public_ip": true, + "security_groups": [ + "sg-004e5855310c453a3", + "sg-02d167406b1082698" + ], + "subnets": [ + "subnet-5e675761", + "subnet-8519fde2", + "subnet-89bab8d4" + ] + } + ], + "ordered_placement_strategy": [], + "placement_constraints": [], + "platform_version": "LATEST", + "propagate_tags": "NONE", + "scheduling_strategy": "REPLICA", + "service_registries": [ + { + "container_name": "", + "container_port": 0, + "port": 0, + "registry_arn": "arn:aws:servicediscovery:us-east-1:679918342773:service/srv-4cuqgdwqo5acwqtq" + } + ], + "tags": null, + "tags_all": {}, + "task_definition": "arn:aws:ecs:us-east-1:679918342773:task-definition/integreat_background-worker_staging:1", + "timeouts": { + "delete": null + }, + "wait_for_steady_state": false + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjoxMjAwMDAwMDAwMDAwfX0=", + "dependencies": [ + "aws_ecs_task_definition.integreat_background_worker", + "aws_service_discovery_service.background_worker_service" ] } ] @@ -165,14 +256,53 @@ { "schema_version": 1, "attributes": { - "arn": "arn:aws:ecs:us-east-1:679918342773:task-definition/integreat_app_staging:3", - "container_definitions": "[{\"cpu\":0,\"environment\":[{\"name\":\"config\",\"value\":\"/usr/local/config/staging.edn\"}],\"essential\":true,\"image\":\"679918342773.dkr.ecr.us-east-1.amazonaws.com/integreat\",\"logConfiguration\":{\"logDriver\":\"awslogs\",\"options\":{\"awslogs-group\":\"/ecs/integreat-app\",\"awslogs-region\":\"us-east-1\",\"awslogs-stream-prefix\":\"ecs\"}},\"mountPoints\":[],\"name\":\"integreat-app\",\"portMappings\":[{\"containerPort\":3000,\"hostPort\":3000,\"protocol\":\"tcp\"},{\"containerPort\":9000,\"hostPort\":9000,\"protocol\":\"tcp\"}],\"volumesFrom\":[]}]", + "arn": "arn:aws:ecs:us-east-1:679918342773:task-definition/integreat_app_staging:81", + "container_definitions": "[{\"cpu\":0,\"environment\":[{\"name\":\"config\",\"value\":\"/usr/local/config/staging.edn\"}],\"essential\":true,\"image\":\"679918342773.dkr.ecr.us-east-1.amazonaws.com/integreat\",\"logConfiguration\":{\"logDriver\":\"awslogs\",\"options\":{\"awslogs-group\":\"/ecs/integreat-app-staging\",\"awslogs-region\":\"us-east-1\",\"awslogs-stream-prefix\":\"ecs\"}},\"mountPoints\":[],\"name\":\"integreat-app\",\"portMappings\":[{\"containerPort\":3000,\"hostPort\":3000,\"protocol\":\"tcp\"},{\"containerPort\":9000,\"hostPort\":9000,\"protocol\":\"tcp\"}],\"volumesFrom\":[]}]", "cpu": "2048", + "ephemeral_storage": [], "execution_role_arn": "arn:aws:iam::679918342773:role/ecsTaskExecutionRole", "family": "integreat_app_staging", "id": "integreat_app_staging", "inference_accelerator": [], "ipc_mode": "", + "memory": "8192", + "network_mode": "awsvpc", + "pid_mode": "", + "placement_constraints": [], + "proxy_configuration": [], + "requires_compatibilities": [ + "FARGATE" + ], + "revision": 81, + "runtime_platform": [], + "tags": null, + "tags_all": {}, + "task_role_arn": "arn:aws:iam::679918342773:role/datomic-ddb", + "volume": [] + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjEifQ==" + } + ] + }, + { + "mode": "managed", + "type": "aws_ecs_task_definition", + "name": "integreat_background_worker", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 1, + "attributes": { + "arn": "arn:aws:ecs:us-east-1:679918342773:task-definition/integreat_background-worker_staging:1", + "container_definitions": "[{\"cpu\":0,\"environment\":[{\"name\":\"config\",\"value\":\"/usr/local/config/staging-background-worker.edn\"}],\"essential\":true,\"image\":\"679918342773.dkr.ecr.us-east-1.amazonaws.com/integreat\",\"logConfiguration\":{\"logDriver\":\"awslogs\",\"options\":{\"awslogs-group\":\"/ecs/integreat-background-worker-staging\",\"awslogs-region\":\"us-east-1\",\"awslogs-stream-prefix\":\"ecs\"}},\"mountPoints\":[],\"name\":\"integreat-app\",\"portMappings\":[{\"containerPort\":9000,\"hostPort\":9000,\"protocol\":\"tcp\"},{\"containerPort\":9090,\"hostPort\":9090,\"protocol\":\"tcp\"}],\"volumesFrom\":[]}]", + "cpu": "1024", + "ephemeral_storage": [], + "execution_role_arn": "arn:aws:iam::679918342773:role/ecsTaskExecutionRole", + "family": "integreat_background-worker_staging", + "id": "integreat_background-worker_staging", + "inference_accelerator": [], + "ipc_mode": "", "memory": "4096", "network_mode": "awsvpc", "pid_mode": "", @@ -181,8 +311,10 @@ "requires_compatibilities": [ "FARGATE" ], - "revision": 3, - "tags": {}, + "revision": 1, + "runtime_platform": [], + "tags": null, + "tags_all": {}, "task_role_arn": "arn:aws:iam::679918342773:role/datomic-ddb", "volume": [] }, @@ -200,7 +332,9 @@ { "schema_version": 0, "attributes": { + "create_date": "2018-04-08T22:09:45Z", "encrypted_secret": null, + "encrypted_ses_smtp_password_v4": null, "id": "AKIAJIS67OSJARD2E6VQ", "key_fingerprint": null, "pgp_key": null, @@ -232,6 +366,7 @@ "path": "/", "permissions_boundary": null, "tags": {}, + "tags_all": {}, "unique_id": "AIDAJ4KJ7STJZNLIN3M6S" }, "sensitive_attributes": [] @@ -276,13 +411,16 @@ ], "arn": "arn:aws:elasticloadbalancing:us-east-1:679918342773:loadbalancer/app/integreat-app-staging/dc040205e561419e", "arn_suffix": "app/integreat-app-staging/dc040205e561419e", + "customer_owned_ipv4_pool": "", + "desync_mitigation_mode": "defensive", "dns_name": "integreat-app-staging-229185591.us-east-1.elb.amazonaws.com", "drop_invalid_header_fields": false, "enable_cross_zone_load_balancing": null, "enable_deletion_protection": true, "enable_http2": true, + "enable_waf_fail_open": false, "id": "arn:aws:elasticloadbalancing:us-east-1:679918342773:loadbalancer/app/integreat-app-staging/dc040205e561419e", - "idle_timeout": 60, + "idle_timeout": 120, "internal": false, "ip_address_type": "ipv4", "load_balancer_type": "application", @@ -294,31 +432,43 @@ "subnet_mapping": [ { "allocation_id": "", + "ipv6_address": "", + "outpost_id": "", "private_ipv4_address": "", "subnet_id": "subnet-16161a39" }, { "allocation_id": "", + "ipv6_address": "", + "outpost_id": "", "private_ipv4_address": "", "subnet_id": "subnet-323deb78" }, { "allocation_id": "", + "ipv6_address": "", + "outpost_id": "", "private_ipv4_address": "", "subnet_id": "subnet-44c2774b" }, { "allocation_id": "", + "ipv6_address": "", + "outpost_id": "", "private_ipv4_address": "", "subnet_id": "subnet-5e675761" }, { "allocation_id": "", + "ipv6_address": "", + "outpost_id": "", "private_ipv4_address": "", "subnet_id": "subnet-8519fde2" }, { "allocation_id": "", + "ipv6_address": "", + "outpost_id": "", "private_ipv4_address": "", "subnet_id": "subnet-89bab8d4" } @@ -332,6 +482,7 @@ "subnet-89bab8d4" ], "tags": {}, + "tags_all": {}, "timeouts": null, "vpc_id": "vpc-b5b7d6ce", "zone_id": "Z35SXDOTRQ7X7K" @@ -350,6 +501,7 @@ { "schema_version": 0, "attributes": { + "alpn_policy": null, "arn": "arn:aws:elasticloadbalancing:us-east-1:679918342773:listener/app/integreat-app-staging/dc040205e561419e/8e5542063f461bb4", "certificate_arn": null, "default_action": [ @@ -378,6 +530,8 @@ "port": 80, "protocol": "HTTP", "ssl_policy": "", + "tags": {}, + "tags_all": {}, "timeouts": { "read": null } @@ -399,6 +553,7 @@ { "schema_version": 0, "attributes": { + "alpn_policy": null, "arn": "arn:aws:elasticloadbalancing:us-east-1:679918342773:listener/app/integreat-app-staging/dc040205e561419e/b89075bc6a559a4f", "certificate_arn": "arn:aws:acm:us-east-1:679918342773:certificate/eec88d2f-93c4-4e7e-a167-e75d853f0759", "default_action": [ @@ -418,6 +573,8 @@ "port": 443, "protocol": "HTTPS", "ssl_policy": "ELBSecurityPolicy-2016-08", + "tags": {}, + "tags_all": {}, "timeouts": { "read": null } @@ -474,7 +631,7 @@ "/css/*", "/finance-font/*", "/img/*", - "/js/compiled/app.js", + "/js/compiled/*", "index.html" ] } @@ -485,15 +642,14 @@ ], "id": "arn:aws:elasticloadbalancing:us-east-1:679918342773:listener-rule/app/integreat-app-staging/dc040205e561419e/b89075bc6a559a4f/8bc88fa379868c55", "listener_arn": "arn:aws:elasticloadbalancing:us-east-1:679918342773:listener/app/integreat-app-staging/dc040205e561419e/b89075bc6a559a4f", - "priority": 1 + "priority": 1, + "tags": {}, + "tags_all": {} }, "sensitive_attributes": [], "private": "bnVsbA==", "dependencies": [ - "aws_acm_certificate.cert", - "aws_lb.integreat_app", - "aws_lb_listener.https", - "aws_lb_target_group.integreat_app" + "aws_lb_listener.https" ] } ] @@ -509,7 +665,8 @@ "attributes": { "arn": "arn:aws:elasticloadbalancing:us-east-1:679918342773:targetgroup/integreat-app-staging/34af39c4c46e7ce1", "arn_suffix": "targetgroup/integreat-app-staging/34af39c4c46e7ce1", - "deregistration_delay": 120, + "connection_termination": false, + "deregistration_delay": "120", "health_check": [ { "enabled": true, @@ -519,8 +676,8 @@ "path": "/api/health-check", "port": "traffic-port", "protocol": "HTTP", - "timeout": 5, - "unhealthy_threshold": 2 + "timeout": 14, + "unhealthy_threshold": 5 } ], "id": "arn:aws:elasticloadbalancing:us-east-1:679918342773:targetgroup/integreat-app-staging/34af39c4c46e7ce1", @@ -529,17 +686,21 @@ "name": "integreat-app-staging", "name_prefix": null, "port": 80, + "preserve_client_ip": null, "protocol": "HTTP", + "protocol_version": "HTTP1", "proxy_protocol_v2": false, "slow_start": 0, "stickiness": [ { "cookie_duration": 86400, + "cookie_name": "", "enabled": false, "type": "lb_cookie" } ], "tags": {}, + "tags_all": {}, "target_type": "ip", "vpc_id": "vpc-b5b7d6ce" }, @@ -572,12 +733,13 @@ "lifecycle_rule": [], "logging": [], "object_lock_configuration": [], - "policy": "{\"Id\":\"Policy1526084187222\",\"Statement\":[{\"Action\":\"s3:GetObject\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:s3:::data.staging.app.integreatconsult.com/*\",\"Sid\":\"Stmt1526084185514\"}],\"Version\":\"2012-10-17\"}", + "policy": "{\"Id\":\"Policy1526084187222\",\"Statement\":[{\"Action\":[\"s3:GetObject\"],\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:s3:::data.staging.app.integreatconsult.com/*\",\"Sid\":\"Stmt1526084185514\"},{\"Action\":\"s3:*\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::679918342773:role/datomic-ddb\"},\"Resource\":\"arn:aws:s3:::data.staging.app.integreatconsult.com\",\"Sid\":\"AllowReadForProd\"}],\"Version\":\"2012-10-17\"}", "region": "us-east-1", "replication_configuration": [], "request_payer": "BucketOwner", "server_side_encryption_configuration": [], "tags": {}, + "tags_all": {}, "versioning": [ { "enabled": false, @@ -630,6 +792,7 @@ "request_payer": "BucketOwner", "server_side_encryption_configuration": [], "tags": {}, + "tags_all": {}, "versioning": [ { "enabled": false, @@ -694,6 +857,7 @@ "request_payer": "BucketOwner", "server_side_encryption_configuration": [], "tags": {}, + "tags_all": {}, "versioning": [ { "enabled": false, @@ -750,6 +914,88 @@ } ] }, + { + "mode": "managed", + "type": "aws_service_discovery_service", + "name": "background_worker_service", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "arn": "arn:aws:servicediscovery:us-east-1:679918342773:service/srv-4cuqgdwqo5acwqtq", + "description": "", + "dns_config": [ + { + "dns_records": [ + { + "ttl": 10, + "type": "A" + } + ], + "namespace_id": "ns-gv2z744em7myo2jp", + "routing_policy": "MULTIVALUE" + } + ], + "force_destroy": false, + "health_check_config": [], + "health_check_custom_config": [ + { + "failure_threshold": 1 + } + ], + "id": "srv-4cuqgdwqo5acwqtq", + "name": "integreat-background-worker-staging", + "namespace_id": "ns-gv2z744em7myo2jp", + "tags": null, + "tags_all": {} + }, + "sensitive_attributes": [], + "private": "bnVsbA==" + } + ] + }, + { + "mode": "managed", + "type": "aws_service_discovery_service", + "name": "service", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "arn": "arn:aws:servicediscovery:us-east-1:679918342773:service/srv-nsn252bfk4r6bzpj", + "description": "", + "dns_config": [ + { + "dns_records": [ + { + "ttl": 10, + "type": "A" + } + ], + "namespace_id": "ns-gv2z744em7myo2jp", + "routing_policy": "MULTIVALUE" + } + ], + "force_destroy": false, + "health_check_config": [], + "health_check_custom_config": [ + { + "failure_threshold": 1 + } + ], + "id": "srv-nsn252bfk4r6bzpj", + "name": "integreat-app-staging", + "namespace_id": "ns-gv2z744em7myo2jp", + "tags": null, + "tags_all": {} + }, + "sensitive_attributes": [], + "private": "bnVsbA==" + } + ] + }, { "mode": "managed", "type": "aws_ses_receipt_rule", @@ -761,6 +1007,7 @@ "attributes": { "add_header_action": [], "after": null, + "arn": "arn:aws:ses:us-east-1:679918342773:receipt-rule-set/default-rule-set:receipt-rule/store-staging", "bounce_action": [], "enabled": true, "id": "store-staging", @@ -803,6 +1050,7 @@ { "schema_version": 0, "attributes": { + "arn": "arn:aws:ses:us-east-1:679918342773:receipt-rule-set/default-rule-set", "id": "default-rule-set", "rule_set_name": "default-rule-set" }, @@ -810,6 +1058,42 @@ } ] }, + { + "mode": "managed", + "type": "aws_sqs_queue", + "name": "background-request", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "arn": "arn:aws:sqs:us-east-1:679918342773:integreat-background-request-staging", + "content_based_deduplication": false, + "deduplication_scope": "", + "delay_seconds": 0, + "fifo_queue": false, + "fifo_throughput_limit": "", + "id": "https://sqs.us-east-1.amazonaws.com/679918342773/integreat-background-request-staging", + "kms_data_key_reuse_period_seconds": 300, + "kms_master_key_id": "", + "max_message_size": 262144, + "message_retention_seconds": 345600, + "name": "integreat-background-request-staging", + "name_prefix": "", + "policy": "{\"Statement\":[{\"Action\":\"sqs:*\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::679918342773:role/datomic-ddb\"},\"Resource\":\"arn:aws:sqs:*:*:integreat-background-request-staging\"}],\"Version\":\"2012-10-17\"}", + "receive_wait_time_seconds": 0, + "redrive_policy": "", + "sqs_managed_sse_enabled": false, + "tags": null, + "tags_all": {}, + "url": "https://sqs.us-east-1.amazonaws.com/679918342773/integreat-background-request-staging", + "visibility_timeout_seconds": 30 + }, + "sensitive_attributes": [], + "private": "bnVsbA==" + } + ] + }, { "mode": "managed", "type": "aws_sqs_queue", @@ -821,19 +1105,24 @@ "attributes": { "arn": "arn:aws:sqs:us-east-1:679918342773:integreat-mail-staging", "content_based_deduplication": false, + "deduplication_scope": "", "delay_seconds": 0, "fifo_queue": false, + "fifo_throughput_limit": "", "id": "https://sqs.us-east-1.amazonaws.com/679918342773/integreat-mail-staging", "kms_data_key_reuse_period_seconds": 300, "kms_master_key_id": "", "max_message_size": 262144, "message_retention_seconds": 345600, "name": "integreat-mail-staging", - "name_prefix": null, - "policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"sqs:SendMessage\",\"Resource\":\"arn:aws:sqs:*:*:integreat-mail-staging\",\"Condition\":{\"ArnEquals\":{\"aws:SourceArn\":\"arn:aws:s3:::integreat-mail-staging\"}}}]}", + "name_prefix": "", + "policy": "{\"Statement\":[{\"Action\":\"sqs:SendMessage\",\"Condition\":{\"ArnEquals\":{\"aws:SourceArn\":\"arn:aws:s3:::integreat-mail-staging\"}},\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:sqs:*:*:integreat-mail-staging\"}],\"Version\":\"2012-10-17\"}", "receive_wait_time_seconds": 0, "redrive_policy": "", + "sqs_managed_sse_enabled": false, "tags": {}, + "tags_all": {}, + "url": "https://sqs.us-east-1.amazonaws.com/679918342773/integreat-mail-staging", "visibility_timeout_seconds": 30 }, "sensitive_attributes": [],