From 867f19de407a1e93d2341a8349bbe9a3cf06c37e Mon Sep 17 00:00:00 2001 From: Deni Velasquez Date: Sat, 5 Apr 2025 22:44:32 -0400 Subject: [PATCH 01/10] fixing dev env --- endpoints/queries/query.py | 5 +- endpoints/queries/utils/opensearch.py | 92 ++++++++++----------- endpoints/queries/utils/query_opensearch.py | 2 +- endpoints/queries/utils/secrets_manager.py | 76 ++++++++++------- template.yaml | 9 ++ 5 files changed, 104 insertions(+), 80 deletions(-) diff --git a/endpoints/queries/query.py b/endpoints/queries/query.py index df536e7..aaae904 100644 --- a/endpoints/queries/query.py +++ b/endpoints/queries/query.py @@ -5,8 +5,6 @@ from queries.utils.query_sql import append_docket_titles from queries.utils.sql import connect -conn = connect() - def filter_dockets(dockets, filter_params=None): if filter_params is None: return dockets @@ -112,7 +110,7 @@ def drop_previous_results(searchTerm, sessionID, sortParams, filterParams): def storeDockets(dockets, searchTerm, sessionID, sortParams, filterParams, totalResults): - + conn = connect() for i in range(min(totalResults, len(dockets))): values = ( @@ -171,6 +169,7 @@ def getSavedResults(searchTerm, sessionID, sortParams, filterParams): def search(search_params): + conn = connect() searchTerm = search_params["searchTerm"] pageNumber = search_params["pageNumber"] refreshResults = search_params["refreshResults"] diff --git a/endpoints/queries/utils/opensearch.py b/endpoints/queries/utils/opensearch.py index 1bc6f38..e683f7d 100644 --- a/endpoints/queries/utils/opensearch.py +++ b/endpoints/queries/utils/opensearch.py @@ -1,65 +1,63 @@ import os from dotenv import load_dotenv -import certifi import boto3 from opensearchpy import OpenSearch, RequestsHttpConnection, AWSV4SignerAuth -from queries.utils.secrets_manager import get_secret -''' -This function creates an OpenSearch client. If the environment variables OPENSEARCH_HOST if OPENSEARCH_PORT are not -set, an error is raised. If the host is set to 'localhost', the client is created with basic authentication. Otherwise, -the client is created with AWS request signing. The function returns the OpenSearch client. -All code that depends on whether we are connecting to a local or production OpenSearch instance is inside of this function. -Outside of the function, interaction with the client is the same regardless of the environment. -''' def connect(): + from queries.utils.secrets_manager import get_secret - if os.getenv('OS_SECRET_NAME'): - secret_name = os.getenv('OS_SECRET_NAME') - secret = get_secret(secret_name) - - host = secret["host"] - port = secret['port'] - else: + env = os.getenv("ENVIRONMENT", "").lower() + print("[DEBUG] ENVIRONMENT from opensearch:", env) + + if env == 'local': + print("[DEBUG] Using local environment variables for OpenSearch.") load_dotenv() host = os.getenv('OPENSEARCH_HOST', 'opensearch-node1') port = os.getenv('OPENSEARCH_PORT', '9200') - region = 'us-east-1' + password = os.getenv('OPENSEARCH_INITIAL_ADMIN_PASSWORD') - if host is None or port is None: - raise ValueError('Please set the environment variables OPENSEARCH_HOST and OPENSEARCH_PORT') - - if host in ['localhost', 'opensearch-node1']: - auth = ('admin', os.getenv('OPENSEARCH_INITIAL_ADMIN_PASSWORD')) + if not password: + raise ValueError("Missing OPENSEARCH_INITIAL_ADMIN_PASSWORD in local environment.") + + auth = ('admin', password) + use_ssl = False + verify_certs = False + connection_class = RequestsHttpConnection + else: + print("[DEBUG] Using AWS Secrets Manager for OpenSearch.") + secret_name = os.getenv('OS_SECRET_NAME', 'mirrulationsdb/opensearch/master') + secret = get_secret(secret_name) + host = secret.get("host") + port = secret.get("port") + region = os.environ.get('AWS_REGION', 'us-east-1') - ca_certs_path = certifi.where() - # Create the client with SSL/TLS enabled, but hostname verification disabled. - client = OpenSearch( - hosts = [{'host': host, 'port': port}], - http_compress = True, # enables gzip compression for request bodies - http_auth = auth, - use_ssl = False, - verify_certs = False, - ssl_assert_hostname = False, - ssl_show_warn = False, - ca_certs = ca_certs_path - ) + auth = AWSV4SignerAuth(boto3.Session().get_credentials(), region, 'aoss') + use_ssl = True + verify_certs = False + connection_class = RequestsHttpConnection + + if not host or not port: + raise ValueError('Please set the environment variables OPENSEARCH_HOST and OPENSEARCH_PORT') - return client - - service = 'aoss' - credentials = boto3.Session().get_credentials() - auth = AWSV4SignerAuth(credentials, region, service) - # Create the client using AWS request signing client = OpenSearch( - hosts=[{'host': host, 'port': port}], - http_compress = True, # enables gzip compression for request bodies + hosts=[{'host': host, 'port': int(port)}], + http_compress=True, http_auth=auth, - use_ssl=True, - verify_certs=False, - connection_class=RequestsHttpConnection, + use_ssl=use_ssl, + verify_certs=verify_certs, + ssl_assert_hostname=False, + ssl_show_warn=False, + connection_class=connection_class, pool_maxsize=20, - timeout=60 + timeout=30 ) - return client \ No newline at end of file + try: + print(f"[DEBUG] Attempting to connect to OpenSearch at {host}:{port}") + client.info(timeout=5) + print("[DEBUG] Connected successfully") + except Exception as e: + print(f"[ERROR] Failed to connect to OpenSearch: {e}") + raise + + return client diff --git a/endpoints/queries/utils/query_opensearch.py b/endpoints/queries/utils/query_opensearch.py index 443ee8a..ef57d6b 100644 --- a/endpoints/queries/utils/query_opensearch.py +++ b/endpoints/queries/utils/query_opensearch.py @@ -1,7 +1,7 @@ from queries.utils.opensearch import connect as create_client -client = create_client() def query_OpenSearch(search_term): + client = create_client() index_name = "comments" diff --git a/endpoints/queries/utils/secrets_manager.py b/endpoints/queries/utils/secrets_manager.py index 896ebd4..98aeabd 100644 --- a/endpoints/queries/utils/secrets_manager.py +++ b/endpoints/queries/utils/secrets_manager.py @@ -1,38 +1,56 @@ import os import json import boto3 -from botocore.exceptions import ClientError +import traceback def get_secret(secret_name): - """ - Retrieve a secret from AWS Secrets Manager - Args: - secret_name: Name of the secret to retrieve - Returns: - dict: The secret key/value pairs - """ - region_name = os.environ.get('AWS_REGION', 'us-east-1') + env = os.getenv("ENVIRONMENT", "").lower() + print("[DEBUG] ENVIRONMENT from secrets_manager:", env) - # Create a Secrets Manager client - session = boto3.session.Session() - client = session.client( - service_name='secretsmanager', - region_name=region_name - ) + if env == "local": + print("[DEBUG] Using local environment variables for secrets.") + print("[DEBUG] All env vars:", dict(os.environ)) - try: - # Get the secret value - response = client.get_secret_value(SecretId=secret_name) - print(response) + try: + if "postgres" in secret_name: + return { + "username": os.getenv("POSTGRES_USER"), + "password": os.getenv("POSTGRES_PASSWORD"), + "engine": "postgres", + "host": os.getenv("POSTGRES_HOST"), + "port": int(os.getenv("POSTGRES_PORT")), + "db": os.getenv("POSTGRES_DB") + } + elif "opensearch" in secret_name: + return { + "host": os.getenv("OPENSEARCH_HOST"), + "port": int(os.getenv("OPENSEARCH_PORT")), + "password": os.getenv("OPENSEARCH_INITIAL_ADMIN_PASSWORD") + } + else: + raise ValueError(f"[ERROR] Unknown secret name for local: {secret_name}") + except Exception as e: + print(f"[ERROR] Exception while loading local secrets: {e}") + traceback.print_exc() + raise e - # Decode and parse the secret string JSON - if 'SecretString' in response: - secret = json.loads(response['SecretString']) - return secret - else: - print("Secret not found in expected format") - raise Exception("Secret not found in expected format") + print("[DEBUG] Fetching secret from AWS Secrets Manager.") + client = boto3.client('secretsmanager') + response = client.get_secret_value(SecretId=secret_name) + secret = json.loads(response['SecretString']) - except ClientError as e: - print(f"Error retrieving secret: {str(e)}") - raise e \ No newline at end of file + if "username" in secret: + return { + "username": secret["username"], + "password": secret["password"], + "engine": secret["engine"], + "host": secret["host"], + "port": int(secret["port"]), + "db": secret.get("db", "postgres") + } + else: + return { + "host": secret["host"], + "port": int(secret["port"]), + "password": secret.get("password") + } diff --git a/template.yaml b/template.yaml index c02ccc1..24c8dbb 100644 --- a/template.yaml +++ b/template.yaml @@ -67,7 +67,16 @@ Resources: Resource: "arn:aws:secretsmanager:us-east-1:936771282063:secret:mirrulationsdb/opensearch/master-7xJt7C" Environment: Variables: + ENVIRONMENT: "local" DB_SECRET_NAME: "mirrulationsdb/postgres/master" OS_SECRET_NAME: "mirrulationsdb/opensearch/master" + OPENSEARCH_HOST: "opensearch-node1" + OPENSEARCH_PORT: "9200" + OPENSEARCH_INITIAL_ADMIN_PASSWORD: "Soccer^5life" + POSTGRES_HOST: "db" + POSTGRES_PORT: "5432" + POSTGRES_DB: "postgres" + POSTGRES_USER: "postgres" + POSTGRES_PASSWORD: "password" Timeout: 15 Role: arn:aws:iam::936771282063:role/334s25_lambda_execution_opensearch \ No newline at end of file From 1dbd35b685f052d6847c0730f1c803471623b1ce Mon Sep 17 00:00:00 2001 From: Deni Velasquez Date: Sun, 6 Apr 2025 19:27:03 -0400 Subject: [PATCH 02/10] environment variables using env json --- template.yaml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/template.yaml b/template.yaml index 24c8dbb..863fa99 100644 --- a/template.yaml +++ b/template.yaml @@ -67,16 +67,16 @@ Resources: Resource: "arn:aws:secretsmanager:us-east-1:936771282063:secret:mirrulationsdb/opensearch/master-7xJt7C" Environment: Variables: - ENVIRONMENT: "local" - DB_SECRET_NAME: "mirrulationsdb/postgres/master" - OS_SECRET_NAME: "mirrulationsdb/opensearch/master" - OPENSEARCH_HOST: "opensearch-node1" - OPENSEARCH_PORT: "9200" - OPENSEARCH_INITIAL_ADMIN_PASSWORD: "Soccer^5life" - POSTGRES_HOST: "db" - POSTGRES_PORT: "5432" - POSTGRES_DB: "postgres" - POSTGRES_USER: "postgres" - POSTGRES_PASSWORD: "password" + ENVIRONMENT: "" + DB_SECRET_NAME: "" + OS_SECRET_NAME: "" + OPENSEARCH_HOST: "" + OPENSEARCH_PORT: "" + OPENSEARCH_INITIAL_ADMIN_PASSWORD: "" + POSTGRES_HOST: "" + POSTGRES_PORT: "" + POSTGRES_DB: "" + POSTGRES_USER: "" + POSTGRES_PASSWORD: "" Timeout: 15 Role: arn:aws:iam::936771282063:role/334s25_lambda_execution_opensearch \ No newline at end of file From f70cae1e32c855d3c7d5c529518c15a47b4753bb Mon Sep 17 00:00:00 2001 From: Deni Velasquez Date: Sun, 6 Apr 2025 20:43:41 -0400 Subject: [PATCH 03/10] test makes connection --- .gitignore | 3 ++- endpoints/queries/query.py | 26 ++++++++++++++++----- endpoints/queries/utils/opensearch.py | 1 - endpoints/queries/utils/query_opensearch.py | 2 +- endpoints/queries/utils/secrets_manager.py | 3 --- 5 files changed, 23 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 6314665..2f4edbf 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ __pycache__ .vscode # The build folder for sam .aws-sam -.venv \ No newline at end of file +.venv +env.json \ No newline at end of file diff --git a/endpoints/queries/query.py b/endpoints/queries/query.py index aaae904..5a712d4 100644 --- a/endpoints/queries/query.py +++ b/endpoints/queries/query.py @@ -5,6 +5,8 @@ from queries.utils.query_sql import append_docket_titles from queries.utils.sql import connect +conn = connect() + def filter_dockets(dockets, filter_params=None): if filter_params is None: return dockets @@ -89,7 +91,10 @@ def sort_aoss_results(results, sort_type, desc=True): return results def drop_previous_results(searchTerm, sessionID, sortParams, filterParams): - + if isinstance(sortParams, str): + sortParams = json.loads(sortParams) + if isinstance(filterParams, str): + filterParams = json.loads(filterParams) conn = connect() try: @@ -100,7 +105,7 @@ def drop_previous_results(searchTerm, sessionID, sortParams, filterParams): AND filter_agencies = %s AND filter_date_start = %s AND filter_date_end = %s AND filter_rulemaking = %s """ cursor.execute(delete_query, (searchTerm, sessionID, sortParams["desc"], sortParams["sortType"], - ",".join(sorted(filterParams["agencies"])) if filterParams["agencies"] else '', filterParams["dateRange"]["start"], + ",".join(sorted(filterParams.get("agencies", []))) if filterParams.get("agencies") else '', filterParams["dateRange"]["start"], filterParams["dateRange"]["end"], filterParams["docketType"])) except Exception as e: print(f"Error deleting previous results for search term {searchTerm}") @@ -110,7 +115,7 @@ def drop_previous_results(searchTerm, sessionID, sortParams, filterParams): def storeDockets(dockets, searchTerm, sessionID, sortParams, filterParams, totalResults): - conn = connect() + for i in range(min(totalResults, len(dockets))): values = ( @@ -147,7 +152,11 @@ def storeDockets(dockets, searchTerm, sessionID, sortParams, filterParams, total conn.commit() def getSavedResults(searchTerm, sessionID, sortParams, filterParams): - + if isinstance(sortParams, str): + sortParams = json.loads(sortParams) + if isinstance(filterParams, str): + filterParams = json.loads(filterParams) + conn = connect() try: @@ -158,7 +167,7 @@ def getSavedResults(searchTerm, sessionID, sortParams, filterParams): AND filter_date_start = %s AND filter_date_end = %s AND filter_rulemaking = %s """ cursor.execute(select_query, (searchTerm, sessionID, sortParams["desc"], sortParams["sortType"], - ",".join(sorted(filterParams["agencies"])) if filterParams["agencies"] else '', filterParams["dateRange"]["start"], + ",".join(sorted(filterParams.get("agencies", []))) if filterParams.get("agencies") else '', filterParams["dateRange"]["start"], filterParams["dateRange"]["end"], filterParams["docketType"])) dockets = cursor.fetchall() except Exception as e: @@ -169,7 +178,6 @@ def getSavedResults(searchTerm, sessionID, sortParams, filterParams): def search(search_params): - conn = connect() searchTerm = search_params["searchTerm"] pageNumber = search_params["pageNumber"] refreshResults = search_params["refreshResults"] @@ -177,6 +185,12 @@ def search(search_params): sortParams = search_params["sortParams"] filterParams = search_params["filterParams"] + if isinstance(sortParams, str): + sortParams = json.loads(sortParams) + if isinstance(filterParams, str): + filterParams = json.loads(filterParams) + + perPage = 10 pages = 10 totalResults = perPage * pages diff --git a/endpoints/queries/utils/opensearch.py b/endpoints/queries/utils/opensearch.py index e683f7d..ad460f7 100644 --- a/endpoints/queries/utils/opensearch.py +++ b/endpoints/queries/utils/opensearch.py @@ -7,7 +7,6 @@ def connect(): from queries.utils.secrets_manager import get_secret env = os.getenv("ENVIRONMENT", "").lower() - print("[DEBUG] ENVIRONMENT from opensearch:", env) if env == 'local': print("[DEBUG] Using local environment variables for OpenSearch.") diff --git a/endpoints/queries/utils/query_opensearch.py b/endpoints/queries/utils/query_opensearch.py index ef57d6b..443ee8a 100644 --- a/endpoints/queries/utils/query_opensearch.py +++ b/endpoints/queries/utils/query_opensearch.py @@ -1,7 +1,7 @@ from queries.utils.opensearch import connect as create_client +client = create_client() def query_OpenSearch(search_term): - client = create_client() index_name = "comments" diff --git a/endpoints/queries/utils/secrets_manager.py b/endpoints/queries/utils/secrets_manager.py index 98aeabd..de351d5 100644 --- a/endpoints/queries/utils/secrets_manager.py +++ b/endpoints/queries/utils/secrets_manager.py @@ -8,9 +8,6 @@ def get_secret(secret_name): print("[DEBUG] ENVIRONMENT from secrets_manager:", env) if env == "local": - print("[DEBUG] Using local environment variables for secrets.") - print("[DEBUG] All env vars:", dict(os.environ)) - try: if "postgres" in secret_name: return { From d5fae0c7d0be9a2b5a225a50e31b8876f900e48b Mon Sep 17 00:00:00 2001 From: Deni Velasquez Date: Mon, 7 Apr 2025 12:47:25 -0400 Subject: [PATCH 04/10] updated to add env json --- README.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c67e1f1..523459a 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,26 @@ npm install react react-dom react-router-dom npm install bootstrap npm install -D @vitejs/plugin-react ``` -4. Launch the API, navigate to the API repo and run the following commands +4. Add a env.json to add all credentials necessary +``` +{ + "ApiFunction": { + "ENVIRONMENT": "local", #specify local if working in local + "OPENSEARCH_HOST": "opensearch-node1", + "OPENSEARCH_PORT": "9200", + "OPENSEARCH_INITIAL_ADMIN_PASSWORD": "", + "POSTGRES_HOST": "db", + "POSTGRES_PORT": "5432", + "POSTGRES_DB": "postgres", + "POSTGRES_USER": "postgres", + "POSTGRES_PASSWORD": "password", + "DB_SECRET_NAME": "mirrulationsdb/postgres/master", + "OS_SECRET_NAME": "mirrulationsdb/opensearch/master" + } + } +``` + +5. Launch the API, navigate to the API repo and run the following commands ``` sam build sam local start-api From f615a6be6dedc791d6cc0e7a8d78aece114baf32 Mon Sep 17 00:00:00 2001 From: Deni Velasquez Date: Mon, 7 Apr 2025 23:53:21 -0400 Subject: [PATCH 05/10] added documentation for local testing --- README.md | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 523459a..af23869 100644 --- a/README.md +++ b/README.md @@ -49,9 +49,10 @@ npm install -D @vitejs/plugin-react 5. Launch the API, navigate to the API repo and run the following commands ``` -sam build -sam local start-api +sam build && sam local start-api --env-vars env.json --docker-network shared_network ``` +**Note:** Make sure that you have the env.json in the root directory as sam would need to pick up the environment variables! + If you make changes to template.yaml, run sam validate to check for errors and sam build to implement the changes. Take note of your api gateway link for later, you can see it in the output under “Mounting ApiFunction at {GATEWAY_URL_HERE} [GET, OPTIONS]” @@ -66,6 +67,31 @@ Take note of your api gateway link for later, you can see it in the output under npm run dev ``` +**NOTE:** As of currently you can only look up "National" as that is what is currently in `data-product-kit`'s `query.py`. If you want to change the searchTerm you can do so in the file: + +`data-pruduct-kit/queries/query.py`: +```bash +if __name__ == "__main__": + query_params = { + "searchTerm": "National", <--- change here + "pageNumber": 0, + "refreshResults": True, + "sessionID": "session1", + "sortParams": { + "sortType": "dateModified", + "desc": True, + }, + "filterParams": { + "agencies": [], + "dateRange": { + "start": "1970-01-01T00:00:00Z", + "end": "2025-03-21T00:00:00Z", + }, + "docketType": "", + }, + } +``` + ### How to Launch just the API - If any changes have been made to `template.yaml`, run `sam validate` to check for errors. - Make sure to install [Docker](https://www.docker.com/get-started/) From ef21d5341ba363cc45fe74a0aaa99e0f35020bd5 Mon Sep 17 00:00:00 2001 From: Deni Velasquez Date: Wed, 9 Apr 2025 14:34:13 -0400 Subject: [PATCH 06/10] using parameter override --- samconfig.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samconfig.toml b/samconfig.toml index a1fe67b..1ceb02f 100644 --- a/samconfig.toml +++ b/samconfig.toml @@ -17,4 +17,4 @@ region = "us-east-1" confirm_changeset = true # Example: Ensure manual review of changesets in prod capabilities = "CAPABILITY_IAM" disable_rollback = false # Example: Automatically rollback on failure to ensure stability - +parameter_overrides = "ENVIRONMENT=prod OS_SECRET_NAME=mirrulationsdb/opensearch/master DB_SECRET_NAME=mirrulationsdb/postgres/master" From 752d700a5711c461d0a6b6711e370b873ab70b38 Mon Sep 17 00:00:00 2001 From: Deni Velasquez Date: Wed, 9 Apr 2025 23:02:19 -0400 Subject: [PATCH 07/10] Redocumenting read me --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index af23869..5d3afdf 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,10 @@ npm install -D @vitejs/plugin-react } } ``` +5. Install the [Data-Product-Kit Repo](https://github.com/mirrulations/Data-Product-Kit) to set up the docker. Follow the `ReadMe.md` up to setting up the installations necessary.`LocalTesting.md` instructions. Start with section **"Clean Reset"** and then move on to the top of the document. -5. Launch the API, navigate to the API repo and run the following commands + +6. Launch the API, navigate to the API repo and run the following commands ``` sam build && sam local start-api --env-vars env.json --docker-network shared_network ``` @@ -58,7 +60,7 @@ If you make changes to template.yaml, run sam validate to check for errors and s Take note of your api gateway link for later, you can see it in the output under “Mounting ApiFunction at {GATEWAY_URL_HERE} [GET, OPTIONS]” -5. Launch the Website +7. Launch the Website - Create a file named “.env” - Type “VITE_GATEWAY_API_URL={GATEWAY_URL}” - Your Gateway URL is the output from the last step, it might look something like “http://127.0.0.1:3000/dummy” From de00c4d41aec3a7ca752ec4c49b9876dce4d6909 Mon Sep 17 00:00:00 2001 From: Deni Velasquez Date: Sat, 12 Apr 2025 20:58:57 -0400 Subject: [PATCH 08/10] updated readme --- README.md | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/README.md b/README.md index a0841b7..7590c5e 100644 --- a/README.md +++ b/README.md @@ -72,31 +72,6 @@ Take note of your api gateway link for later, you can see it in the output under npm run dev ``` -**NOTE:** As of currently you can only look up "National" as that is what is currently in `data-product-kit`'s `query.py`. If you want to change the searchTerm you can do so in the file: - -`data-pruduct-kit/queries/query.py`: -```bash -if __name__ == "__main__": - query_params = { - "searchTerm": "National", <--- change here - "pageNumber": 0, - "refreshResults": True, - "sessionID": "session1", - "sortParams": { - "sortType": "dateModified", - "desc": True, - }, - "filterParams": { - "agencies": [], - "dateRange": { - "start": "1970-01-01T00:00:00Z", - "end": "2025-03-21T00:00:00Z", - }, - "docketType": "", - }, - } -``` - ### How to Launch just the API - If any changes have been made to `template.yaml`, run `sam validate` to check for errors. - Make sure to install [Docker](https://www.docker.com/get-started/) From f7c28f9db3f64b50239cdb22f00007617d794f73 Mon Sep 17 00:00:00 2001 From: Deni Velasquez Date: Sat, 12 Apr 2025 21:05:01 -0400 Subject: [PATCH 09/10] Restore accidentally removed endpoints/queries submodule --- endpoints/queries | 1 + 1 file changed, 1 insertion(+) create mode 160000 endpoints/queries diff --git a/endpoints/queries b/endpoints/queries new file mode 160000 index 0000000..a6143c2 --- /dev/null +++ b/endpoints/queries @@ -0,0 +1 @@ +Subproject commit a6143c26759d0e07296665f58cee0c43a93f1817 From 7fb04d761ffbfcb06dda91c2c2aace00a269f1a9 Mon Sep 17 00:00:00 2001 From: Deni Velasquez Date: Sat, 12 Apr 2025 21:06:59 -0400 Subject: [PATCH 10/10] override no longer needed --- samconfig.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/samconfig.toml b/samconfig.toml index 1ceb02f..f9108b2 100644 --- a/samconfig.toml +++ b/samconfig.toml @@ -17,4 +17,3 @@ region = "us-east-1" confirm_changeset = true # Example: Ensure manual review of changesets in prod capabilities = "CAPABILITY_IAM" disable_rollback = false # Example: Automatically rollback on failure to ensure stability -parameter_overrides = "ENVIRONMENT=prod OS_SECRET_NAME=mirrulationsdb/opensearch/master DB_SECRET_NAME=mirrulationsdb/postgres/master"