aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--src/extract_lambda.py1
-rw-r--r--src/secrets_manager.py48
-rw-r--r--test/test_secrets_manager.py34
4 files changed, 84 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index d1df545..d164c3f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@
.terraform*
log*
.DS_Store
+venv \ No newline at end of file
diff --git a/src/extract_lambda.py b/src/extract_lambda.py
index 7d56c66..faa1d30 100644
--- a/src/extract_lambda.py
+++ b/src/extract_lambda.py
@@ -2,6 +2,7 @@ from pg8000.native import Connection, Error, DatabaseError, InterfaceError
from dotenv import load_dotenv
import os
+
load_dotenv()
def extract():
diff --git a/src/secrets_manager.py b/src/secrets_manager.py
new file mode 100644
index 0000000..c0fb61e
--- /dev/null
+++ b/src/secrets_manager.py
@@ -0,0 +1,48 @@
+import boto3
+from botocore.exceptions import ClientError
+import json
+
+
+def sm_client():
+ sm_client = boto3.client('secretsmanager')
+ yield sm_client
+
+def create_secret(sm_client, secret_name, cohort_id, user, password, host, database, port):
+ secret = {
+ "cohort_id": cohort_id,
+ "user": user,
+ "password": password,
+ "host": host,
+ "database": database,
+ "port": port
+ }
+
+ response = sm_client.create_secret(
+ Name = secret_name,
+ SecretString = json.dumps(secret)
+ )
+
+ print(response)
+ return response
+
+def list_secret(sm_client):
+ response = sm_client.list_secrets()
+ secret_dict = response['SecretList']
+ secret_names = []
+ for items in secret_dict:
+ secret_names.append(items['Name'])
+ print(f'{len(secret_names)} secret(s) available')
+ for name in secret_names:
+ print(name)
+ return secret_names
+
+def retrieve_secrets(sm_client):
+ response = sm_client.get_secrets(
+
+ )
+
+
+
+#retrieve secret
+#so lambda can access totesy db
+#so lambda connect to the db and then retrieve the data \ No newline at end of file
diff --git a/test/test_secrets_manager.py b/test/test_secrets_manager.py
new file mode 100644
index 0000000..86533bc
--- /dev/null
+++ b/test/test_secrets_manager.py
@@ -0,0 +1,34 @@
+from src.secrets_manager import sm_client, create_secret, list_secret
+import boto3
+from moto import mock_aws
+import json
+import pytest
+import os
+
+pytest.fixture(scope='class')
+def mock_aws_credentials():
+ """Mocked AWS Credentials for moto."""
+ os.environ["AWS_ACCESS_KEY_ID"] = "testing"
+ os.environ["AWS_SECRET_ACCESS_KEY"] = "testing"
+ os.environ["AWS_SECURITY_TOKEN"] = "testing"
+ os.environ["AWS_SESSION_TOKEN"] = "testing"
+ os.environ["AWS_DEFAULT_REGION"] = "eu-west-2"
+
+@pytest.fixture(scope='class')
+def mock_sm_client(mock_aws_credentials):
+ with mock_aws():
+ yield boto3.client('secretsmanager')
+
+
+def test_create_secret_stores_secrets(mock_sm_client):
+ cohort_id = "test_cohort_id"
+ user = "test_user_id"
+ password = "test_password"
+ host = "test_host"
+ database = "test_database"
+ port = "test_port"
+
+ secret_name = "test_secret"
+ response = create_secret(mock_sm_client, secret_name, cohort_id, user, password, host, database, port)
+
+ assert response['Name'] == secret_name \ No newline at end of file
git.ajschof.me — hosted by ajschofield — powered by cgit