Skip to content

fix: route lambda sub-paths via API Gateway proxy + shared dispatcher#257

Draft
nourshoreibah wants to merge 4 commits into
mainfrom
fix/api-routing-dispatcher
Draft

fix: route lambda sub-paths via API Gateway proxy + shared dispatcher#257
nourshoreibah wants to merge 4 commits into
mainfrom
fix/api-routing-dispatcher

Conversation

@nourshoreibah

Copy link
Copy Markdown
Collaborator

Why

The backend was unreachable through API Gateway — the root cause behind the frontend not working end-to-end (separate from the Amplify deploy PR #256).

  1. Sub-paths 403'd. The REST API had only single-segment resources (/auth, /projects, …) with per-method integrations and no {proxy+}. /auth/login, /projects/123/members matched no resource → API Gateway returned 403; the lambda never ran.
  2. Wrong path shape on bare paths. Handlers were written for the dev-server's prefix-stripped shape (/login, /), but API Gateway forwards the full path → 404 inside the lambda.
  3. Shared deps never shipped. package zipped only dist/, so @branch/lambda-auth (a file: runtime dep) wasn't in the deploy zip → latent MODULE_NOT_FOUND.

What

  • infrastructure/aws/api_gateway.tf — greedy {proxy+} + ANY per lambda (forwards the full path, routes OPTIONS preflight to the existing CORS handler, fixes the missing PUT). Deployment triggers hash so route changes redeploy the stage. Removes the per-method map.
  • shared/lambda-http (@branch/lambda-http)dispatch(event, { prefix, routes }): a route-table router with :param matching and path canonicalization so one table works behind API Gateway (full path) and the dev-server (stripped). Centralizes json()/CORS, OPTIONS, /health, 404, 500.
  • All 6 handlers converted to route tables with full prefixed patterns; business logic preserved verbatim.
  • esbuild bundling — each lambda's package script bundles the handler + shared packages + node deps into one dist/handler.js (@aws-sdk/* external, provided by node20). Fixes the packaging gap for lambda-auth too. CI (lambda-deploy, lambda-tests) builds lambda-http first; the 6 Dockerfiles + compose updated likewise.
  • tools/lambda-cli.js emits route-table entries (not if-blocks); scaffolds dispatch-based handlers.
  • openapi specs normalized to full prefixed paths (also fixed a pre-existing duplicate /donors key and an unquoted-colon YAML error in reports).
  • next.config.ts dev rewrites no longer strip the service prefix.
  • AGENTS.md updated across root, backend, lambdas, infra, frontend.

Verification

  • @branch/lambda-http builds; all 6 handlers typecheck and esbuild-bundle to small self-contained zips.
  • Lambda unit tests pass (users 46, expenditures 56, auth 18, projects 43, donors 27, reports 39). Remaining failures are fetch failed e2e tests that need the running dev-server (CI starts it) — no logic failures.
  • Shared dev-server (npm run dev): /projects/health 200, OPTIONS 200, sub-path routed, unknown → 404 (canonical path).
  • Docker compose (built + ran auth + projects + postgres): /auth/health 200, /auth/login routed (400, not 404), /projects health/list/:id/members all 200, unknown → 404.
  • terraform fmt clean; all 6 openapi specs parse.

Notes / follow-ups

  • Test fixtures still use stripped paths — they pass via canonicalization, so they were left unchanged rather than churned.
  • Gateway authorization stays NONE; lambdas keep their own Cognito authz.
  • The two local-dev port conventions (shared dev-server :3000 vs per-service :3001–3006) are unchanged; canonicalization absorbs both.

🤖 Generated with Claude Code

nourshoreibah and others added 4 commits June 30, 2026 00:09
The REST API exposed only single-segment resources (/auth, /projects, ...)
with per-method integrations and no {proxy+}, so any sub-path (/auth/login,
/projects/123/members) matched no resource and API Gateway returned 403 — the
lambda never ran. Even bare paths 404'd inside the lambda because handlers were
written for the dev-server's prefix-stripped shape while API Gateway forwards
the full path. Separately, shared file: deps were never bundled into the deploy
zip (latent MODULE_NOT_FOUND).

Changes:
- infrastructure/aws/api_gateway.tf: greedy {proxy+} + ANY per lambda (forwards
  full path, routes OPTIONS preflight, fixes missing PUT); deployment redeploy
  trigger. Removes the per-method map.
- shared/lambda-http (@branch/lambda-http): dispatch({prefix,routes}) route-table
  router with :param matching + path canonicalization (one table works behind
  API Gateway's full path and the dev-server's stripped path); centralizes
  json()/CORS, OPTIONS, /health, 404, 500.
- All 6 handlers converted to route tables with full prefixed patterns; business
  logic preserved.
- esbuild bundling: each lambda's package script bundles handler + shared deps
  into one dist/handler.js (@aws-sdk external); CI builds lambda-http. Fixes the
  shared-dep packaging gap.
- lambda-cli.js emits route-table entries; openapi specs normalized to full
  prefixed paths (+ fixed pre-existing donors dup key / reports YAML colon).
- next.config.ts: dev rewrites no longer strip the service prefix.
- AGENTS.md (root, backend, lambdas, infra, frontend) updated.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Each service Dockerfile copied + built shared/lambda-auth into /shared so its
file: dep resolved; @branch/lambda-http (new runtime dep) needs the same or the
container can't resolve it. Add the lambda-http copy+build to the 5 repo-root
services, and switch auth's build context to the repo root (it was ./lambdas/auth,
which can't see ../../../../shared) with a matching Dockerfile.

Verified: docker compose build + up for auth and projects — /auth/health,
/auth/login (routed, 400 not 404), /projects health/list/:id/members all 200,
unknown path -> 404. Shared dev-server (npm run dev) verified separately.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
  - Auto-formatted .tf files with terraform fmt
  - Updated README.md with terraform-docs

  Co-authored-by: nourshoreibah <nourshoreibah@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

Terraform Plan 📖 infrastructure/aws

Terraform Initialization ⚙️success

Terraform Validation 🤖success

Terraform Plan 📖success

Show Plan
data.archive_file.lambda_placeholder: Reading...
data.archive_file.lambda_placeholder: Read complete after 0s [id=96878a51e358033297a32b882fd5223cc95fb8a7]
aws_api_gateway_method.lambda_methods["projects-GET"]: Refreshing state... [id=agm-2apxzxb0r8-chhy2i-GET]
aws_api_gateway_method.lambda_methods["users-GET"]: Refreshing state... [id=agm-2apxzxb0r8-0dkbds-GET]
aws_api_gateway_integration.lambda_integrations["donors-GET"]: Refreshing state... [id=agi-2apxzxb0r8-hybur2-GET]
aws_api_gateway_method.lambda_methods["auth-POST"]: Refreshing state... [id=agm-2apxzxb0r8-u8unad-POST]
aws_api_gateway_method.lambda_methods["expenditures-GET"]: Refreshing state... [id=agm-2apxzxb0r8-6sdj3w-GET]
aws_api_gateway_method.lambda_methods["expenditures-POST"]: Refreshing state... [id=agm-2apxzxb0r8-6sdj3w-POST]
aws_api_gateway_integration.lambda_integrations["expenditures-GET"]: Refreshing state... [id=agi-2apxzxb0r8-6sdj3w-GET]
aws_api_gateway_method.lambda_methods["projects-POST"]: Refreshing state... [id=agm-2apxzxb0r8-chhy2i-POST]
aws_api_gateway_integration.lambda_integrations["auth-GET"]: Refreshing state... [id=agi-2apxzxb0r8-u8unad-GET]
aws_api_gateway_integration.lambda_integrations["reports-GET"]: Refreshing state... [id=agi-2apxzxb0r8-wsnfk2-GET]
aws_api_gateway_method.lambda_methods["users-POST"]: Refreshing state... [id=agm-2apxzxb0r8-0dkbds-POST]
aws_api_gateway_integration.lambda_integrations["users-DELETE"]: Refreshing state... [id=agi-2apxzxb0r8-0dkbds-DELETE]
aws_api_gateway_method.lambda_methods["donors-GET"]: Refreshing state... [id=agm-2apxzxb0r8-hybur2-GET]
aws_api_gateway_integration.lambda_integrations["expenditures-POST"]: Refreshing state... [id=agi-2apxzxb0r8-6sdj3w-POST]
aws_api_gateway_integration.lambda_integrations["users-POST"]: Refreshing state... [id=agi-2apxzxb0r8-0dkbds-POST]
aws_api_gateway_method.lambda_methods["reports-GET"]: Refreshing state... [id=agm-2apxzxb0r8-wsnfk2-GET]
aws_api_gateway_integration.lambda_integrations["users-PATCH"]: Refreshing state... [id=agi-2apxzxb0r8-0dkbds-PATCH]
aws_api_gateway_integration.lambda_integrations["users-GET"]: Refreshing state... [id=agi-2apxzxb0r8-0dkbds-GET]
aws_api_gateway_integration.lambda_integrations["projects-POST"]: Refreshing state... [id=agi-2apxzxb0r8-chhy2i-POST]
aws_api_gateway_method.lambda_methods["users-PATCH"]: Refreshing state... [id=agm-2apxzxb0r8-0dkbds-PATCH]
aws_api_gateway_method.lambda_methods["auth-GET"]: Refreshing state... [id=agm-2apxzxb0r8-u8unad-GET]
aws_api_gateway_integration.lambda_integrations["projects-GET"]: Refreshing state... [id=agi-2apxzxb0r8-chhy2i-GET]
aws_api_gateway_method.lambda_methods["users-DELETE"]: Refreshing state... [id=agm-2apxzxb0r8-0dkbds-DELETE]
data.aws_caller_identity.current: Reading...
aws_api_gateway_integration.lambda_integrations["auth-POST"]: Refreshing state... [id=agi-2apxzxb0r8-u8unad-POST]
aws_api_gateway_rest_api.branch_api: Refreshing state... [id=2apxzxb0r8]
aws_s3_bucket.reports_bucket: Refreshing state... [id=c4c-branch-generated-reports20251030194253425700000001]
aws_cognito_user_pool.branch_user_pool: Refreshing state... [id=us-east-2_CxTueqe6g]
aws_iam_role.lambda_role: Refreshing state... [id=branch-lambda-role]
data.aws_caller_identity.current: Read complete after 0s [id=489881683177]
data.infisical_secrets.github_folder: Reading...
data.infisical_secrets.rds_folder: Reading...
aws_s3_bucket.lambda_deployments: Refreshing state... [id=branch-lambda-deployments-489881683177]
data.infisical_secrets.github_folder: Read complete after 0s
aws_amplify_app.frontend: Refreshing state... [id=dbcy90q4o31f7]
aws_api_gateway_resource.lambda_resources["projects"]: Refreshing state... [id=chhy2i]
aws_api_gateway_resource.lambda_resources["donors"]: Refreshing state... [id=hybur2]
aws_api_gateway_resource.lambda_resources["expenditures"]: Refreshing state... [id=6sdj3w]
aws_api_gateway_resource.lambda_resources["reports"]: Refreshing state... [id=wsnfk2]
aws_api_gateway_resource.lambda_resources["auth"]: Refreshing state... [id=u8unad]
aws_api_gateway_resource.lambda_resources["users"]: Refreshing state... [id=0dkbds]
aws_iam_role_policy_attachment.lambda_basic: Refreshing state... [id=branch-lambda-role/arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole]
aws_amplify_branch.main: Refreshing state... [id=dbcy90q4o31f7/main]
data.infisical_secrets.rds_folder: Read complete after 0s
aws_db_instance.branch_rds: Refreshing state... [id=db-AMMYFTORW6XJGRELV7WQZCNHQI]
aws_cognito_user_pool_client.branch_client: Refreshing state... [id=570i6ocj0882qu0ditm4vrr60f]
aws_s3_object.lambda_placeholder["auth"]: Refreshing state... [id=branch-lambda-deployments-489881683177/auth/initial.zip]
aws_s3_bucket_versioning.lambda_deployments: Refreshing state... [id=branch-lambda-deployments-489881683177]
aws_s3_object.lambda_placeholder["reports"]: Refreshing state... [id=branch-lambda-deployments-489881683177/reports/initial.zip]
aws_s3_bucket_server_side_encryption_configuration.lambda_deployments: Refreshing state... [id=branch-lambda-deployments-489881683177]
aws_s3_object.lambda_placeholder["expenditures"]: Refreshing state... [id=branch-lambda-deployments-489881683177/expenditures/initial.zip]
aws_s3_object.lambda_placeholder["donors"]: Refreshing state... [id=branch-lambda-deployments-489881683177/donors/initial.zip]
aws_s3_object.lambda_placeholder["projects"]: Refreshing state... [id=branch-lambda-deployments-489881683177/projects/initial.zip]
aws_s3_bucket_public_access_block.reports_bucket_public_access: Refreshing state... [id=c4c-branch-generated-reports20251030194253425700000001]
aws_s3_object.lambda_placeholder["users"]: Refreshing state... [id=branch-lambda-deployments-489881683177/users/initial.zip]
aws_s3_bucket_policy.reports_bucket_policy: Refreshing state... [id=c4c-branch-generated-reports20251030194253425700000001]
aws_lambda_function.functions["auth"]: Refreshing state... [id=branch-auth]
aws_lambda_function.functions["projects"]: Refreshing state... [id=branch-projects]
aws_lambda_function.functions["reports"]: Refreshing state... [id=branch-reports]
aws_lambda_function.functions["expenditures"]: Refreshing state... [id=branch-expenditures]
aws_lambda_function.functions["donors"]: Refreshing state... [id=branch-donors]
aws_lambda_function.functions["users"]: Refreshing state... [id=branch-users]
aws_lambda_permission.api_gateway_permissions["reports"]: Refreshing state... [id=AllowAPIGatewayInvoke]
aws_lambda_permission.api_gateway_permissions["auth"]: Refreshing state... [id=AllowAPIGatewayInvoke]
aws_lambda_permission.api_gateway_permissions["users"]: Refreshing state... [id=AllowAPIGatewayInvoke]
aws_lambda_permission.api_gateway_permissions["donors"]: Refreshing state... [id=AllowAPIGatewayInvoke]
aws_lambda_permission.api_gateway_permissions["expenditures"]: Refreshing state... [id=AllowAPIGatewayInvoke]
aws_lambda_permission.api_gateway_permissions["projects"]: Refreshing state... [id=AllowAPIGatewayInvoke]
aws_api_gateway_deployment.branch_deployment: Refreshing state... [id=klh9jv]
aws_api_gateway_stage.branch_stage: Refreshing state... [id=ags-2apxzxb0r8-prod]

Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
  + create
  ~ update in-place
  - destroy
+/- create replacement and then destroy

Terraform will perform the following actions:

  # aws_amplify_app.frontend will be updated in-place
  ~ resource "aws_amplify_app" "frontend" {
      ~ environment_variables         = {
          + "NEXT_PUBLIC_API_BASE_URL"  = null
            # (1 unchanged element hidden)
        }
        id                            = "dbcy90q4o31f7"
        name                          = "branch-frontend"
        tags                          = {}
        # (19 unchanged attributes hidden)

        # (2 unchanged blocks hidden)
    }

  # aws_api_gateway_deployment.branch_deployment must be replaced
+/- resource "aws_api_gateway_deployment" "branch_deployment" {
      ~ created_date = "2026-04-12T17:44:10Z" -> (known after apply)
      ~ id           = "klh9jv" -> (known after apply)
      + triggers     = (known after apply) # forces replacement
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_integration.lambda_integrations["auth-GET"] will be destroyed
  # (because aws_api_gateway_integration.lambda_integrations is not in configuration)
  - resource "aws_api_gateway_integration" "lambda_integrations" {
      - cache_key_parameters    = [] -> null
      - cache_namespace         = "u8unad" -> null
      - connection_type         = "INTERNET" -> null
      - http_method             = "GET" -> null
      - id                      = "agi-2apxzxb0r8-u8unad-GET" -> null
      - integration_http_method = "POST" -> null
      - passthrough_behavior    = "WHEN_NO_MATCH" -> null
      - region                  = "us-east-2" -> null
      - request_parameters      = {} -> null
      - request_templates       = {} -> null
      - resource_id             = "u8unad" -> null
      - rest_api_id             = "2apxzxb0r8" -> null
      - timeout_milliseconds    = 29000 -> null
      - type                    = "AWS_PROXY" -> null
      - uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-auth/invocations" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_integration.lambda_integrations["auth-POST"] will be destroyed
  # (because aws_api_gateway_integration.lambda_integrations is not in configuration)
  - resource "aws_api_gateway_integration" "lambda_integrations" {
      - cache_key_parameters    = [] -> null
      - cache_namespace         = "u8unad" -> null
      - connection_type         = "INTERNET" -> null
      - http_method             = "POST" -> null
      - id                      = "agi-2apxzxb0r8-u8unad-POST" -> null
      - integration_http_method = "POST" -> null
      - passthrough_behavior    = "WHEN_NO_MATCH" -> null
      - region                  = "us-east-2" -> null
      - request_parameters      = {} -> null
      - request_templates       = {} -> null
      - resource_id             = "u8unad" -> null
      - rest_api_id             = "2apxzxb0r8" -> null
      - timeout_milliseconds    = 29000 -> null
      - type                    = "AWS_PROXY" -> null
      - uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-auth/invocations" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_integration.lambda_integrations["donors-GET"] will be destroyed
  # (because aws_api_gateway_integration.lambda_integrations is not in configuration)
  - resource "aws_api_gateway_integration" "lambda_integrations" {
      - cache_key_parameters    = [] -> null
      - cache_namespace         = "hybur2" -> null
      - connection_type         = "INTERNET" -> null
      - http_method             = "GET" -> null
      - id                      = "agi-2apxzxb0r8-hybur2-GET" -> null
      - integration_http_method = "POST" -> null
      - passthrough_behavior    = "WHEN_NO_MATCH" -> null
      - region                  = "us-east-2" -> null
      - request_parameters      = {} -> null
      - request_templates       = {} -> null
      - resource_id             = "hybur2" -> null
      - rest_api_id             = "2apxzxb0r8" -> null
      - timeout_milliseconds    = 29000 -> null
      - type                    = "AWS_PROXY" -> null
      - uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-donors/invocations" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_integration.lambda_integrations["expenditures-GET"] will be destroyed
  # (because aws_api_gateway_integration.lambda_integrations is not in configuration)
  - resource "aws_api_gateway_integration" "lambda_integrations" {
      - cache_key_parameters    = [] -> null
      - cache_namespace         = "6sdj3w" -> null
      - connection_type         = "INTERNET" -> null
      - http_method             = "GET" -> null
      - id                      = "agi-2apxzxb0r8-6sdj3w-GET" -> null
      - integration_http_method = "POST" -> null
      - passthrough_behavior    = "WHEN_NO_MATCH" -> null
      - region                  = "us-east-2" -> null
      - request_parameters      = {} -> null
      - request_templates       = {} -> null
      - resource_id             = "6sdj3w" -> null
      - rest_api_id             = "2apxzxb0r8" -> null
      - timeout_milliseconds    = 29000 -> null
      - type                    = "AWS_PROXY" -> null
      - uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-expenditures/invocations" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_integration.lambda_integrations["expenditures-POST"] will be destroyed
  # (because aws_api_gateway_integration.lambda_integrations is not in configuration)
  - resource "aws_api_gateway_integration" "lambda_integrations" {
      - cache_key_parameters    = [] -> null
      - cache_namespace         = "6sdj3w" -> null
      - connection_type         = "INTERNET" -> null
      - http_method             = "POST" -> null
      - id                      = "agi-2apxzxb0r8-6sdj3w-POST" -> null
      - integration_http_method = "POST" -> null
      - passthrough_behavior    = "WHEN_NO_MATCH" -> null
      - region                  = "us-east-2" -> null
      - request_parameters      = {} -> null
      - request_templates       = {} -> null
      - resource_id             = "6sdj3w" -> null
      - rest_api_id             = "2apxzxb0r8" -> null
      - timeout_milliseconds    = 29000 -> null
      - type                    = "AWS_PROXY" -> null
      - uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-expenditures/invocations" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_integration.lambda_integrations["projects-GET"] will be destroyed
  # (because aws_api_gateway_integration.lambda_integrations is not in configuration)
  - resource "aws_api_gateway_integration" "lambda_integrations" {
      - cache_key_parameters    = [] -> null
      - cache_namespace         = "chhy2i" -> null
      - connection_type         = "INTERNET" -> null
      - http_method             = "GET" -> null
      - id                      = "agi-2apxzxb0r8-chhy2i-GET" -> null
      - integration_http_method = "POST" -> null
      - passthrough_behavior    = "WHEN_NO_MATCH" -> null
      - region                  = "us-east-2" -> null
      - request_parameters      = {} -> null
      - request_templates       = {} -> null
      - resource_id             = "chhy2i" -> null
      - rest_api_id             = "2apxzxb0r8" -> null
      - timeout_milliseconds    = 29000 -> null
      - type                    = "AWS_PROXY" -> null
      - uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-projects/invocations" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_integration.lambda_integrations["projects-POST"] will be destroyed
  # (because aws_api_gateway_integration.lambda_integrations is not in configuration)
  - resource "aws_api_gateway_integration" "lambda_integrations" {
      - cache_key_parameters    = [] -> null
      - cache_namespace         = "chhy2i" -> null
      - connection_type         = "INTERNET" -> null
      - http_method             = "POST" -> null
      - id                      = "agi-2apxzxb0r8-chhy2i-POST" -> null
      - integration_http_method = "POST" -> null
      - passthrough_behavior    = "WHEN_NO_MATCH" -> null
      - region                  = "us-east-2" -> null
      - request_parameters      = {} -> null
      - request_templates       = {} -> null
      - resource_id             = "chhy2i" -> null
      - rest_api_id             = "2apxzxb0r8" -> null
      - timeout_milliseconds    = 29000 -> null
      - type                    = "AWS_PROXY" -> null
      - uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-projects/invocations" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_integration.lambda_integrations["reports-GET"] will be destroyed
  # (because aws_api_gateway_integration.lambda_integrations is not in configuration)
  - resource "aws_api_gateway_integration" "lambda_integrations" {
      - cache_key_parameters    = [] -> null
      - cache_namespace         = "wsnfk2" -> null
      - connection_type         = "INTERNET" -> null
      - http_method             = "GET" -> null
      - id                      = "agi-2apxzxb0r8-wsnfk2-GET" -> null
      - integration_http_method = "POST" -> null
      - passthrough_behavior    = "WHEN_NO_MATCH" -> null
      - region                  = "us-east-2" -> null
      - request_parameters      = {} -> null
      - request_templates       = {} -> null
      - resource_id             = "wsnfk2" -> null
      - rest_api_id             = "2apxzxb0r8" -> null
      - timeout_milliseconds    = 29000 -> null
      - type                    = "AWS_PROXY" -> null
      - uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-reports/invocations" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_integration.lambda_integrations["users-DELETE"] will be destroyed
  # (because aws_api_gateway_integration.lambda_integrations is not in configuration)
  - resource "aws_api_gateway_integration" "lambda_integrations" {
      - cache_key_parameters    = [] -> null
      - cache_namespace         = "0dkbds" -> null
      - connection_type         = "INTERNET" -> null
      - http_method             = "DELETE" -> null
      - id                      = "agi-2apxzxb0r8-0dkbds-DELETE" -> null
      - integration_http_method = "POST" -> null
      - passthrough_behavior    = "WHEN_NO_MATCH" -> null
      - region                  = "us-east-2" -> null
      - request_parameters      = {} -> null
      - request_templates       = {} -> null
      - resource_id             = "0dkbds" -> null
      - rest_api_id             = "2apxzxb0r8" -> null
      - timeout_milliseconds    = 29000 -> null
      - type                    = "AWS_PROXY" -> null
      - uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-users/invocations" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_integration.lambda_integrations["users-GET"] will be destroyed
  # (because aws_api_gateway_integration.lambda_integrations is not in configuration)
  - resource "aws_api_gateway_integration" "lambda_integrations" {
      - cache_key_parameters    = [] -> null
      - cache_namespace         = "0dkbds" -> null
      - connection_type         = "INTERNET" -> null
      - http_method             = "GET" -> null
      - id                      = "agi-2apxzxb0r8-0dkbds-GET" -> null
      - integration_http_method = "POST" -> null
      - passthrough_behavior    = "WHEN_NO_MATCH" -> null
      - region                  = "us-east-2" -> null
      - request_parameters      = {} -> null
      - request_templates       = {} -> null
      - resource_id             = "0dkbds" -> null
      - rest_api_id             = "2apxzxb0r8" -> null
      - timeout_milliseconds    = 29000 -> null
      - type                    = "AWS_PROXY" -> null
      - uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-users/invocations" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_integration.lambda_integrations["users-PATCH"] will be destroyed
  # (because aws_api_gateway_integration.lambda_integrations is not in configuration)
  - resource "aws_api_gateway_integration" "lambda_integrations" {
      - cache_key_parameters    = [] -> null
      - cache_namespace         = "0dkbds" -> null
      - connection_type         = "INTERNET" -> null
      - http_method             = "PATCH" -> null
      - id                      = "agi-2apxzxb0r8-0dkbds-PATCH" -> null
      - integration_http_method = "POST" -> null
      - passthrough_behavior    = "WHEN_NO_MATCH" -> null
      - region                  = "us-east-2" -> null
      - request_parameters      = {} -> null
      - request_templates       = {} -> null
      - resource_id             = "0dkbds" -> null
      - rest_api_id             = "2apxzxb0r8" -> null
      - timeout_milliseconds    = 29000 -> null
      - type                    = "AWS_PROXY" -> null
      - uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-users/invocations" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_integration.lambda_integrations["users-POST"] will be destroyed
  # (because aws_api_gateway_integration.lambda_integrations is not in configuration)
  - resource "aws_api_gateway_integration" "lambda_integrations" {
      - cache_key_parameters    = [] -> null
      - cache_namespace         = "0dkbds" -> null
      - connection_type         = "INTERNET" -> null
      - http_method             = "POST" -> null
      - id                      = "agi-2apxzxb0r8-0dkbds-POST" -> null
      - integration_http_method = "POST" -> null
      - passthrough_behavior    = "WHEN_NO_MATCH" -> null
      - region                  = "us-east-2" -> null
      - request_parameters      = {} -> null
      - request_templates       = {} -> null
      - resource_id             = "0dkbds" -> null
      - rest_api_id             = "2apxzxb0r8" -> null
      - timeout_milliseconds    = 29000 -> null
      - type                    = "AWS_PROXY" -> null
      - uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-users/invocations" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_integration.lambda_proxy_any["auth"] will be created
  + resource "aws_api_gateway_integration" "lambda_proxy_any" {
      + cache_namespace         = (known after apply)
      + connection_type         = "INTERNET"
      + http_method             = "ANY"
      + id                      = (known after apply)
      + integration_http_method = "POST"
      + passthrough_behavior    = (known after apply)
      + region                  = "us-east-2"
      + resource_id             = (known after apply)
      + rest_api_id             = "2apxzxb0r8"
      + timeout_milliseconds    = 29000
      + type                    = "AWS_PROXY"
      + uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-auth/invocations"
    }

  # aws_api_gateway_integration.lambda_proxy_any["donors"] will be created
  + resource "aws_api_gateway_integration" "lambda_proxy_any" {
      + cache_namespace         = (known after apply)
      + connection_type         = "INTERNET"
      + http_method             = "ANY"
      + id                      = (known after apply)
      + integration_http_method = "POST"
      + passthrough_behavior    = (known after apply)
      + region                  = "us-east-2"
      + resource_id             = (known after apply)
      + rest_api_id             = "2apxzxb0r8"
      + timeout_milliseconds    = 29000
      + type                    = "AWS_PROXY"
      + uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-donors/invocations"
    }

  # aws_api_gateway_integration.lambda_proxy_any["expenditures"] will be created
  + resource "aws_api_gateway_integration" "lambda_proxy_any" {
      + cache_namespace         = (known after apply)
      + connection_type         = "INTERNET"
      + http_method             = "ANY"
      + id                      = (known after apply)
      + integration_http_method = "POST"
      + passthrough_behavior    = (known after apply)
      + region                  = "us-east-2"
      + resource_id             = (known after apply)
      + rest_api_id             = "2apxzxb0r8"
      + timeout_milliseconds    = 29000
      + type                    = "AWS_PROXY"
      + uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-expenditures/invocations"
    }

  # aws_api_gateway_integration.lambda_proxy_any["projects"] will be created
  + resource "aws_api_gateway_integration" "lambda_proxy_any" {
      + cache_namespace         = (known after apply)
      + connection_type         = "INTERNET"
      + http_method             = "ANY"
      + id                      = (known after apply)
      + integration_http_method = "POST"
      + passthrough_behavior    = (known after apply)
      + region                  = "us-east-2"
      + resource_id             = (known after apply)
      + rest_api_id             = "2apxzxb0r8"
      + timeout_milliseconds    = 29000
      + type                    = "AWS_PROXY"
      + uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-projects/invocations"
    }

  # aws_api_gateway_integration.lambda_proxy_any["reports"] will be created
  + resource "aws_api_gateway_integration" "lambda_proxy_any" {
      + cache_namespace         = (known after apply)
      + connection_type         = "INTERNET"
      + http_method             = "ANY"
      + id                      = (known after apply)
      + integration_http_method = "POST"
      + passthrough_behavior    = (known after apply)
      + region                  = "us-east-2"
      + resource_id             = (known after apply)
      + rest_api_id             = "2apxzxb0r8"
      + timeout_milliseconds    = 29000
      + type                    = "AWS_PROXY"
      + uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-reports/invocations"
    }

  # aws_api_gateway_integration.lambda_proxy_any["users"] will be created
  + resource "aws_api_gateway_integration" "lambda_proxy_any" {
      + cache_namespace         = (known after apply)
      + connection_type         = "INTERNET"
      + http_method             = "ANY"
      + id                      = (known after apply)
      + integration_http_method = "POST"
      + passthrough_behavior    = (known after apply)
      + region                  = "us-east-2"
      + resource_id             = (known after apply)
      + rest_api_id             = "2apxzxb0r8"
      + timeout_milliseconds    = 29000
      + type                    = "AWS_PROXY"
      + uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-users/invocations"
    }

  # aws_api_gateway_integration.lambda_root_any["auth"] will be created
  + resource "aws_api_gateway_integration" "lambda_root_any" {
      + cache_namespace         = (known after apply)
      + connection_type         = "INTERNET"
      + http_method             = "ANY"
      + id                      = (known after apply)
      + integration_http_method = "POST"
      + passthrough_behavior    = (known after apply)
      + region                  = "us-east-2"
      + resource_id             = "u8unad"
      + rest_api_id             = "2apxzxb0r8"
      + timeout_milliseconds    = 29000
      + type                    = "AWS_PROXY"
      + uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-auth/invocations"
    }

  # aws_api_gateway_integration.lambda_root_any["donors"] will be created
  + resource "aws_api_gateway_integration" "lambda_root_any" {
      + cache_namespace         = (known after apply)
      + connection_type         = "INTERNET"
      + http_method             = "ANY"
      + id                      = (known after apply)
      + integration_http_method = "POST"
      + passthrough_behavior    = (known after apply)
      + region                  = "us-east-2"
      + resource_id             = "hybur2"
      + rest_api_id             = "2apxzxb0r8"
      + timeout_milliseconds    = 29000
      + type                    = "AWS_PROXY"
      + uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-donors/invocations"
    }

  # aws_api_gateway_integration.lambda_root_any["expenditures"] will be created
  + resource "aws_api_gateway_integration" "lambda_root_any" {
      + cache_namespace         = (known after apply)
      + connection_type         = "INTERNET"
      + http_method             = "ANY"
      + id                      = (known after apply)
      + integration_http_method = "POST"
      + passthrough_behavior    = (known after apply)
      + region                  = "us-east-2"
      + resource_id             = "6sdj3w"
      + rest_api_id             = "2apxzxb0r8"
      + timeout_milliseconds    = 29000
      + type                    = "AWS_PROXY"
      + uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-expenditures/invocations"
    }

  # aws_api_gateway_integration.lambda_root_any["projects"] will be created
  + resource "aws_api_gateway_integration" "lambda_root_any" {
      + cache_namespace         = (known after apply)
      + connection_type         = "INTERNET"
      + http_method             = "ANY"
      + id                      = (known after apply)
      + integration_http_method = "POST"
      + passthrough_behavior    = (known after apply)
      + region                  = "us-east-2"
      + resource_id             = "chhy2i"
      + rest_api_id             = "2apxzxb0r8"
      + timeout_milliseconds    = 29000
      + type                    = "AWS_PROXY"
      + uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-projects/invocations"
    }

  # aws_api_gateway_integration.lambda_root_any["reports"] will be created
  + resource "aws_api_gateway_integration" "lambda_root_any" {
      + cache_namespace         = (known after apply)
      + connection_type         = "INTERNET"
      + http_method             = "ANY"
      + id                      = (known after apply)
      + integration_http_method = "POST"
      + passthrough_behavior    = (known after apply)
      + region                  = "us-east-2"
      + resource_id             = "wsnfk2"
      + rest_api_id             = "2apxzxb0r8"
      + timeout_milliseconds    = 29000
      + type                    = "AWS_PROXY"
      + uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-reports/invocations"
    }

  # aws_api_gateway_integration.lambda_root_any["users"] will be created
  + resource "aws_api_gateway_integration" "lambda_root_any" {
      + cache_namespace         = (known after apply)
      + connection_type         = "INTERNET"
      + http_method             = "ANY"
      + id                      = (known after apply)
      + integration_http_method = "POST"
      + passthrough_behavior    = (known after apply)
      + region                  = "us-east-2"
      + resource_id             = "0dkbds"
      + rest_api_id             = "2apxzxb0r8"
      + timeout_milliseconds    = 29000
      + type                    = "AWS_PROXY"
      + uri                     = "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:489881683177:function:branch-users/invocations"
    }

  # aws_api_gateway_method.lambda_methods["auth-GET"] will be destroyed
  # (because aws_api_gateway_method.lambda_methods is not in configuration)
  - resource "aws_api_gateway_method" "lambda_methods" {
      - api_key_required     = false -> null
      - authorization        = "NONE" -> null
      - authorization_scopes = [] -> null
      - http_method          = "GET" -> null
      - id                   = "agm-2apxzxb0r8-u8unad-GET" -> null
      - region               = "us-east-2" -> null
      - request_models       = {} -> null
      - request_parameters   = {} -> null
      - resource_id          = "u8unad" -> null
      - rest_api_id          = "2apxzxb0r8" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_method.lambda_methods["auth-POST"] will be destroyed
  # (because aws_api_gateway_method.lambda_methods is not in configuration)
  - resource "aws_api_gateway_method" "lambda_methods" {
      - api_key_required     = false -> null
      - authorization        = "NONE" -> null
      - authorization_scopes = [] -> null
      - http_method          = "POST" -> null
      - id                   = "agm-2apxzxb0r8-u8unad-POST" -> null
      - region               = "us-east-2" -> null
      - request_models       = {} -> null
      - request_parameters   = {} -> null
      - resource_id          = "u8unad" -> null
      - rest_api_id          = "2apxzxb0r8" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_method.lambda_methods["donors-GET"] will be destroyed
  # (because aws_api_gateway_method.lambda_methods is not in configuration)
  - resource "aws_api_gateway_method" "lambda_methods" {
      - api_key_required     = false -> null
      - authorization        = "NONE" -> null
      - authorization_scopes = [] -> null
      - http_method          = "GET" -> null
      - id                   = "agm-2apxzxb0r8-hybur2-GET" -> null
      - region               = "us-east-2" -> null
      - request_models       = {} -> null
      - request_parameters   = {} -> null
      - resource_id          = "hybur2" -> null
      - rest_api_id          = "2apxzxb0r8" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_method.lambda_methods["expenditures-GET"] will be destroyed
  # (because aws_api_gateway_method.lambda_methods is not in configuration)
  - resource "aws_api_gateway_method" "lambda_methods" {
      - api_key_required     = false -> null
      - authorization        = "NONE" -> null
      - authorization_scopes = [] -> null
      - http_method          = "GET" -> null
      - id                   = "agm-2apxzxb0r8-6sdj3w-GET" -> null
      - region               = "us-east-2" -> null
      - request_models       = {} -> null
      - request_parameters   = {} -> null
      - resource_id          = "6sdj3w" -> null
      - rest_api_id          = "2apxzxb0r8" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_method.lambda_methods["expenditures-POST"] will be destroyed
  # (because aws_api_gateway_method.lambda_methods is not in configuration)
  - resource "aws_api_gateway_method" "lambda_methods" {
      - api_key_required     = false -> null
      - authorization        = "NONE" -> null
      - authorization_scopes = [] -> null
      - http_method          = "POST" -> null
      - id                   = "agm-2apxzxb0r8-6sdj3w-POST" -> null
      - region               = "us-east-2" -> null
      - request_models       = {} -> null
      - request_parameters   = {} -> null
      - resource_id          = "6sdj3w" -> null
      - rest_api_id          = "2apxzxb0r8" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_method.lambda_methods["projects-GET"] will be destroyed
  # (because aws_api_gateway_method.lambda_methods is not in configuration)
  - resource "aws_api_gateway_method" "lambda_methods" {
      - api_key_required     = false -> null
      - authorization        = "NONE" -> null
      - authorization_scopes = [] -> null
      - http_method          = "GET" -> null
      - id                   = "agm-2apxzxb0r8-chhy2i-GET" -> null
      - region               = "us-east-2" -> null
      - request_models       = {} -> null
      - request_parameters   = {} -> null
      - resource_id          = "chhy2i" -> null
      - rest_api_id          = "2apxzxb0r8" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_method.lambda_methods["projects-POST"] will be destroyed
  # (because aws_api_gateway_method.lambda_methods is not in configuration)
  - resource "aws_api_gateway_method" "lambda_methods" {
      - api_key_required     = false -> null
      - authorization        = "NONE" -> null
      - authorization_scopes = [] -> null
      - http_method          = "POST" -> null
      - id                   = "agm-2apxzxb0r8-chhy2i-POST" -> null
      - region               = "us-east-2" -> null
      - request_models       = {} -> null
      - request_parameters   = {} -> null
      - resource_id          = "chhy2i" -> null
      - rest_api_id          = "2apxzxb0r8" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_method.lambda_methods["reports-GET"] will be destroyed
  # (because aws_api_gateway_method.lambda_methods is not in configuration)
  - resource "aws_api_gateway_method" "lambda_methods" {
      - api_key_required     = false -> null
      - authorization        = "NONE" -> null
      - authorization_scopes = [] -> null
      - http_method          = "GET" -> null
      - id                   = "agm-2apxzxb0r8-wsnfk2-GET" -> null
      - region               = "us-east-2" -> null
      - request_models       = {} -> null
      - request_parameters   = {} -> null
      - resource_id          = "wsnfk2" -> null
      - rest_api_id          = "2apxzxb0r8" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_method.lambda_methods["users-DELETE"] will be destroyed
  # (because aws_api_gateway_method.lambda_methods is not in configuration)
  - resource "aws_api_gateway_method" "lambda_methods" {
      - api_key_required     = false -> null
      - authorization        = "NONE" -> null
      - authorization_scopes = [] -> null
      - http_method          = "DELETE" -> null
      - id                   = "agm-2apxzxb0r8-0dkbds-DELETE" -> null
      - region               = "us-east-2" -> null
      - request_models       = {} -> null
      - request_parameters   = {} -> null
      - resource_id          = "0dkbds" -> null
      - rest_api_id          = "2apxzxb0r8" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_method.lambda_methods["users-GET"] will be destroyed
  # (because aws_api_gateway_method.lambda_methods is not in configuration)
  - resource "aws_api_gateway_method" "lambda_methods" {
      - api_key_required     = false -> null
      - authorization        = "NONE" -> null
      - authorization_scopes = [] -> null
      - http_method          = "GET" -> null
      - id                   = "agm-2apxzxb0r8-0dkbds-GET" -> null
      - region               = "us-east-2" -> null
      - request_models       = {} -> null
      - request_parameters   = {} -> null
      - resource_id          = "0dkbds" -> null
      - rest_api_id          = "2apxzxb0r8" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_method.lambda_methods["users-PATCH"] will be destroyed
  # (because aws_api_gateway_method.lambda_methods is not in configuration)
  - resource "aws_api_gateway_method" "lambda_methods" {
      - api_key_required     = false -> null
      - authorization        = "NONE" -> null
      - authorization_scopes = [] -> null
      - http_method          = "PATCH" -> null
      - id                   = "agm-2apxzxb0r8-0dkbds-PATCH" -> null
      - region               = "us-east-2" -> null
      - request_models       = {} -> null
      - request_parameters   = {} -> null
      - resource_id          = "0dkbds" -> null
      - rest_api_id          = "2apxzxb0r8" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_method.lambda_methods["users-POST"] will be destroyed
  # (because aws_api_gateway_method.lambda_methods is not in configuration)
  - resource "aws_api_gateway_method" "lambda_methods" {
      - api_key_required     = false -> null
      - authorization        = "NONE" -> null
      - authorization_scopes = [] -> null
      - http_method          = "POST" -> null
      - id                   = "agm-2apxzxb0r8-0dkbds-POST" -> null
      - region               = "us-east-2" -> null
      - request_models       = {} -> null
      - request_parameters   = {} -> null
      - resource_id          = "0dkbds" -> null
      - rest_api_id          = "2apxzxb0r8" -> null
        # (3 unchanged attributes hidden)
    }

  # aws_api_gateway_method.lambda_proxy_any["auth"] will be created
  + resource "aws_api_gateway_method" "lambda_proxy_any" {
      + api_key_required = false
      + authorization    = "NONE"
      + http_method      = "ANY"
      + id               = (known after apply)
      + region           = "us-east-2"
      + resource_id      = (known after apply)
      + rest_api_id      = "2apxzxb0r8"
    }

  # aws_api_gateway_method.lambda_proxy_any["donors"] will be created
  + resource "aws_api_gateway_method" "lambda_proxy_any" {
      + api_key_required = false
      + authorization    = "NONE"
      + http_method      = "ANY"
      + id               = (known after apply)
      + region           = "us-east-2"
      + resource_id      = (known after apply)
      + rest_api_id      = "2apxzxb0r8"
    }

  # aws_api_gateway_method.lambda_proxy_any["expenditures"] will be created
  + resource "aws_api_gateway_method" "lambda_proxy_any" {
      + api_key_required = false
      + authorization    = "NONE"
      + http_method      = "ANY"
      + id               = (known after apply)
      + region           = "us-east-2"
      + resource_id      = (known after apply)
      + rest_api_id      = "2apxzxb0r8"
    }

  # aws_api_gateway_method.lambda_proxy_any["projects"] will be created
  + resource "aws_api_gateway_method" "lambda_proxy_any" {
      + api_key_required = false
      + authorization    = "NONE"
      + http_method      = "ANY"
      + id               = (known after apply)
      + region           = "us-east-2"
      + resource_id      = (known after apply)
      + rest_api_id      = "2apxzxb0r8"
    }

  # aws_api_gateway_method.lambda_proxy_any["reports"] will be created
  + resource "aws_api_gateway_method" "lambda_proxy_any" {
      + api_key_required = false
      + authorization    = "NONE"
      + http_method      = "ANY"
      + id               = (known after apply)
      + region           = "us-east-2"
      + resource_id      = (known after apply)
      + rest_api_id      = "2apxzxb0r8"
    }

  # aws_api_gateway_method.lambda_proxy_any["users"] will be created
  + resource "aws_api_gateway_method" "lambda_proxy_any" {
      + api_key_required = false
      + authorization    = "NONE"
      + http_method      = "ANY"
      + id               = (known after apply)
      + region           = "us-east-2"
      + resource_id      = (known after apply)
      + rest_api_id      = "2apxzxb0r8"
    }

  # aws_api_gateway_method.lambda_root_any["auth"] will be created
  + resource "aws_api_gateway_method" "lambda_root_any" {
      + api_key_required = false
      + authorization    = "NONE"
      + http_method      = "ANY"
      + id               = (known after apply)
      + region           = "us-east-2"
      + resource_id      = "u8unad"
      + rest_api_id      = "2apxzxb0r8"
    }

  # aws_api_gateway_method.lambda_root_any["donors"] will be created
  + resource "aws_api_gateway_method" "lambda_root_any" {
      + api_key_required = false
      + authorization    = "NONE"
      + http_method      = "ANY"
      + id               = (known after apply)
      + region           = "us-east-2"
      + resource_id      = "hybur2"
      + rest_api_id      = "2apxzxb0r8"
    }

  # aws_api_gateway_method.lambda_root_any["expenditures"] will be created
  + resource "aws_api_gateway_method" "lambda_root_any" {
      + api_key_required = false
      + authorization    = "NONE"
      + http_method      = "ANY"
      + id               = (known after apply)
      + region           = "us-east-2"
      + resource_id      = "6sdj3w"
      + rest_api_id      = "2apxzxb0r8"
    }

  # aws_api_gateway_method.lambda_root_any["projects"] will be created
  + resource "aws_api_gateway_method" "lambda_root_any" {
      + api_key_required = false
      + authorization    = "NONE"
      + http_method      = "ANY"
      + id               = (known after apply)
      + region           = "us-east-2"
      + resource_id      = "chhy2i"
      + rest_api_id      = "2apxzxb0r8"
    }

  # aws_api_gateway_method.lambda_root_any["reports"] will be created
  + resource "aws_api_gateway_method" "lambda_root_any" {
      + api_key_required = false
      + authorization    = "NONE"
      + http_method      = "ANY"
      + id               = (known after apply)
      + region           = "us-east-2"
      + resource_id      = "wsnfk2"
      + rest_api_id      = "2apxzxb0r8"
    }

  # aws_api_gateway_method.lambda_root_any["users"] will be created
  + resource "aws_api_gateway_method" "lambda_root_any" {
      + api_key_required = false
      + authorization    = "NONE"
      + http_method      = "ANY"
      + id               = (known after apply)
      + region           = "us-east-2"
      + resource_id      = "0dkbds"
      + rest_api_id      = "2apxzxb0r8"
    }

  # aws_api_gateway_resource.lambda_proxy["auth"] will be created
  + resource "aws_api_gateway_resource" "lambda_proxy" {
      + id          = (known after apply)
      + parent_id   = "u8unad"
      + path        = (known after apply)
      + path_part   = "{proxy+}"
      + region      = "us-east-2"
      + rest_api_id = "2apxzxb0r8"
    }

  # aws_api_gateway_resource.lambda_proxy["donors"] will be created
  + resource "aws_api_gateway_resource" "lambda_proxy" {
      + id          = (known after apply)
      + parent_id   = "hybur2"
      + path        = (known after apply)
      + path_part   = "{proxy+}"
      + region      = "us-east-2"
      + rest_api_id = "2apxzxb0r8"
    }

  # aws_api_gateway_resource.lambda_proxy["expenditures"] will be created
  + resource "aws_api_gateway_resource" "lambda_proxy" {
      + id          = (known after apply)
      + parent_id   = "6sdj3w"
      + path        = (known after apply)
      + path_part   = "{proxy+}"
      + region      = "us-east-2"
      + rest_api_id = "2apxzxb0r8"
    }

  # aws_api_gateway_resource.lambda_proxy["projects"] will be created
  + resource "aws_api_gateway_resource" "lambda_proxy" {
      + id          = (known after apply)
      + parent_id   = "chhy2i"
      + path        = (known after apply)
      + path_part   = "{proxy+}"
      + region      = "us-east-2"
      + rest_api_id = "2apxzxb0r8"
    }

  # aws_api_gateway_resource.lambda_proxy["reports"] will be created
  + resource "aws_api_gateway_resource" "lambda_proxy" {
      + id          = (known after apply)
      + parent_id   = "wsnfk2"
      + path        = (known after apply)
      + path_part   = "{proxy+}"
      + region      = "us-east-2"
      + rest_api_id = "2apxzxb0r8"
    }

  # aws_api_gateway_resource.lambda_proxy["users"] will be created
  + resource "aws_api_gateway_resource" "lambda_proxy" {
      + id          = (known after apply)
      + parent_id   = "0dkbds"
      + path        = (known after apply)
      + path_part   = "{proxy+}"
      + region      = "us-east-2"
      + rest_api_id = "2apxzxb0r8"
    }

  # aws_api_gateway_stage.branch_stage will be updated in-place
  ~ resource "aws_api_gateway_stage" "branch_stage" {
      ~ deployment_id         = "klh9jv" -> (known after apply)
        id                    = "ags-2apxzxb0r8-prod"
        tags                  = {}
        # (15 unchanged attributes hidden)
    }

  # aws_db_instance.branch_rds will be updated in-place
  ~ resource "aws_db_instance" "branch_rds" {
      ~ engine_version                        = "17.9" -> "17.6"
        id                                    = "db-AMMYFTORW6XJGRELV7WQZCNHQI"
        tags                                  = {}
        # (72 unchanged attributes hidden)
    }

Plan: 31 to add, 3 to change, 25 to destroy.

─────────────────────────────────────────────────────────────────────────────

Saved the plan to: tfplan

To perform exactly these actions, run the following command to apply:
    terraform apply "tfplan"

Pushed by: @nourshoreibah, Action: pull_request

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant