getting cloud working ok.

This commit is contained in:
2023-03-19 22:47:46 -07:00
parent 78519663ac
commit 45ab9fe0af
13 changed files with 2139 additions and 24 deletions

2
.gitignore vendored
View File

@@ -25,3 +25,5 @@ node_modules
.calva/**
.lsp/**
*.~undo-tree~
backups
terraform/.gitx

View File

@@ -1,6 +1,6 @@
FROM 679918342773.dkr.ecr.us-east-1.amazonaws.com/jre-alpine:latest
RUN apt update
RUN apt install -y poppler-utils
FROM amazoncorretto:11.0.18-al2
RUN yum update
RUN yum install -y poppler-utils
COPY target/auto-ap.jar /usr/local/
COPY config /usr/local/config/
CMD java -Dlogback.configurationFile=logback-prod.xml -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=9090 -Dcom.sun.management.jmxremote.rmi.port=9090 -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.local.only=false -XX:InitialRAMPercentage=75 -XX:MaxRAMPercentage=75 -jar /usr/local/auto-ap.jar

View File

@@ -12,7 +12,7 @@ phases:
- echo Logging in to Amazon ECR...
- aws --version
- $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)
- REPOSITORY_URI=679918342773.dkr.ecr.us-east-1.amazonaws.com/integreat
- REPOSITORY_URI=679918342773.dkr.ecr.us-east-1.amazonaws.com/integreat-cloud
- COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
- IMAGE_TAG=${COMMIT_HASH:=latest}
- wget https://raw.github.com/technomancy/leiningen/stable/bin/lein

33
config/prod-cloud.edn Normal file
View File

@@ -0,0 +1,33 @@
{:scheme "https"
:dd-env "prod-cloud"
:dd-service "integreat-app-cloud"
:jwt-secret "auto ap invoices are awesome"
:invoice-import-queue-url "https://sqs.us-east-1.amazonaws.com/679918342773/integreat-mail-prod-cloud"
:requests-queue-url "https://sqs.us-east-1.amazonaws.com/679918342773/integreat-background-request-prod-cloud"
:invoice-email "invoices@mail.app.integreatconsult.com"
:import-failure-destination-email "ben@integreatconsult.com"
:data-bucket "data.prod.app.integreatconsult.com"
:yodlee-cobrand-name "qstartus12"
:yodlee-cobrand-login "qstartus12"
:yodlee-cobrand-password "MPD@mg78hd"
:yodlee-user-login "integreat"
:yodlee-user-password "Import3transactions!"
:yodlee-base-url "https://quickstart2.api.yodlee.com/ysl"
:yodlee-app "10003600"
:yodlee-fastlink "https://quickstartus2node.yodleeinteractive.com/authenticate/qstartus12/?channelAppName=quickstartus2"
:yodlee-proxy-host "172.31.10.83"
:yodlee-proxy-port 8888
:run-background? false
:run-web? true
:yodlee2-admin-user "93398522-412b-470d-8400-3691392b12fb_ADMIN"
:yodlee2-integreat-user "integreat-main"
:yodlee2-client-id "3AATcwfPsWP1rP9oDoo4HvZhtaroGVcA"
:yodlee2-client-secret "cXTBmKbGfkaBFIpM"
:yodlee2-base-url "https://production.api.yodlee.com/ysl"
:yodlee2-fastlink "https://fl4.prod.yodlee.com/authenticate/USDevexProd2-319/fastlink/?channelAppName=usdevexprod2"
:yodlee2-proxy-host "172.31.10.83"
:yodlee2-proxy-port 8888
:plaid {:base-url "https://production.plaid.com"
:client-id "61bfab05f7e762001b323f79"
:secret-key "2be026ca5e7f7e9f23f2fb4d7c914d"}
}

View File

@@ -3,6 +3,8 @@
:output-dir "resources/public/js/compiled/"
:source-map "resources/public/js/compiled/app.js.map"
:parallel-build true
:language-in :ecmascript-next
:language-out :ecmascript-next
:optimizations :advanced
:pretty-print false

View File

@@ -28,7 +28,7 @@
[org.apache.lucene/lucene-queryparser "9.3.0"]
[metosin/malli "0.8.9"]
[tolitius/yang "0.1.23"]
[ring "1.8.2" :exclusions [commons-codec
[ring "1.9.6" :exclusions [commons-codec
commons-io
clj-time
ring/ring-core
@@ -37,7 +37,7 @@
#_org.eclipse.jetty/jetty-util
#_org.eclipse.jetty/jetty-server]]
[ring/ring-jetty-adapter "1.8.2" :exclusions
[ring/ring-jetty-adapter "1.9.6" :exclusions
[org.eclipse.jetty/jetty-server]]
[yogthos/config "1.1.7"]
[dk.ative/docjure "1.14.0"]
@@ -93,8 +93,8 @@
#_[org.eclipse.jetty/jetty-http "11.0.0"]
#_[org.eclipse.jetty/jetty-util "11.0.0"]
#_[org.eclipse.jetty/jetty-server "11.0.0"]
[org.eclipse.jetty.websocket/websocket-servlet "9.4.35.v20201120"]
[org.eclipse.jetty.websocket/websocket-server "9.4.35.v20201120"]
[org.eclipse.jetty.websocket/websocket-servlet "9.4.48.v20220622"]
[org.eclipse.jetty.websocket/websocket-server "9.4.48.v20220622"]
#_[org.eclipse.jetty.websocket/websocket-servlet "11.0.0"]
[org.clojure/data.json "1.0.0"]
[org.clojure/data.csv "1.0.0"]
@@ -159,7 +159,8 @@
:uberjar
{:prep-tasks ["fig:min" ]
{:java-cmd "/usr/lib/jvm/java-11-openjdk/bin/java"
:prep-tasks ["fig:min" ]
:dependencies [[com.bhauman/figwheel-main "0.2.18" :exclusions [org.clojure/clojurescript
ring
ring/ring-core

View File

@@ -703,7 +703,7 @@
:endpoint "https://53syis8n1m.execute-api.us-east-1.amazonaws.com"})
;; _ (dc/create-database client {:db-name "prod-mirror"})
connection (dc/connect client {:db-name "prod-mirror"})]
(load-from-backup "backups/8e245d3d-be7a-4d90-8e9e-e6a110582658" connection)
(load-from-backup "backups/8e245d3d-be7a-4d90-8e9e-e6a110582658" connection ["transaction"])
)

View File

@@ -0,0 +1,163 @@
(ns restore-from-backup
(:require [clojure.java.io :as io]
[amazonica.aws.s3 :as s3]
[config.core :refer [env]]
[clojure.core.async :as a]
[datomic.client.api :as dc]
[lambdaisland.edn-lines :as ednl]
[datomic.client.api.async :as dca]
[datomic.dev-local :as dl]
[clojure.set :as set]
[clojure.string :as str]
[clj-http.client :as client]))
(def client (dc/client {:server-type :cloud
:region "us-east-1"
:system "iol-cloud"
:endpoint "https://53syis8n1m.execute-api.us-east-1.amazonaws.com"}))
(defn order-of-insert [entity-dependencies]
(loop [entity-dependencies entity-dependencies
order []]
(let [next-order (for [[entity deps] entity-dependencies
:when (not (seq deps))]
entity)
next-deps (reduce
(fn [entity-dependencies next-entity]
(into {}
(map
(fn [[k v]]
[k (disj v next-entity)])
entity-dependencies)))
(apply dissoc entity-dependencies next-order)
next-order)]
(println order next-deps)
(if (seq next-deps)
(recur next-deps (into order next-order))
(into order next-order)))))
(defn tx-pipeline
"Transacts data from from-ch. Returns a map with:
:result, a return channel getting {:error t} or {:completed n}
:stop, a fn you can use to terminate early."
[conn conc from-ch f]
(let [to-ch (a/chan 400)
done-ch (a/chan)
transact-data (fn [data result]
(a/go
(try
(let [tx-r (a/<! (dca/transact conn {:tx-data (f data)}))]
(when (:db/error tx-r)
(throw (ex-info "Invalid transaction" tx-r)))
(a/>! result tx-r)
(a/close! result))
; if exception in a transaction
; will close channels and put error
; on done channel.
(catch Throwable t
(.printStackTrace t)
(a/close! from-ch)
(a/close! to-ch)
(a/>! done-ch {:error t})))))]
; go block prints a '.' after every 1000 transactions, puts completed
; report on done channel when no value left to be taken.
(a/go-loop [total 0]
(if (= (mod total 5) 0)
(do
(print ".")
(flush)))
(if-let [c (a/<! to-ch)]
(recur (inc total))
(a/>! done-ch {:completed total})))
; pipeline that uses transducer form of map to transact data taken from
; from-ch and puts results on to-ch
(a/pipeline-async conc to-ch transact-data from-ch)
; returns done channel and a function that you can use
; for early termination.
{:result done-ch
:stop (fn [] (a/close! to-ch))}))
(def loaded (atom #{}))
(defn load-from-backup
([backup-id connection] (load-from-backup backup-id connection nil))
([backup-id connection item-list]
(let [schema (clojure.edn/read-string (slurp (str backup-id "/schema.edn")))
full-dependencies (clojure.edn/read-string (slurp (str backup-id "/full-dependencies.edn")))
entity-dependencies (clojure.edn/read-string (slurp (str backup-id "/entity-dependencies.edn")))]
(dc/transact connection {:tx-data [{:db/ident :entity/migration-key
:db/unique :db.unique/identity
:db/cardinality :db.cardinality/one
:db/valueType :db.type/long}]})
(dc/transact connection {:tx-data (map
(fn [s]
(set/rename-keys s {:db/id :entity/migration-key}))
schema)})
(dc/transact connection {:tx-data [{:entity/migration-key 17592257603901 :vendor/name "unknown"}
{:entity/migration-key 17592232621701}
{:entity/migration-key 17592263907739}
{:entity/migration-key 17592271516922}]
})
(doseq [entity (or item-list (filter (complement (conj @loaded "audit")) (order-of-insert entity-dependencies)))
:let [_ (swap! loaded conj entity)
_ (println "querying for " entity)
entities (ednl/slurp (str backup-id "/" entity ".ednl"))
_ (println "Found some! here's a few: " (take 3 entities))
tx-chan (a/chan 50)
entities->transaction (fn [entities]
entities)
pipeline (tx-pipeline connection
10
tx-chan
entities->transaction)]]
(doseq [batch (partition-all 200 entities)]
(try
(a/>!! tx-chan batch)
(catch Exception e
(println e)
((:stop pipeline)))))
(println "waiting for done from" pipeline)
(flush)
(a/close! tx-chan)
(println (a/<!! (:result pipeline)))
((:stop pipeline))
(println)
(println "Done")))))
;; cloud load
(comment
(let [;; _ (dc/create-database client {:db-name "prod-mirror"})
connection (dc/connect client {:db-name "prod-mirror"})]
(load-from-backup "backups/8e245d3d-be7a-4d90-8e9e-e6a110582658" connection ["charge" "expected-deposit" "transaction"])
)
)
;; => nil

View File

@@ -25,19 +25,6 @@ resource "aws_ecs_task_definition" "integreat_app" {
}
resource "aws_ecs_task_definition" "integreat_background_worker" {
family = "integreat_background-worker_${var.stage}"
container_definitions = file("${var.stage}-background-worker-taskdef.json")
memory = 2048
cpu = 512
network_mode = "awsvpc"
requires_compatibilities = ["FARGATE"]
execution_role_arn = var.execution_role_arn
task_role_arn = var.task_role_arn
}
resource "aws_ecs_service" "integreat_app" {
name = "integreat_app_${var.stage}"
cluster = var.ecs_cluster
@@ -275,6 +262,7 @@ resource "aws_service_discovery_service" "service" {
}
}
/*
module "square_import_job" {
source = "./background-job/"
ecs_cluster = var.ecs_cluster
@@ -468,4 +456,5 @@ module "load_historical_sales_job" {
use_schedule = false
memory = 4096
cpu = 1024
}
}
*/

View File

@@ -0,0 +1,67 @@
[
{
"environment": [
{
"name": "config",
"value": "/usr/local/config/prod-cloud.edn"
},
{
"name": "DD_ENV",
"value": "prod"
},
{
"name": "DD_SERVICE",
"value": "integreat-app-cloud"
}
],
"essential": true,
"image": "679918342773.dkr.ecr.us-east-1.amazonaws.com/integreat-cloud",
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/integreat-app-prod",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "ecs"
}
},
"dockerLabels": {
"com.datadoghq.tags.env": "prod-cloud",
"com.datadoghq.tags.service": "integreat-app"
},
"mountPoints": [],
"name": "integreat-app",
"portMappings": [
{
"containerPort": 3000,
"hostPort": 3000,
"protocol": "tcp"
},
{
"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"
}
],
"essential": true,
"image": "public.ecr.aws/datadog/agent:latest",
"name": "datadog-agent"
}
]

View File

@@ -0,0 +1,13 @@
aws_access_key_id="AKIAINHACMVQJ6NYD26A"
aws_secret_access_key="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"
domain="cloud.app.integreatconsult.com"
invoice_address="invoices@cloud.mail.app.integreatconsult.com"
base_url="https://cloud.app.integreatconsult.com"
stage="prod-cloud"
task_role_arn="arn:aws:iam::679918342773:role/datomic-ddb"
execution_role_arn="arn:aws:iam::679918342773:role/ecsTaskExecutionRole"
ecs_cluster="arn:aws:ecs:us-east-1:679918342773:cluster/default"
# service_registry="arn:aws:servicediscovery:us-east-1:679918342773:service/srv-6auj2wqsh55k2nuj"
local_namespace="ns-gv2z744em7myo2jp"
desired_count=2
background_desired_count=1

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,821 @@
{
"version": 4,
"terraform_version": "1.3.8",
"serial": 39,
"lineage": "cf731bb4-8fb3-47af-6e29-22030e089d96",
"outputs": {
"aws_access_key_id": {
"value": "AKIAZ4TSKSJ25YYV6N4S",
"type": "string",
"sensitive": true
},
"aws_default_region": {
"value": "us-east-1",
"type": "string"
},
"aws_secret_access_key": {
"value": "r18v/AYwU4ZRoWMRg/KYqfY2CCO+aHFtTedQH2IT",
"type": "string",
"sensitive": true
},
"queue_url": {
"value": "https://sqs.us-east-1.amazonaws.com/679918342773/integreat-mail-prod-cloud",
"type": "string"
}
},
"resources": [
{
"mode": "data",
"type": "aws_caller_identity",
"name": "current",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"account_id": "679918342773",
"arn": "arn:aws:iam::679918342773:user/bryce",
"id": "679918342773",
"user_id": "AIDAJPUJFTOKO4IRADMV4"
},
"sensitive_attributes": []
}
]
},
{
"mode": "managed",
"type": "aws_acm_certificate",
"name": "cert",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"arn": "arn:aws:acm:us-east-1:679918342773:certificate/a10ec71a-e49b-4dc0-9eb3-3c43575bf125",
"certificate_authority_arn": "",
"certificate_body": null,
"certificate_chain": null,
"domain_name": "cloud.app.integreatconsult.com",
"domain_validation_options": [
{
"domain_name": "cloud.app.integreatconsult.com",
"resource_record_name": "_c390791a3881aa0607770c1f504f2ea4.cloud.app.integreatconsult.com.",
"resource_record_type": "CNAME",
"resource_record_value": "_1c3269cc301d56aa5302d4e598cb1980.ghcgkbmxjw.acm-validations.aws."
}
],
"id": "arn:aws:acm:us-east-1:679918342773:certificate/a10ec71a-e49b-4dc0-9eb3-3c43575bf125",
"options": [
{
"certificate_transparency_logging_preference": "ENABLED"
}
],
"private_key": null,
"status": "PENDING_VALIDATION",
"subject_alternative_names": [],
"tags": {},
"tags_all": {},
"validation_emails": [],
"validation_method": "DNS"
},
"sensitive_attributes": [],
"private": "bnVsbA=="
}
]
},
{
"mode": "managed",
"type": "aws_ecs_task_definition",
"name": "integreat_app",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 1,
"attributes": {
"arn": "arn:aws:ecs:us-east-1:679918342773:task-definition/integreat_app_prod-cloud:2",
"container_definitions": "[{\"cpu\":0,\"dockerLabels\":{\"com.datadoghq.tags.env\":\"prod-cloud\",\"com.datadoghq.tags.service\":\"integreat-app\"},\"environment\":[{\"name\":\"DD_ENV\",\"value\":\"prod\"},{\"name\":\"DD_SERVICE\",\"value\":\"integreat-app-cloud\"},{\"name\":\"config\",\"value\":\"/usr/local/config/prod-cloud.edn\"}],\"essential\":true,\"image\":\"679918342773.dkr.ecr.us-east-1.amazonaws.com/integreat-cloud\",\"logConfiguration\":{\"logDriver\":\"awslogs\",\"options\":{\"awslogs-group\":\"/ecs/integreat-app-prod\",\"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\"},{\"containerPort\":9090,\"hostPort\":9090,\"protocol\":\"tcp\"}],\"volumesFrom\":[]},{\"cpu\":0,\"environment\":[{\"name\":\"DD_API_KEY\",\"value\":\"ce10d932c47b358e81081ae67bd8c112\"},{\"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",
"family": "integreat_app_prod-cloud",
"id": "integreat_app_prod-cloud",
"inference_accelerator": [],
"ipc_mode": "",
"memory": "8192",
"network_mode": "awsvpc",
"pid_mode": "",
"placement_constraints": [],
"proxy_configuration": [],
"requires_compatibilities": [
"FARGATE"
],
"revision": 2,
"runtime_platform": [],
"tags": {},
"tags_all": {},
"task_role_arn": "arn:aws:iam::679918342773:role/datomic-ddb",
"volume": []
},
"sensitive_attributes": [],
"private": "eyJzY2hlbWFfdmVyc2lvbiI6IjEifQ=="
}
]
},
{
"mode": "managed",
"type": "aws_iam_access_key",
"name": "app_user",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"create_date": "2023-03-19T03:42:18Z",
"encrypted_secret": null,
"encrypted_ses_smtp_password_v4": null,
"id": "AKIAZ4TSKSJ25YYV6N4S",
"key_fingerprint": null,
"pgp_key": null,
"secret": "r18v/AYwU4ZRoWMRg/KYqfY2CCO+aHFtTedQH2IT",
"ses_smtp_password_v4": "BDUxnweaAfSWC/Vrn6l71mv6P79LZFxpZDx1lRIeO6HV",
"status": "Active",
"user": "integreat-prod-cloud"
},
"sensitive_attributes": [],
"private": "bnVsbA==",
"dependencies": [
"aws_iam_user.app_user"
]
}
]
},
{
"mode": "managed",
"type": "aws_iam_user",
"name": "app_user",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"arn": "arn:aws:iam::679918342773:user/integreat-prod-cloud",
"force_destroy": false,
"id": "integreat-prod-cloud",
"name": "integreat-prod-cloud",
"path": "/",
"permissions_boundary": null,
"tags": {},
"tags_all": {},
"unique_id": "AIDAZ4TSKSJ2ZCQP6I3KK"
},
"sensitive_attributes": [],
"private": "bnVsbA=="
}
]
},
{
"mode": "managed",
"type": "aws_iam_user_policy_attachment",
"name": "app_user_policy",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"id": "integreat-prod-cloud-20230319034219192000000003",
"policy_arn": "arn:aws:iam::aws:policy/AdministratorAccess",
"user": "integreat-prod-cloud"
},
"sensitive_attributes": [],
"private": "bnVsbA==",
"dependencies": [
"aws_iam_user.app_user"
]
}
]
},
{
"mode": "managed",
"type": "aws_lb",
"name": "integreat_app",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"access_logs": [
{
"bucket": "",
"enabled": false,
"prefix": ""
}
],
"arn": "arn:aws:elasticloadbalancing:us-east-1:679918342773:loadbalancer/app/integreat-app-prod-cloud/ed5b70fcc043ff33",
"arn_suffix": "app/integreat-app-prod-cloud/ed5b70fcc043ff33",
"customer_owned_ipv4_pool": "",
"desync_mitigation_mode": "defensive",
"dns_name": "integreat-app-prod-cloud-522908474.us-east-1.elb.amazonaws.com",
"drop_invalid_header_fields": false,
"enable_cross_zone_load_balancing": true,
"enable_deletion_protection": true,
"enable_http2": true,
"enable_waf_fail_open": false,
"id": "arn:aws:elasticloadbalancing:us-east-1:679918342773:loadbalancer/app/integreat-app-prod-cloud/ed5b70fcc043ff33",
"idle_timeout": 120,
"internal": false,
"ip_address_type": "ipv4",
"load_balancer_type": "application",
"name": "integreat-app-prod-cloud",
"name_prefix": null,
"security_groups": [
"sg-0024906e0e1f78048"
],
"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"
}
],
"subnets": [
"subnet-16161a39",
"subnet-323deb78",
"subnet-44c2774b",
"subnet-5e675761",
"subnet-8519fde2",
"subnet-89bab8d4"
],
"tags": {},
"tags_all": {},
"timeouts": null,
"vpc_id": "vpc-b5b7d6ce",
"zone_id": "Z35SXDOTRQ7X7K"
},
"sensitive_attributes": [],
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6NjAwMDAwMDAwMDAwLCJ1cGRhdGUiOjYwMDAwMDAwMDAwMH19"
}
]
},
{
"mode": "managed",
"type": "aws_lb_listener",
"name": "http",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"alpn_policy": null,
"arn": "arn:aws:elasticloadbalancing:us-east-1:679918342773:listener/app/integreat-app-prod-cloud/ed5b70fcc043ff33/81260a18d976c15d",
"certificate_arn": null,
"default_action": [
{
"authenticate_cognito": [],
"authenticate_oidc": [],
"fixed_response": [],
"forward": [],
"order": 1,
"redirect": [
{
"host": "#{host}",
"path": "/#{path}",
"port": "443",
"protocol": "HTTPS",
"query": "#{query}",
"status_code": "HTTP_301"
}
],
"target_group_arn": "",
"type": "redirect"
}
],
"id": "arn:aws:elasticloadbalancing:us-east-1:679918342773:listener/app/integreat-app-prod-cloud/ed5b70fcc043ff33/81260a18d976c15d",
"load_balancer_arn": "arn:aws:elasticloadbalancing:us-east-1:679918342773:loadbalancer/app/integreat-app-prod-cloud/ed5b70fcc043ff33",
"port": 80,
"protocol": "HTTP",
"ssl_policy": "",
"tags": {},
"tags_all": {},
"timeouts": {
"read": null
}
},
"sensitive_attributes": [],
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsicmVhZCI6NjAwMDAwMDAwMDAwfX0=",
"dependencies": [
"aws_lb.integreat_app"
]
}
]
},
{
"mode": "managed",
"type": "aws_lb_listener_rule",
"name": "static",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": []
},
{
"mode": "managed",
"type": "aws_lb_target_group",
"name": "integreat_app",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"arn": "arn:aws:elasticloadbalancing:us-east-1:679918342773:targetgroup/integreat-app-prod-cloud/d176101bfa60e2e3",
"arn_suffix": "targetgroup/integreat-app-prod-cloud/d176101bfa60e2e3",
"connection_termination": false,
"deregistration_delay": "120",
"health_check": [
{
"enabled": true,
"healthy_threshold": 2,
"interval": 15,
"matcher": "200",
"path": "/api/health-check",
"port": "traffic-port",
"protocol": "HTTP",
"timeout": 14,
"unhealthy_threshold": 5
}
],
"id": "arn:aws:elasticloadbalancing:us-east-1:679918342773:targetgroup/integreat-app-prod-cloud/d176101bfa60e2e3",
"lambda_multi_value_headers_enabled": false,
"load_balancing_algorithm_type": "round_robin",
"name": "integreat-app-prod-cloud",
"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"
},
"sensitive_attributes": [],
"private": "bnVsbA=="
}
]
},
{
"mode": "managed",
"type": "aws_s3_bucket",
"name": "data",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"acceleration_status": "",
"acl": "private",
"arn": "arn:aws:s3:::data.prod-cloud.app.integreatconsult.com",
"bucket": "data.prod-cloud.app.integreatconsult.com",
"bucket_domain_name": "data.prod-cloud.app.integreatconsult.com.s3.amazonaws.com",
"bucket_prefix": null,
"bucket_regional_domain_name": "data.prod-cloud.app.integreatconsult.com.s3.amazonaws.com",
"cors_rule": [],
"force_destroy": false,
"grant": [],
"hosted_zone_id": "Z3AQBSTGFYJSTF",
"id": "data.prod-cloud.app.integreatconsult.com",
"lifecycle_rule": [],
"logging": [],
"object_lock_configuration": [],
"policy": "{\"Id\":\"Policy1526084187222\",\"Statement\":[{\"Action\":[\"s3:GetObject\"],\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:s3:::data.prod-cloud.app.integreatconsult.com/*\",\"Sid\":\"Stmt1526084185514\"},{\"Action\":\"s3:*\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::679918342773:role/datomic-ddb\"},\"Resource\":\"arn:aws:s3:::data.prod-cloud.app.integreatconsult.com\",\"Sid\":\"AllowReadForProd\"}],\"Version\":\"2012-10-17\"}",
"region": "us-east-1",
"replication_configuration": [],
"request_payer": "BucketOwner",
"server_side_encryption_configuration": [
{
"rule": [
{
"apply_server_side_encryption_by_default": [
{
"kms_master_key_id": "",
"sse_algorithm": "AES256"
}
],
"bucket_key_enabled": false
}
]
}
],
"tags": {},
"tags_all": {},
"versioning": [
{
"enabled": false,
"mfa_delete": false
}
],
"website": [
{
"error_document": "",
"index_document": "index.html",
"redirect_all_requests_to": "",
"routing_rules": ""
}
],
"website_domain": "s3-website-us-east-1.amazonaws.com",
"website_endpoint": "data.prod-cloud.app.integreatconsult.com.s3-website-us-east-1.amazonaws.com"
},
"sensitive_attributes": [],
"private": "bnVsbA=="
}
]
},
{
"mode": "managed",
"type": "aws_s3_bucket",
"name": "invoices",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"acceleration_status": "",
"acl": "private",
"arn": "arn:aws:s3:::integreat-mail-prod-cloud",
"bucket": "integreat-mail-prod-cloud",
"bucket_domain_name": "integreat-mail-prod-cloud.s3.amazonaws.com",
"bucket_prefix": null,
"bucket_regional_domain_name": "integreat-mail-prod-cloud.s3.amazonaws.com",
"cors_rule": [],
"force_destroy": false,
"grant": [],
"hosted_zone_id": "Z3AQBSTGFYJSTF",
"id": "integreat-mail-prod-cloud",
"lifecycle_rule": [],
"logging": [],
"object_lock_configuration": [],
"policy": "{\"Statement\":[{\"Action\":\"s3:PutObject\",\"Condition\":{\"StringEquals\":{\"aws:Referer\":\"679918342773\"}},\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"ses.amazonaws.com\"},\"Resource\":\"arn:aws:s3:::integreat-mail-prod-cloud/*\",\"Sid\":\"AllowSESPuts\"}],\"Version\":\"2012-10-17\"}",
"region": "us-east-1",
"replication_configuration": [],
"request_payer": "BucketOwner",
"server_side_encryption_configuration": [
{
"rule": [
{
"apply_server_side_encryption_by_default": [
{
"kms_master_key_id": "",
"sse_algorithm": "AES256"
}
],
"bucket_key_enabled": false
}
]
}
],
"tags": {},
"tags_all": {},
"versioning": [
{
"enabled": false,
"mfa_delete": false
}
],
"website": [],
"website_domain": null,
"website_endpoint": null
},
"sensitive_attributes": [],
"private": "bnVsbA==",
"dependencies": [
"data.aws_caller_identity.current"
]
}
]
},
{
"mode": "managed",
"type": "aws_s3_bucket",
"name": "static",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"acceleration_status": "",
"acl": "private",
"arn": "arn:aws:s3:::cloud.app.integreatconsult.com",
"bucket": "cloud.app.integreatconsult.com",
"bucket_domain_name": "cloud.app.integreatconsult.com.s3.amazonaws.com",
"bucket_prefix": null,
"bucket_regional_domain_name": "cloud.app.integreatconsult.com.s3.amazonaws.com",
"cors_rule": [
{
"allowed_headers": [
"*"
],
"allowed_methods": [
"PUT",
"POST",
"DELETE",
"GET"
],
"allowed_origins": [
"https://cloud.app.integreatconsult.com"
],
"expose_headers": [],
"max_age_seconds": 0
}
],
"force_destroy": false,
"grant": [],
"hosted_zone_id": "Z3AQBSTGFYJSTF",
"id": "cloud.app.integreatconsult.com",
"lifecycle_rule": [],
"logging": [],
"object_lock_configuration": [],
"policy": "{\"Id\":\"Policy1526084187222\",\"Statement\":[{\"Action\":[\"s3:GetObject\"],\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:s3:::cloud.app.integreatconsult.com/*\",\"Sid\":\"Stmt1526084185514\"}],\"Version\":\"2012-10-17\"}",
"region": "us-east-1",
"replication_configuration": [],
"request_payer": "BucketOwner",
"server_side_encryption_configuration": [
{
"rule": [
{
"apply_server_side_encryption_by_default": [
{
"kms_master_key_id": "",
"sse_algorithm": "AES256"
}
],
"bucket_key_enabled": false
}
]
}
],
"tags": {},
"tags_all": {},
"versioning": [
{
"enabled": false,
"mfa_delete": false
}
],
"website": [
{
"error_document": "",
"index_document": "index.html",
"redirect_all_requests_to": "",
"routing_rules": ""
}
],
"website_domain": "s3-website-us-east-1.amazonaws.com",
"website_endpoint": "cloud.app.integreatconsult.com.s3-website-us-east-1.amazonaws.com"
},
"sensitive_attributes": [],
"private": "bnVsbA=="
}
]
},
{
"mode": "managed",
"type": "aws_s3_bucket_notification",
"name": "mail_bucket_notification",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"bucket": "integreat-mail-prod-cloud",
"id": "integreat-mail-prod-cloud",
"lambda_function": [],
"queue": [
{
"events": [
"s3:ObjectCreated:*"
],
"filter_prefix": "",
"filter_suffix": "",
"id": "tf-s3-queue-20230319034251717400000005",
"queue_arn": "arn:aws:sqs:us-east-1:679918342773:integreat-mail-prod-cloud"
}
],
"topic": []
},
"sensitive_attributes": [],
"private": "bnVsbA==",
"dependencies": [
"aws_s3_bucket.invoices",
"aws_sqs_queue.integreat-mail",
"data.aws_caller_identity.current"
]
}
]
},
{
"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-cmwdohq6dvf3pbjv",
"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-cmwdohq6dvf3pbjv",
"name": "integreat-app-prod-cloud",
"namespace_id": "ns-gv2z744em7myo2jp",
"tags": {},
"tags_all": {}
},
"sensitive_attributes": [],
"private": "bnVsbA=="
}
]
},
{
"mode": "managed",
"type": "aws_ses_receipt_rule",
"name": "store",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": []
},
{
"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-prod-cloud",
"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-prod-cloud",
"kms_data_key_reuse_period_seconds": 300,
"kms_master_key_id": "",
"max_message_size": 262144,
"message_retention_seconds": 345600,
"name": "integreat-background-request-prod-cloud",
"name_prefix": "",
"policy": "{\"Statement\":[{\"Action\":\"sqs:*\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::679918342773:role/datomic-ddb\"},\"Resource\":\"arn:aws:sqs:*:*:integreat-background-request-prod-cloud\"}],\"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-background-request-prod-cloud",
"visibility_timeout_seconds": 30
},
"sensitive_attributes": [],
"private": "bnVsbA=="
}
]
},
{
"mode": "managed",
"type": "aws_sqs_queue",
"name": "integreat-mail",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"arn": "arn:aws:sqs:us-east-1:679918342773:integreat-mail-prod-cloud",
"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-prod-cloud",
"kms_data_key_reuse_period_seconds": 300,
"kms_master_key_id": "",
"max_message_size": 262144,
"message_retention_seconds": 345600,
"name": "integreat-mail-prod-cloud",
"name_prefix": "",
"policy": "{\"Statement\":[{\"Action\":\"sqs:SendMessage\",\"Condition\":{\"ArnEquals\":{\"aws:SourceArn\":\"arn:aws:s3:::integreat-mail-prod-cloud\"}},\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:sqs:*:*:integreat-mail-prod-cloud\"}],\"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-prod-cloud",
"visibility_timeout_seconds": 30
},
"sensitive_attributes": [],
"private": "bnVsbA==",
"dependencies": [
"aws_s3_bucket.invoices",
"data.aws_caller_identity.current"
]
}
]
},
{
"mode": "managed",
"type": "aws_sqs_queue",
"name": "integreat-scheduled-jobs",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"arn": "arn:aws:sqs:us-east-1:679918342773:integreat-scheduled-jobs-prod-cloud",
"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-scheduled-jobs-prod-cloud",
"kms_data_key_reuse_period_seconds": 300,
"kms_master_key_id": "",
"max_message_size": 262144,
"message_retention_seconds": 345600,
"name": "integreat-scheduled-jobs-prod-cloud",
"name_prefix": "",
"policy": "{\"Statement\":[{\"Action\":\"sqs:*\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::679918342773:role/datomic-ddb\"},\"Resource\":\"arn:aws:sqs:*:*:integreat-scheduled-jobs-prod-cloud\"}],\"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-scheduled-jobs-prod-cloud",
"visibility_timeout_seconds": 30
},
"sensitive_attributes": [],
"private": "bnVsbA=="
}
]
}
],
"check_results": null
}