RDS: add enable_http_endpoint attribute (#5470)

This commit is contained in:
Marshall Mamiya 2022-09-19 10:14:27 -07:00 committed by GitHub
parent 03a43a9a0d
commit b0e78140f5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 63 additions and 1 deletions

View File

@ -114,6 +114,31 @@ class Cluster:
self.enabled_cloudwatch_logs_exports = ( self.enabled_cloudwatch_logs_exports = (
kwargs.get("enable_cloudwatch_logs_exports") or [] kwargs.get("enable_cloudwatch_logs_exports") or []
) )
self.enable_http_endpoint = False
# instead of raising an error on aws rds create-db-cluster commands with
# incompatible configurations with enable_http_endpoint
# (e.g. engine_mode is not set to "serverless"), the API
# automatically sets the enable_http_endpoint parameter to False
if kwargs.get("enable_http_endpoint"):
if self.engine_mode == "serverless":
if self.engine == "aurora-mysql" and self.engine_version in [
"5.6.10a",
"5.6.1",
"2.07.1",
"5.7.2",
]:
self.enable_http_endpoint = kwargs.get(
"enable_http_endpoint", False
)
elif self.engine == "aurora-postgresql" and self.engine_version in [
"10.12",
"10.14",
"10.18",
"11.13",
]:
self.enable_http_endpoint = kwargs.get(
"enable_http_endpoint", False
)
@property @property
def db_cluster_arn(self): def db_cluster_arn(self):
@ -170,7 +195,7 @@ class Cluster:
<IAMDatabaseAuthenticationEnabled>false</IAMDatabaseAuthenticationEnabled> <IAMDatabaseAuthenticationEnabled>false</IAMDatabaseAuthenticationEnabled>
<EngineMode>{{ cluster.engine_mode }}</EngineMode> <EngineMode>{{ cluster.engine_mode }}</EngineMode>
<DeletionProtection>{{ 'true' if cluster.deletion_protection else 'false' }}</DeletionProtection> <DeletionProtection>{{ 'true' if cluster.deletion_protection else 'false' }}</DeletionProtection>
<HttpEndpointEnabled>false</HttpEndpointEnabled> <HttpEndpointEnabled>{{ cluster.enable_http_endpoint }}</HttpEndpointEnabled>
<CopyTagsToSnapshot>{{ cluster.copy_tags_to_snapshot }}</CopyTagsToSnapshot> <CopyTagsToSnapshot>{{ cluster.copy_tags_to_snapshot }}</CopyTagsToSnapshot>
<CrossAccountClone>false</CrossAccountClone> <CrossAccountClone>false</CrossAccountClone>
<DomainMemberships></DomainMemberships> <DomainMemberships></DomainMemberships>

View File

@ -117,6 +117,7 @@ class RDSResponse(BaseResponse):
"parameter_group": self._get_param("DBClusterParameterGroup"), "parameter_group": self._get_param("DBClusterParameterGroup"),
"region": self.region, "region": self.region,
"db_cluster_instance_class": self._get_param("DBClusterInstanceClass"), "db_cluster_instance_class": self._get_param("DBClusterInstanceClass"),
"enable_http_endpoint": self._get_param("EnableHttpEndpoint"),
"copy_tags_to_snapshot": self._get_param("CopyTagsToSnapshot"), "copy_tags_to_snapshot": self._get_param("CopyTagsToSnapshot"),
"tags": self.unpack_complex_list_params("Tags.Tag", ("Key", "Value")), "tags": self.unpack_complex_list_params("Tags.Tag", ("Key", "Value")),
} }

View File

@ -716,3 +716,39 @@ def test_add_tags_to_cluster_snapshot():
tags = conn.list_tags_for_resource(ResourceName=snapshot_arn)["TagList"] tags = conn.list_tags_for_resource(ResourceName=snapshot_arn)["TagList"]
tags.should.equal([{"Key": "k2", "Value": "v2"}]) tags.should.equal([{"Key": "k2", "Value": "v2"}])
@mock_rds
def test_create_db_cluster_with_enable_http_endpoint_valid():
client = boto3.client("rds", region_name="eu-north-1")
resp = client.create_db_cluster(
DBClusterIdentifier="cluster-id",
DatabaseName="users",
Engine="aurora-mysql",
EngineMode="serverless",
EngineVersion="5.6.10a",
MasterUsername="root",
MasterUserPassword="hunter2_",
EnableHttpEndpoint=True,
)
cluster = resp["DBCluster"]
cluster.should.have.key("HttpEndpointEnabled").equal(True)
@mock_rds
def test_create_db_cluster_with_enable_http_endpoint_invalid():
client = boto3.client("rds", region_name="eu-north-1")
resp = client.create_db_cluster(
DBClusterIdentifier="cluster-id",
DatabaseName="users",
Engine="aurora-mysql",
EngineMode="serverless",
EngineVersion="5.7.0",
MasterUsername="root",
MasterUserPassword="hunter2_",
EnableHttpEndpoint=True,
)
cluster = resp["DBCluster"]
cluster.should.have.key("HttpEndpointEnabled").equal(False)