Skip to content

Commit 5e8be5c

Browse files
committed
refactor(auth, iam): support serverless get_workgroup
1 parent edeab0f commit 5e8be5c

File tree

2 files changed

+37
-5
lines changed

2 files changed

+37
-5
lines changed

redshift_connector/iam_helper.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,9 @@ def set_iam_properties(info: RedshiftProperty) -> RedshiftProperty:
9494
IamHelper.set_auth_properties(info)
9595

9696
if info._is_serverless and info.iam:
97-
if Version(pkg_resources.get_distribution("boto3").version) < Version("1.24.5"):
97+
if Version(pkg_resources.get_distribution("boto3").version) < Version("1.24.11"):
9898
raise pkg_resources.VersionConflict(
99-
"boto3 >= 1.24.5 required for authentication with Amazon Redshift serverless. "
99+
"boto3 >= 1.24.11 required for authentication with Amazon Redshift serverless. "
100100
"Please upgrade the installed version of boto3 to use this functionality."
101101
)
102102

@@ -274,9 +274,11 @@ def set_cluster_credentials(
274274
response: dict
275275

276276
if info._is_serverless:
277-
response = client.describe_configuration()
278-
info.put("host", response["endpoint"]["address"])
279-
info.put("port", response["endpoint"]["port"])
277+
if not info.serverless_work_group:
278+
raise InterfaceError("Serverless workgroup is not set.")
279+
response = client.get_workgroup(workgroupName=info.serverless_work_group)
280+
info.put("host", response["workgroup"]["endpoint"]["address"])
281+
info.put("port", response["workgroup"]["endpoint"]["port"])
280282
else:
281283
response = client.describe_clusters(ClusterIdentifier=info.cluster_identifier)
282284
info.put("host", response["Clusters"][0]["Endpoint"]["Address"])

test/manual/test_redshift_serverless.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,33 @@ def test_idp_auth(okta_idp):
4040

4141
with redshift_connector.connect(**okta_idp):
4242
pass
43+
44+
45+
@pytest.mark.skip()
46+
def test_connection_without_host(serverless_iam_db_kwargs):
47+
serverless_iam_db_kwargs["is_serverless"] = True
48+
serverless_iam_db_kwargs["host"] = None
49+
serverless_iam_db_kwargs["serverless_work_group"] = "default"
50+
with redshift_connector.connect(**serverless_iam_db_kwargs) as conn:
51+
with conn.cursor() as cursor:
52+
cursor.execute("select 1")
53+
54+
55+
@pytest.mark.skip()
56+
def test_nlb_connection(serverless_iam_db_kwargs):
57+
serverless_iam_db_kwargs["is_serverless"] = True
58+
serverless_iam_db_kwargs["host"] = "my_nlb_endpoint"
59+
serverless_iam_db_kwargs["serverless_work_group"] = "default"
60+
with redshift_connector.connect(**serverless_iam_db_kwargs) as conn:
61+
with conn.cursor() as cursor:
62+
cursor.execute("select 1")
63+
64+
65+
@pytest.mark.skip()
66+
def test_vpc_endpoint_connection(serverless_iam_db_kwargs):
67+
serverless_iam_db_kwargs["is_serverless"] = True
68+
serverless_iam_db_kwargs["host"] = "my_vpc_endpoint"
69+
serverless_iam_db_kwargs["serverless_work_group"] = "default"
70+
with redshift_connector.connect(**serverless_iam_db_kwargs) as conn:
71+
with conn.cursor() as cursor:
72+
cursor.execute("select 1")

0 commit comments

Comments
 (0)